有那么一天,博主买了一个树莓派用来挂远程下载和剪辑视频,但是它干活的时候我一直窝在宿舍里守着它也不行啊,于是我开始研究如何能在公网访问它。 很久以前我听说过“动态DNS”和“花生壳”两个名词,也知道花生壳好像被许多在家里建站的人所使用。但是有人说它的体验不好,有人说它需要收费才能用得爽,而另一个有名的dyndns给的二级域名太辣鸡。 直到我想起来我用的dnsimple似乎有这样的api,去研究了一下才发现dnsimple早就已经准备好了dynamic dns实现的全部条件。 思路:在树莓派上写个脚本,每分钟把自己的公网ip通过api实时更新到dnsimple上,dnsimple设置1分钟的TTL来保证下级dns及时更新缓存。 首先先在dnsimple的网页端创建好需要使用的域名或二级域名记录,A记录随便写如2.3.3.3。 然后在树莓派上创建脚本:

$ sudo touch dns_update.sh
$ sudo chmod +x dns_update.sh

编辑dns_update.sh:

#! /bin/bash

ip=$(curl -s https://api.ipify.org/)

curl -s -H ‘X-DNSimple-Token: :’ \
-H ‘Accept: application/json’ \
-H ‘Content-Type: application/json’ \
-X PUT \
-d “{\“record\“ : {\“content\“:\“$ip\“ }}” \
https://api.dnsimple.com/v1/domains//records/ > /dev/null

其中,为dnsimple注册邮箱, 为api token(从[这里](https://dnsimple.com/user)获取),`` 为域名, 为记录的id(在Record Editor中编辑记录时地址栏上的一串数字就是),自行填好保存。 测试一下有没有问题:

$ ./update_dns.sh

接着用crontab让其自动执行。

$ crontab -e

在最下面加入这样一行:

* * * * * /dns_update.sh

等待1分钟,就能看见dnsimple上的解析已经更新了。在openwrt路由器的【防火墙】-【端口转发】里把公网80端口转发给树莓派的80端口,就可以在外面随时用域名访问树莓派上的网站了。