DDNS(动态域名解析)

56 阅读7分钟

背景:我有一个家庭宽带(电信),公网 IP 是动态分配的,经常变动(比如今天是 223.154.81.207,明天可能是 223.154.81.208)。 我想在外网通过一个固定的域名(比如 comfy.abc.com)访问我家里的 ComfyUI 服务(运行在 http://comfy.abc.com:8181)。

家用宽带的公网IP为什么会经常变动?

  • 光猫重启。
    • 部分地区的电信/联通/移动运营商,为了防止光猫长时间运行死机或清理缓存,会在后台下发配置,让光猫在凌晨(比如 3:00)自动重启;
    • 光猫如果放置在弱电箱内,散热环境极差。当 CPU 温度过高时,硬件会自动触发重启机制以保护电路;
    • 家用宽带的光猫配的电源适配器质量往往一般。如果家里电压有波动,或者电源适配器老化,光猫也会因为瞬间断电而重启。
  • 运营商端的 PPPoE 租约限制。电信机房通常会强制设定一个周期(比如 48 小时或 7 天),一旦时间到了,机房端会强制切断你的拨号连接并要求重新认证。
  • 公网 IP 是动态分配的。大部分家庭宽带的公网 IP 都是动态分配的,而不是静态固定的。运营商会根据网络负载和资源分配情况,动态调整用户的公网 IP 地址。

解决方案:使用 DDNS(动态域名解析服务)

DDNS(Dynamic Domain Name System)是一种服务,可以让你的域名自动更新到你当前的公网 IP 地址。这样,无论你的公网 IP 如何变化,你都可以通过一个固定的域名访问你的家庭网络设备。

我家的网络结构是这样的:

  [互联网]
     |
  [光猫(拨号)]
     |
  [H3C 路由器]
     |
  [Windows 电脑(ComfyUI)]

这里有一个巨大的坑需要避开:

  • 如果直接在 H3C 路由器 上设置 DDNS,路由器获取到的 WAN 口 IP 是 192.168.1.2(内网IP),它可能会把这个内网 IP 发给域名服务商,导致解析失败。
  • 最佳方案: 在你的 Windows 电脑 上运行一个小软件(DDNS 客户端)。它会直接访问互联网查询你真正的公网 IP(223.x.x.x),然后更新给域名。这能完美绕过双重路由的 IP 识别问题。

下面我以最稳定、最主流的 阿里云 (Aliyun) 为例,配合开源神器 DDNS-Go,实现动态域名解析。


准备工作

  1. 约 10-30 元人民币(购买一个便宜的域名,首年通常很便宜)。
  2. 你的 Windows 电脑(运行本地服务ComfyUI 的那台)。

第一步:购买域名并获取“钥匙” (以阿里云为例)

你需要先有一个属于你的域名,并拿到控制它的“钥匙” (AccessKey)。

  1. 注册与购买

    • 访问 阿里云万网
    • 搜索一个你喜欢的域名,比如 zhangsan-ai.xyzcomfyui-test.top.top, .xyz 这种后缀通常很便宜,几块钱一年)。
    • 购买并完成实名认证(国内规定必须实名)。 ![在这里插入图片描述](i-blog.csdnimg.cn/direct/44ea… 状态显示正常就可以了。
  2. 获取 AccessKey (钥匙)

    2.1 创建用户

    • 登录阿里云控制台。

    • 将鼠标悬停在右上角的头像上,点击 AccessKey管理

    • 选择 “使用 RAM 用户 AccessKey”(为了安全,不要用主账号)。 请添加图片描述

    • 点击右侧的用户,选择创建用户 在这里插入图片描述

    • 填写登录名称:ddns-user,其他信息不用填。

    • 勾选 使用永久 AccessKey 访问

    • 勾选 我确认必须创建AccessKey

    • 点击确定在这里插入图片描述

    2.2 安全验证

    • 根据提示完成手机或扫脸验证。 在这里插入图片描述

    2.3 复制秘钥

    • 创建成功后,会显示 AccessKey IDAccessKey Secret立刻复制保存下来,因为关掉页面就看不到了! 在这里插入图片描述

    2.4 授权

    • 刷新网页,在用户列表,找到刚才创建的 ddns-user,可以看到右侧有一个 “新增授权” 按钮,点击它。 在这里插入图片描述
    • 点击右侧 “新增授权”
    • 搜索 DNS,选择 AliyunDNSFullAccess (管理云解析DNS的权限),点击确认新增授权在这里插入图片描述

    完成之后,看到执行状态是已完成就行了。


第二步:在电脑上配置“自动更新员” (DDNS-Go)

我们需要一个软件,每隔几分钟检查一下你的 IP 变没变,变了就自动告诉阿里云。推荐使用 DDNS-Go,免费、开源、界面友好。

  1. 下载软件

    • 去 GitHub 下载 DDNS-Go
    • 我的·ComfyUI服务在Windows上,所以我下载 ddns-go_x.x.x_windows_x86_64.tar.gz,大家根据自己的系统选择对应版本。
    • 解压到一个文件夹。
  2. 安装服务

    • 右键以管理员身份运行 ddns-go.exe

在这里插入图片描述

  • 或者在文件夹里右键“安装服务.bat” (如果有),让它开机自启。

  • 运行后,可以看到它在监听9876端口,然后在浏览器打开http://127.0.0.1:9876这个网页。 在这里插入图片描述

  • 首次进入直接是管理员注册,设置一个用户名和密码,注册成功后登录。我这里已经是注册过,所以这里显示登录的字样。

  1. 配置 DDNS-Go

    • DNS服务商:选择 Aliyun
    • AccessKey ID:填入刚才在阿里云复制的 ID。
    • AccessKey Secret:填入刚才在阿里云复制的 Secret。
    • IPv4 设置
    • 是否启用:勾选。
    • 获取 IP 方式重点! 选择 “通过接口获取”。这是为了让它忽略本机的 192.168 IP,直接去问互联网“我是谁”。(默认的 myip.ipip.net 就很好)。
    • Domains (域名):填入你刚才买的域名。
    • 如果你买的是 abc.com,你可以填 comfy.abc.com。这样 comfy 就是你的二级子域名。 在这里插入图片描述
    • IPv6:如果不通可以不勾选。
    • 点击 【保存】。 其他的一些选项可以不选择或默认。
  2. 查看日志

    • 在网页右侧看日志,如果出现 更新域名解析成功新增域名解析成功,说明配置通了!

第三步:验证与使用

  1. 等待生效:首次解析可能需要几分钟。

  2. 测试

    • 打开 Windows 终端 (cmd),输入:ping comfy.abc.com (换成你的域名)。
    • 看返回的 IP 地址是不是你现在的公网 IP(223.154.81.207)。如果一致,说明域名已经指向你家了。
  3. 最终访问

    • 以后在外面,只需要输入: http://comfy.abc.com:8181(这里8181是 ComfyUI 运行的端口)就能访问你家里的 ComfyUI 了!
    • 不管电信怎么改你的 IP,DDNS-Go 都会自动把这个域名指向最新的 IP。

总结 (避坑指南)

  • 为什么不用路由器的 DDNS? 因为你的 H3C 路由器 WAN 口是 192.168.1.2,很多老旧路由器的 DDNS 很傻,会把这个内网 IP 传上去,导致外网访问不了。用电脑上的 DDNS-Go 走“接口获取”模式是最稳的。
  • 电脑必须开机吗? 是的。如果电脑关机了,IP 变了就没人汇报了。但既然你是远程连 ComfyUI,电脑本来就得开着,所以没影响。
  • 域名要备案吗? 如果你只是用来做 API 或者自己访问,不绑定国内服务器的 80/443 端口做网站,通常只需要实名认证,不需要进行繁琐的 ICP 备案(只要你不用国内服务器做 Web 托管)。直接解析到家庭宽带 IP 是可以用的。

附录:

DDNS-Go 是如何解析到家庭宽带的公网 IP 的?

简短说明:DDNS 客户端(如 ddns-go)把你的“公网 IP”写入 DNS 是两个步骤:先探测外网 IP,再把该 IP 通过域名提供商的 API 更新为 A/AAAA 记录。

原理要点(逐步):

  • 探测公网 IP:客户端常用的方法有
    • 访问外部 HTTP 服务(例:api.ipify.org、https://ifconfig.c…返回你从那台服务看到的源地址;
    • 使用 STUN 协议向 STUN 服务器询问(适用于 NAT 环境,可以得到 NAT 后的公网地址/端口);
    • 读取本机网卡地址(仅在没有 NAT 时有用,但通常这是内网地址,不是公网 IP)。
  • 判断是否需要更新:把探测到的 IP 与当前 DNS 记录里的 IP 比较(客户端会查询 DNS 或缓存的上一次值)。
  • 更新 DNS:如果不一致,客户端用配置的 DNS 提供商凭证(Cloudflare、阿里云、Namecheap 等)调用其 API 或使用动态 DNS 协议把 A/AAAA 记录改为最新公网 IP。
  • 生效与传播:DNS 记录更新后,DNS 缓存(TTL)会影响全网看到变化的时间。