图

局域网内DDNS域名绑定动态IP

在校园网里, ip地址是拨号时候分配的, 路由器或者电脑重启后ip就会发生变化; 为了不每次都记录ip地址, 使用ddns将ip和域名绑定, 方便校园网内的设备互相访问

1. 网络环境和目标

网络环境如下图所示, 我们的目标是将域名和路由器的wan口ip进行绑定(即红色框的位置)

网络示意图

2. 解题思路和疑问

电脑上安装ddns-go服务, 使用命令登录并爬取路由器页面中的ip, 再和域名进行绑定

疑问:

  • 为什么不用traceroute/tracert?

    tracert/traceroute只能获取路由器的lan口地址(192.168.2.1), 不能获取wan口地址(10.170.55.12)

  • 为什么不在路由器(openwrt)上直接部署ddns?

    虽然我这里使用的路由器是openwrt系统, 但我更希望部署的ddns-go更有可移植性

3. 实现步骤

3.1. 获取路由器wan口ip地址

感谢red blaze大佬指导

以openwrt为例, 打开并登录, 找到所需要的ip的页面
通过开发者工具找到返回的数据, 可以找到返回的json文件
openwrt_ip

直接request会报403, 传入cookies后可以正常获取

1
2
3
4
5
6
import requests
import json

r = requests.get("http://192.168.2.1/cgi-bin/luci/?status=1", cookies={'sysauth', '5861fe65dbb11a38ca80b07cfa87442e'})
json_dict = json.loads(r.text)
print(json_dict['wan']['ipaddr'])

接着就是自动获取cookie, 退出op登录, 打开开发者工具并保留日志, 登录后找到重定向前的页面, 可以看到表单的提交格式

20240320171819

1
2
3
4
5
6
7
8
9
import requests
import json

session = requests.session()
session.post("http://192.168.2.1/cgi-bin/luci/", {'luci_username': 'root', 'luci_password': 'password'})
cookies = session.cookies
r = requests.get("http://192.168.2.1/cgi-bin/luci/?status=1", cookies=cookies.get_dict())
json_dict = json.loads(r.text)
print(json_dict['wan']['ipaddr'])

这也就获取了所需要的wan口ip地址

3.2 配置ddns-go

ddns-go网上的教程不少, 顺着填就好

  • ipv4设置 ipv4设置”通过命令获取”, 将上边的代码放到文件里, 写上执行命令

3.3 其他设置

对于内网ip, 可能不会把解析记录传播到其他dns服务器上, 所以需要修改dns地址

我是用的阿里云托管域名, 所以dns地址填写阿里的223.5.5.5223.6.6.6

结果

解析结果