ddns-scripts-principle-of-bb-on-openwrt
更新的url
更新的url全部都记录在/usr/lib/ddns/services
,如需增加新的ddns服务商,则需要把该服务商的更新url填于此处。
更新的url网上找来
1 | http://[USERNAME]:[PASSWORD]@ddns.oray.com/ph/update?hostname=[DOMAIN]&myip=[IP] |
更新的url, 公云API有提供:http://www.pubyun.com/wiki/%E5%B8%AE%E5%8A%A9:api
1 | http://[USERNAME]:[PASSWORD]@members.3322.org/dyndns/update?system=dyndns&hostname=[DOMAIN]&myip=[IP] |
上报流程
启动/etc/init.d/ddns start
。
拿出/usr/lib/ddns/services
里面的对应更新url,并存于update_url
变量中。
然后将update_url
里面的USERNAME
、PASSWORD
和DOMAIN
分别用配置文件/etc/config/ddns
中的username
、password
和domain
替换(以上面的花生壳更新url为例)。
update_url
中的IP
用当前路由器wan口ip替换掉,最终存于final_url
变量中。
然后通过nslookup [DOMAIN]
命令查找到域名的公网IP,存于registered_ip
变量中。
然后registered_ip
与路由器的wan口IP进行比较:
- 相同的话则不上报
- 不相同的话,则通过
/usr/bin/wget -O - ${final_url}
上报给ddns服务商。
相关配置参数
1 | config service 'oray' |
ip_source
和ip_network
的解释如下:
1 | # If "ip_source" is "network" you specify a network section in your |
配合ddns
的默认配置可看出,ip_source
和ip_network
是成对出现的:
1 | #option ip_source "network" |
1 | #option ip_source "interface" |
1 | #option ip_source "script" |
按照上面的ddns
配置,如果你的路由是二级路由,那么wan口ip是局域网地址时,也照样会把本wan口的ip上报给ddns服务商的。
ip_url
参数:
此配置没有填写ip_url
参数,因为ddns
脚本获取当前wan口ip时,先判断ip_source
参数
ip_source = "network"
,则最终通过ubus call network.interface dump
拿到wan口ip。ip_source = "interface"
,则通过ifconfig
拿到对应网口ip。ip_source = "script"
,则执行自定义脚本。- 以上都不是(相当于ip_source = “web”),则通过命令
wget -O - ${ip_url}
拿到公网ip,即访问${ip_url}
地址来得到公网ip。如果还拿不到那就访问默认的http://checkip.dyndns.org
网址拿公网ip。