路由器已经刷了 OpenWrt,接下来可能会用树莓派做一些事情,比如 NAS,还有很多没想好的。由于路由器每次启动拨号得到的 ip 地址不一样,运营商也可能会隔段时间给分配个新的 ip,所以需要配置 DDNS

有个在 Namecheap 注册的域名,Namecheap 的文档还是比较不错的,比如有介绍 如何在 ddwrt 上配置 DDNS,还有 如何发送 http 请求实现 DDNS

其实 OpenWrt 上就有 DDNS Client,并且有 UCI 配置界面。从 AA 12.09 版本开始就增加了对 Namecheap 的 DDNS 支持,所以可以直接使用 DDNS Client。按照 官方文档 给出的步骤一步步操作即可。

不过既然一条 HTTP 请求就能实现的功能,就没必要搞得这么复杂了,一个简单的脚本就能搞定。

#!/bin/sh
Now=$(date +"%F %T")
ip=`ifconfig pppoe-wan | grep inet | awk '{split($2,a,":");print a[2]}'`
url="https://dynamicdns.park-your-domain.com/update?host=[HOST]&domain=[DOMAIN]&password=[DDNS_PASSWORD]&ip=$ip"
curl "$url" > /dev/null 2>&1
if [ $? -eq 0 ]; then
        echo "[$Now] Success"
else
        echo "[$Now] Fail"
fi

其中,[HOST], [DOMAIN], [DDNS_PASSWORD] 是需要修改的地方,根据自己的实际情况做相应修改。比如,你有一个域名 example.com ,想在子域名 a.example.com 上做 DDNS ,则[HOST] 改为 a,[DOMAIN] 改为 example.com。[DDNS_PASSWORD] 是 DNS 解析服务器给的 token,不是登陆 DNS 服务器的密码。

执行脚本可能还会报下面这个错:

curl: (51) Cert verify failed: BADCERT_NOT_TRUSTED

这是因为树莓派默认是没有安装根证书的,而 https://dynamicdns.park-your-domain.com 使用了 GeoTrust Global CA 签发的 证书,所以需要把它加入到系统的根证书目录。可以通过电脑下载 GeoTrust_Global_CA.pem 拷贝到 OpenWrt 系统的 /etc/ssl/certs/ 目录下,再执行脚本就不会报错了。

由于以后可能还需要访问其他的 https 资源,每次拷贝证书还是挺麻烦的,所以可以把常见的根证书都安装了:opkg install ca-certificates ,关于证书的相关信息可以参考 OpenWrt 的 文档