在个人PC上搭建DDNS

最近沉迷于Minecraft,为了跟朋友一起玩耍,搞了个服务端进行托管;起初是在自己网站上的云服务器托管,但是服务器在海外,延迟太高(ping的响应在260ms左右),于是就将服务端迁移到了公益服务器(简幻欢);不过公益服务器需要靠每天签到获取积分来维持,为此我还特地定了个闹钟来签到;随着偶然间,我发现了自己家里的宽带是有公网IPV6地址,于是又将服务端迁回了自己的PC上,尝试了下是否公网可以访问到我PC上的Minecraft服务,也是顺利的托管上了。运营商提供的公网IPV6变的实在是太频繁了,还是使用DDNS来将域名绑定在动态IP上一劳永逸吧(没招了,谁想得到一天能变2次)

1. DDNS简介

DDNS,动态域名系统(Dynamic Domain Name System),它是在DNS的基础上发展起来的一种服务,用来解决动态IP地址的问题

在家庭或者一些特殊的网络环境中,运营商不会给提供静态IP地址,而是提供动态IP地址,这就意味着你的IP地址可能经常变动,一旦IP改变,那么DNS服务器解析自然就会失败,这样就没办法通过域名访问到服务器了

那怎么办呢?DDNS来帮你!在DDNS客户端中配置好域名和IP的映射关系后,它会监控你的IP地址,一旦发现它变化了,就立刻通知DDNS服务器,最后DNS服务器会从DDNS服务器拿到映射关系,所以无论你的IP地址如何变动,通过你的DDNS域名可以随时访问家里的设备

2. 个人PC上搭建DDNS

很多教程提供的都是基于服务器或者路由器固件的DDNS解决方案,之前因为没找着能在个人PC(Windows)上搭建的DDNS就懒得搞;今天上搜索引擎搜索发现了一个Github项目,完全契合我的需要https://github.com/NewFuture/DDNS

根据作者描述:他可以自动更新 DNS 解析到本机 IP 地址,支持 IPv4/IPv6,内网/公网 IP,自动创建 DNS 记录

我需要的就是描述的第一个功能

具体的安装步骤作者也是给的很详细了,可以直接参考Readme

https://ddns.newfuture.cc/

上面打不开就开下面

https://github.com/NewFuture/DDNS/blob/master/README.md

这边主要讲下我个人搭建遇到的一些坑点

2.1 出现AttributeError: module ‘ddns.provider’ has no attribute ‘tencentcloud’

起初我用的是项目的稳定版本v4.0.2,使用的时候貌似还不支持识别配置文件中dns字段值为tencentcloud;后续使用PIP安装,补充tencentcloud-sdk-python依赖也是无法解决;

解决方法:直接使用最新版本的NewFuture/DDNS,实测v4.1.0-beta4版本可正常使用

2.2 绑定的IPV6并不是所期望的值

我自己的PC上,使用ipconfig命令,在对应的网卡适配器中有以下值

1
2
3
4
5
6
7
8
9
10
以太网适配器 以太网:

连接特定的 DNS 后缀 . . . . . . . :
IPv6 地址 . . . . . . . . . . . . : xxxx:xxxx:xxx:xxxx:xxxx:xxxx:xxxx:xxx
临时 IPv6 地址. . . . . . . . . . : xxxx:xxxx:xxx:xxxx:xxxx:xxxx:xxx:xxxx
本地链接 IPv6 地址. . . . . . . . : xxxx::xxxx:xxxx:xxxx:xxxx%9
IPv4 地址 . . . . . . . . . . . . : 192.168.1.2
子网掩码 . . . . . . . . . . . . : 255.255.255.0
默认网关. . . . . . . . . . . . . : xxxx::1%9
192.168.1.1

NewFuture/DDNS默认绑定到域名的是临时 IPv6 地址的值,我是想绑定IPV6地址的值,NewFuture/DDNS好像并没直接给出配置选项,不过我们可以通过自定义命令来获取,这边提供一个获取IPV6地址值的powershell命令(在cmd中运行)

1
powershell -Command "(ipconfig | Select-String 'IPv6 地址' | Select-Object -First 1).Line.Substring((ipconfig | Select-String 'IPv6 地址' | Select-Object -First 1).Line.IndexOf(':') + 2)"

填入配置文件的时候记得将双引号转义

2.3 配置文件参考(腾讯云、IPV6)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
{
"$schema": "https://ddns.newfuture.cc/schema/v4.0.json",
"dns": "tencentcloud",
"id": "你的id",
"token": "你的key",
"index4": false,
"index6": "cmd:powershell -Command \"(ipconfig | Select-String 'IPv6 地址' | Select-Object -First 1).Line.Substring((ipconfig | Select-String 'IPv6 地址' | Select-Object -First 1).Line.IndexOf(':') + 2)\"",
"ipv4": [],
"ipv6": [
"xxx.lrui1.top"
],
"log": {
"level": "INFO"
},
"endpoint": "https://dnspod.tencentcloudapi.com"
}

NewFuture/DDNS运行命令如下

1
ddns.exe -c config.json

还有个定时任务,我就不搞了,有变更我自个跑一下就OK(具体搭建可以参考官方文档,有内置的定时任务模块,也有Windows平台的bat,很简单)

3. 参考链接

DDNS(动态域名解析)是什么?从入门到应用

https://github.com/NewFuture/DDNS

IPv6地址、临时IPv6地址、本地链接IPv6地址,这三者有什么区别?