自己搭建动态域名解析(DDNS)最核心的价值在于:用免费的域名解析方案配合内网穿透工具,能彻底摆脱昂贵的固定公网IP和第三方中转服务,实现外网随时访问家中或办公室的NAS、监控和开发服务器。只要你的宽带能获取到公网IP(无论是动态还是静态),搭配Cloudflare或简米云的免费DNS服务,再用frp或Tailscale这类工具打通内网,这套组合完全够用,且长期成本几乎为零。
自建DDNS与传统内网穿透方案的本质区别
很多朋友一上来就纠结“内网穿透怎么搭建最省钱”,其实先得搞清楚你的网络环境属于哪一种。
- 如果你有公网IP(哪怕是动态变化),自建DDNS就是最优解,它做的是“地址翻译”把你的域名实时指向你当前变化的IP,数据不经过第三方服务器,速度快、延迟低。
- 如果你没有公网IP(运营商大内网),那DDNS帮不了你,这时候需要frp反向代理或Tailscale组网,走的是服务器中转或P2P打洞路线。
- 混合场景最常见:用DDNS处理域名解析,用穿透工具处理流量转发,两者配合而不是互斥。
业内专家指出,多数宽带用户其实能申请到动态公网IP,只是默认被运营商分配成了内网IP,打客服电话说“家里要装监控”通常就能免费开通。
第一步:确认你的宽带是否有公网IP
没有公网IP,自建DDNS就是空中楼阁,在开始任何配置前,先做这个判断:
- 登录路由器后台,查看WAN口IP地址,记下来。
- 在手机流量网络下,访问
ip.sb或ip138.com查询你的出口IP。 - 对比两个IP是否一致,如果相同,恭喜你,有公网IP,直接进入下一步,如果不同,说明你在运营商大内网后面,需要先打电话给宽带客服申请公网IP。
- 客服可能会说“没有公网IP服务”,坚持说需要远程办公、家里有监控录像要查看,多数地区都能免费开通。
第二步:选择一个支持API的免费DNS服务商
自建DDNS的核心是一个能自动更新DNS记录的平台,国内和国外各有优势,看你的使用场景。
| 对比项 | Cloudflare | 简米云DNS |
|---|---|---|
| 免费额度 | 不限域名数量 | 不限域名数量 |
| 解析速度 | 海外节点丰富 | 国内节点加速 |
| API稳定性 | 很稳定 | 稳定,需实名 |
| 域名要求 | 需将NS改到Cloudflare | 支持简米云域名或第三方域名 |
| 适合人群 | 海外用户、外贸建站 | 国内用户、访问以国内为主 |
个人强烈推荐Cloudflare,不只是因为免费,更因为它提供了极其宽松的API权限,允许你通过一行脚本修改DNS解析记录,简米云也不错,但对非简米云注册的域名,需要手动添加解析记录到简米云DNS服务器,多一步操作。
第三步:实操用脚本实现DDNS自动更新
以Cloudflare为例,整个动态域名解析配置过程需要四步,这里的核心命令建议直接复制保存,后续可反复使用。
获取Cloudflare API密钥
- 注册并登录Cloudflare,添加你的域名。
- 进入
我的个人资料页面→API令牌→创建令牌。 - 选择
编辑区域DNS模板,在“区域资源”里选择你的域名。 - 创建成功后,记下这串Token字符串,它就是你脚本的钥匙。
- 在你的域名DNS设置里,预先创建一条A记录,指向一个无效IP如
2.3.4,名字填你要用的子域名,nas.yourdomain.com。
编写自动更新脚本
这里有个关键点:多数用户的路由器自带DDNS插件,但支持的厂商有限,用脚本实现最大好处是任何设备都能用,以下是一个Python脚本,放到任何一台内网常开的电脑或NAS上即可运行:
import requests
ip = requests.get('https://api.ipify.org').text
zone_id = '你的区域ID'
dns_record_id = '你的DNS记录ID'
api_token = '你的API令牌'
domain = 'nas.yourdomain.com'
response = requests.put(
f'https://api.cloudflare.com/client/v4/zones/{zone_id}/dns_records/{dns_record_id}',
headers={'Authorization': f'Bearer {api_token}', 'Content-Type': 'application/json'},
json={'type': 'A', 'name': domain, 'content': ip, 'ttl': 120, 'proxied': False}
)
print(response.json())
注意脚本里的 proxied 字段必须设置为 false,因为如果是代理模式,Cloudflare会隐藏你的真实IP,导致内网穿透失败。
设置定时任务
这个脚本需要定期运行,因为你的公网IP会变,在Linux或NAS上,用crontab设置每5分钟执行一次:
/5 cd /volume1/ddns && python3 cloudflare_ddns.py >> ddns.log 2>&1
Windows用户可以用“任务计划程序”创建基本任务,触发器选择“每天”,频率设成“重复每5分钟”,系统登录时会自动加载这个脚本,不需要常驻窗口。
验证是否生效
修改完DNS记录后,等待一两分钟,然后用手机流量访问 nas.yourdomain.com,如果能打开你内网设备的管理页面,说明动态域名解析已经成功了,如果打不开,多半是后续的内网穿透或端口转发没配好。
第四步:内网穿透要从哪几种工具里选
DDNS解决了“你家的门牌号”问题,但没解决“你家的门锁”问题,从外网访问内网设备,还需要一个隧道,根据你的使用场景,选型逻辑完全不同。
frp:适合已有公网服务器、需要转发大量流量的场景
frp是目前用得较广的内网穿透工具,但它需要一台有公网IP的服务器,自建DDNS的用户如果有闲置云服务器,frp是首选:
- 在服务器上运行frps服务端,开放7000端口作为通信端口。
- 在内网设备上运行frpc客户端,通过配置文件将本地端口的流量转发到服务器。
- 最终访问链路是:外网用户 → 服务器公网IP → frps → frpc → 家里内网设备。
优势是转发速度只受限于服务器带宽,适合传大文件、看4K监控画面。
Tailscale:适合无公网IP、不想额外买服务器的情况
如果前面那步没申请到公网IP,Tailscale是另一种思路,它基于WireGuard协议,能穿透大内网,把多台设备组成一个虚拟局域网,手机装了Tailscale客户端,即使在外面也能用内网IP直接访问家里的NAS,它家免费版足够个人使用,不需要自己的服务器,也没有繁琐配置。
Cloudflare Tunnel:适合HTTP服务
如果只是在家里跑了个网页服务或博客,Cloudflare Tunnel能直接把流量通过Cloudflare的CDN网络转入你家,连端口转发都不用,但这套方案不支持非HTTP协议,比如SSH和远程桌面就不太好使。
对于大多数普通用户,我给一个清晰建议:
- 有公网IP + 自建DDNS,优先用端口转发,不需要任何穿透工具,速度最快。
- 有公网IP + 端口转发被封锁,用frp自建中转,成本可控。
- 无公网IP,国内用户推荐frp + 国内轻量服务器,海外用户直接用Tailscale。
免费方案组合下的典型应用参考
这三套方案怎么组合,给你一个具体的参考,假设你在家里放了一台群晖NAS,想在外网访问它的管理界面和文件服务:
- 路由器开启DDNS,填入你的域名和Cloudflare API Token。
- 新增端口转发规则,将外网5000端口映射到NAS内网IP的5000端口。
- 在域名DNS记录里,创建一条主机记录为
nas的A记录,指向你当前的公网IP。 - 打开手机群晖App,服务器地址填
nas.yourdomain.com:5000。
这套组合的数据带宽完全取决于家宽上行速度,按多数城市家宽上行30Mbps计算,看1080P监控画面没问题,传大文件则比较吃力,如果需要稳定传输百兆以上的数据,建议考虑固定专线,或用frp双端压缩。
Q&A模块:自建DDNS后仍然无法访问内网怎么办?
Q:为什么我按照DDNS配置了域名解析,外网还是无法访问内网设备的Web界面?
A:优先检查路由器的端口转发设置,DDNS只负责把域名解析到你的公网IP,但路由器在NAT协议中,外网流量到达公网IP后,并不知道该把数据转交给内网的哪台设备,需要在路由器后台找到“端口转发”或“虚拟服务器”选项,将外网端口与内网设备的IP和端口进行绑定,检查你的运营商是否封锁了80和443端口,这两个常用端口在多数地区是被封禁的,建议将外网端口改成5000以上,例如45000。
Q:家里宽带每24小时重新拨号,IP变化后DDNS多久能更新?
A:如果你用的是自建脚本,取决于脚本轮询频率;用路由器自带的DDNS插件,通常在重新拨号后的1分钟内自动完成更新,需要注意,DNS解析在全球范围生效还需要额外时间,其中Cloudflare通常在几十秒内完成全球同步,建议在路由器断线重连后,手动测试一下域名解析是否及时更新。
Q:自建DDNS和花生壳、贝锐这类付费内网穿透服务相比,哪个更稳定?
A:自建方案稳定性更高,付费内网穿透走的是服务商的公共中转服务器,高峰期带宽受限严重,免费版往往限制流量,速度也经常达不到标称值,自建DDNS公网解析是端到端直连,不经第三方的中转服务器,速度的上限取决于宽带运营商分配的上行带宽,配合frp自建中转,唯一的瓶颈是你自购服务器的带宽,不受制于人。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/770740.html

