ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

内网穿透与DDNS低成本域名选择:避坑指南与实战入门

内网穿透与DDNS低成本域名选择:避坑指南与实战入门 玩内网穿透和DDNS的人迟早会在域名上栽一次。我自己就是从几个免费二级域名开始后来换成首年促销域名再被续费价格吓一跳最后才摸清一套“长期用得爽还得便宜”的选域名方法。这篇文章不堆参数直接把选域名、避坑、接到frp和DDNS里的完整思路捋一遍照着做就行。1. 为什么内网穿透和DDNS都绕不开域名1.1 内网穿透场景下的域名作用内网穿透这件事本质上是把家里或公司内网的服务通过一台有公网IP的服务器暴露出去。最常见的方式就是用frp或者自建的ngrok服务端。你会发现这类工具一旦进入正式使用IP地址根本没法用谁也不会天天记一串123.123.123.123:8080。域名在这里解决的不只是记忆问题还解决三个更实际的问题。第一子域名隔离。我家里同时跑了NAS、Home Assistant、Jellyfin、一个内网导航页如果都用IP加端口不仅乱而且多个HTTP服务混在一起很多应用的路由会串。用不同子域名指向同一个frp服务端比如nas.example.com、home.example.com、jellyfin.example.com每个子域名通过frp转发到对应的内网端口互不干扰。这几乎是自建穿透服务最标准的姿势。第二TLS证书。现在浏览器对所有HTTP站点的态度越来越严格很多API也强制要求HTTPS。Let‘s Encrypt这类免费证书只能签发给域名不能签发给IP。我自己在给Home Assistant配HTTPS的时候深有体会没有域名连WebRTC、摄像头流和语音组件都跑不顺。有了域名泛域名证书或者单域名证书申请起来都是几分钟的事。第三协议兼容。OAuth2、Webhook、反代、WebSocket这些场景里回调地址必须是一个规范的URL。比如企业微信、钉钉机器人、GitHub Webhook它们根本不认IP地址只认域名。之前有朋友调试一个授权回调拿IP填进去第三方平台直接拒绝换成域名就通了。1.2 DDNS与域名的关系DDNS全称是Dynamic DNS也就是动态域名解析。家里宽带绝大多数拿不到固定公网IPv4IP隔几天甚至几小时就会变。你不可能每次IP变了都手动登录云控制台改一遍解析记录。DDNS要做的事情很简单定期检测当前出口公网IP发现变了就自动调用域名解析服务商的API把域名解析记录更新成最新IP。这个组合里域名是真正的主心骨。IP一直变但域名不变。我只要记住一个nas.example.com不管家里IP怎么跳都能访问到NAS。所以DDNS选域名最看重两点一是解析服务商是否提供了足够简单的API能不能让我写个Python脚本或者部署个DDNS-GO工具来自动更新二是域名本身允不允许修改NS记录因为很多好用的解析服务商需要你把域名的NS指过去才能管理。1.3 免费域名为什么不适合长期用我知道很多人一开始都会图省事用各类免费二级域名包括我早期也试过。免费域名不是完全不能用测试一下、临时演示一下确实方便但长期跑内网穿透或者DDNS问题一个接一个。免费域名最大的问题是不稳定。很多免费域名服务商说关就关说删记录就删记录。你辛苦部署好frp、配好证书结果域名服务商跑路所有服务一夜之间全部失联。更麻烦的是免费域名通常不支持你自定义DNS解析服务也不提供APIDDNS工具很难对接。有些免费域名甚至不允许你申请TLS证书因为证书签发机构对公共后缀名单查得很严这类域名通常需要邮件验证而你根本收不到那个邮箱。我并不是否定免费域名测试环境用它完全没问题。但如果是给NAS、家庭服务、自建穿透长期用花几十块钱注册一个属于自己的域名省心程度完全不一样。你要的其实不是“免费”而是“低成本且可控”。这也就是这篇文章的核心思路找到真正长期续费不肉疼的低价域名。2. 选域名的几条硬标准2.1 首年低价不算数要看续费价很多云厂商的首年促销价特别诱人.xyz首年1块钱、.top首年6块钱看着跟白送一样。但很多人忽略了一件事域名是按年续费的年租制第二年、第三年的价格才是你真正要长期承担的成本。有些后缀第一年1块钱续费直接跳到一百多这种就不能算“长期低价”。我自己选长期域名的时候会把注册商结算页面里的“续费价格”单独查出来而不是只看首年价格。做一个不算复杂但很实用的估算假如你的预期使用时间是5年那就把首年价加后续4年续费价算一个总成本再除以5看看每年均价是多少。这样一算很多“首年超便宜”的域名就露馅了。这里整理一个量级参考具体价格会随注册商活动浮动但大方向是可以参考的后缀首年常见价格续费常见价格长期成本评价.xyz1元到20元不等30元到80元不等如果走国外低成本注册商续费很香.top1元到15元不等30元到60元不等性价比高适合DDNS和内网穿透.icu几元到30元不等60元到100元不等首年便宜续费略高.site10元到40元不等70元到110元不等一般过于花哨.online10元到50元不等70元到120元不等一般看活动.cc30元到70元不等70元到120元不等老牌但长期不便宜.com60元到100元不等80元到110元不等稳定偶尔促销可以低成本进场.me50元到100元不等100元到180元不等偏贵不适合纯DDNS按我自己现在的使用习惯主力域名是.xyz和.top一个给主站和API用一个专门给家里的DDNS和frp子域名用一年加起来花费控制在几十块钱完全在可接受范围内。2.2 支持API和第三方DNSDDNS自动更新的核心是解析服务商的API。这个点很多人注册域名的时候根本没注意等要部署DDNS-GO的时候才发现自己的注册商要么不开放API要么API权限管理特别麻烦。我的建议是买域名之前先确认能不能改NS记录。因为就算注册商自己的API不好用只要允许把NS改到Cloudflare这类专业解析服务商DDNS的问题就解决了一大半。Cloudflare的免费套餐本身就支持API Token、支持批量管理解析记录、更新记录秒级生效而且不额外收DNS托管费。把域名的NS指过去之后你只把Cloudflare当作一个纯DNS管理平台域名续费还是在原来的注册商那里两边互不冲突。实际选注册商的时候我也会刻意避开那些“域名购买后需要额外付费才能开API”的平台。域名API权限应该默认开放或者至少免费可用。如果注册商连API文档都搜不到基本可以放弃用它做DDNS域名。2.3 实名认证与使用边界国内注册商购买的域名普遍会要求完成实名认证。这个环节不是域名注册商故意卡你而是为了确认注册人信息真实有效。如果你人在国内用国内云厂商的域名服务实名认证基本是绕不开的一步。建议在注册后就尽快提交资料不然域名随时可能被暂停解析。还有一个容易踩的坑如果你的域名解析到国内服务器并且对外提供网站服务通常还需要考虑网站备案相关要求。但如果你只是做DDNS解析到家庭宽带动态IP或者把服务跑在一台境外的低成本VPS上那备案这件事就和你的使用场景无关。因为备案针对的是服务器所在地不是域名本身。不过说实话家庭环境做内网穿透的时候绝大多数都是自己用、家人用、小圈子朋友用不是面向公众的商业站点不太会涉及到这套流程。总之按你的实际部署位置和服务类型来判断别把复杂场景想简单了。2.4 隐私保护、转移锁与账号安全域名注册信息默认会公开到Whois数据库里包括你的姓名、邮箱、地址。这意味着任何人都能查到域名背后的注册人信息垃圾邮件和骚扰电话就是这么来的。所以注册域名时一定要看注册商提不提供Whois隐私保护。有些服务商把这个当增值服务收费有些是免费的。比如我在用的一些国外注册商隐私保护就是默认免费开启的。除了隐私还要把域名锁定功能打开也就是Transfer Lock。这个功能可以防止域名在未经你授权的情况下被转移到别的注册商。域名这东西是一种网络资产一旦被别人偷偷转走找回流程非常麻烦。开启锁定之后即使有人拿到你的账号密码转移域名也多一道障碍。更稳妥的做法是开启两步验证并设置独立的域名管理邮箱不要和注册商登录邮箱完全混用。3. 几个值得关注的长期低价域名方案3.1 主力推荐.xyz配合Cloudflare DNS.xyz是被我验证过最稳的低成本方案。很多人对这个后缀有成见觉得花哨、不正经但单纯从一个DDNS和内网穿透域名的角度看它完全够用。关键点在于不要在那些首年1块钱的平台续费而是找一个续费价格良心的注册商。Cloudflare的域名注册服务是按注册局成本价卖的.xyz的续费常年维持在一个很低的水平而且默认赠送Whois隐私保护。在Cloudflare上注册.xyz之后域名天然就在Cloudflare DNS体系里不需要额外改NS。创建API Token的时候可以直接限定“只允许管理指定域名的DNS记录”这样就算脚本里配置的Token泄露了别人也没办法动你的域名核心信息。这种低权限Token对跑DDNS脚本来说是特别理想的。我自己家里的NAS用的就是.xyz域名子域名开了一堆一年总成本很低完全没有续费焦虑。3.2 备选方案.top和.icu.top后缀在国内服务商的促销里出现频率很高首年价格经常是几块钱。它的续费价格在主流新顶级域里也属于比较亲民的虽然不算最低但胜在注册渠道多、活动频繁偶尔能蹲到很合适的折扣。这个后缀比较适合想省事、不想折腾国外注册商的人。需要注意的是一样要优先看续费价别被首年促销冲昏头。.icu的情况类似首年经常有“1元”级别的活动但续费价格不低。我的观点是除非你非常喜欢这个后缀或者只是拿来当临时测试域名否则长期成本略高。如果你正好赶上平台给的多年注册折扣那另说。总体来看要在“长期”和“低价”之间取平衡.xyz和.top更符合标题里说的“长期低价”定位。3.3 老牌稳妥.cc与.com促销进场.cc后缀在技术圈有一定历史积淀很多技术人拿它当个人站域名。优点是比较短、辨识度高适合做个人品牌但它的续费价格并不便宜长期用下来不是最优解。如果是想要一个“看起来不那么新潮”的域名.cc可以备选但我不太建议拿它纯粹跑DDNS。.com是永远的老大哥虽然常规续费价格不算低但它经常会出现在各种注册商的年度促销里。比如黑五、域名日、新用户活动首年可能只要几美元。如果你愿意花点精力跨注册商比较完全可以用一个很低的成本拿到.com域名并且可以在促销期直接续费多年提前锁定未来几年的使用成本。这个思路其实比买一个不入流后缀更稳毕竟.com在兼容性、信任度、搜索引擎识别上都更好。3.4 注册商怎么选Cloudflare、Namesilo、Porkbun域名后缀定下来之后注册商的选择直接决定你后面累不累。我常用的有三类Cloudflare、Namesilo、Porkbun。注册商优势适合人群Cloudflare注册续费按成本价DNS和API体验最好隐私保护免费玩DDNS、自建穿透、喜欢折腾的人Namesilo老牌隐私保护免费接口稳定需要囤域名、看重注册稳定性的人Porkbun续费价格亲民界面舒服支持多种支付方式普通个人用户、想低门槛入手的人国内云厂商的域名服务也不是不能用但你要提前确认两件事续费价格是不是自己能接受API Token的权限能不能只限定在DNS记录范围。很多国内平台的API权限模型比较粗放在安全粒度上确实不如Cloudflare做得细。所以我的建议是域名可以在任何平台注册但DNS解析尽量都统一托管到Cloudflare这样做DDNS最顺手。4. 实操把域名接到DDNS和frp上4.1 DDNS自动更新A记录以Cloudflare API为例假设你已经注册好一个.xyz域名并且把NS记录指向了Cloudflare。接下来要做的事情就是让一个脚本定时检测家里的出口IP一旦发现IP变了自动修改Cloudflare上的A记录。首先在Cloudflare控制台创建一个API Token权限选择“Zone.DNS:Edit”区域范围限定到你的具体域名。不要把“Account: Read”之类的大范围权限也勾上。生成之后把Token保存到一个只有自己能读的地方。下面是Python脚本的核心逻辑import requests import time # 配置区 zone_id 你的Zone ID record_id 你的DNS记录ID api_token 你的API Token domain nas.example.com # 1. 获取当前公网IP def get_public_ip(): try: r requests.get(https://api.ipify.org, timeout10) return r.text.strip() except Exception as e: print(f获取公网IP失败: {e}) return None # 2. 获取Cloudflare上记录的旧IP def get_dns_record_ip(): url fhttps://api.cloudflare.com/client/v4/zones/{zone_id}/dns_records/{record_id} headers { Authorization: fBearer {api_token}, Content-Type: application/json } r requests.get(url, headersheaders) data r.json() return data[result][content] # 3. 更新A记录 def update_dns_record(new_ip): url fhttps://api.cloudflare.com/client/v4/zones/{zone_id}/dns_records/{record_id} headers { Authorization: fBearer {api_token}, Content-Type: application/json } payload { type: A, name: domain, content: new_ip, ttl: 1, proxied: False } r requests.put(url, headersheaders, jsonpayload) if r.status_code 200: print(fDNS已更新: {domain} - {new_ip}) else: print(f更新失败: {r.text}) # 4. 定时循环 while True: current_ip get_public_ip() if current_ip: old_ip get_dns_record_ip() if current_ip ! old_ip: update_dns_record(current_ip) else: print(fIP未变化: {current_ip}) time.sleep(300)这里有一个很重要的点proxied参数要设置为False。因为DDNS解析的最终目标是你家里的动态公网IP这个IP是直接从你的宽带出口访问的不需要经过Cloudflare的代理加速。如果设置成TrueCloudflare会把你家IP藏在它的CDN后面很多场景下反而会造成访问异常比如你的frp服务、NAS流量并不会走HTTP层代理模式会干扰WebSocket和长连接。如果你不想自己写脚本也可以用现成的DDNS-GO它是一个很省心的动态域名解析小工具。把Cloudflare的Token和Zone ID填进去选择好域名记录它就会自动检测IP变化并更新还支持Webhook通知。我最初是手工写脚本后来换成DDNS-GO主要因为它的通知功能比我自己写的日志更直观。4.2 用frp配合子域名访问内网服务有了域名frp这边就很简单了。假设你有一台公网服务器IP是1.2.3.4你希望访问blog.example.com时能转发到家里局域网内一台192.168.1.100的机器上的8080端口。先在服务器端配置frps.ini[common] bind_port 7000 vhost_http_port 8080然后在客户端配置frpc.ini[common] server_addr 1.2.3.4 server_port 7000 [blog-web] type http local_ip 192.168.1.100 local_port 8080 custom_domains blog.example.com这里custom_domains指定了外部访问的域名。服务器端收到对blog.example.com的HTTP请求后会通过frp隧道转发到你家内网的192.168.1.100:8080。接下来只需要去DNS管理后台把blog.example.com解析到你的服务器IP1.2.3.4注意这里是解析到公网服务器IP不是你家动态IP。这一步很多人容易搞混。frp方案里域名解析到的是有公网IP的服务器后续所有流量先到服务器再由frp隧道转进内网。而DDNS方案里域名解析到的才是你家的动态IP。如果用的是Cloudflare DNS在DNS记录里添加一条A记录填写服务器IP即可。如果你的frp还要承载WebSocket或HTTPS那就再申请证书或者用CNAME方式把blog.example.com指到别的入口。不过对新手来说先跑通HTTP这一条链路最重要后面再慢慢加TLS。4.3 用Nginx反向代理统一管理多个服务当内网服务越来越多所有子域名解析都指向同一台服务器时frp自身的vhost_http_port虽然能处理多个域名但灵活度不够。更专业的做法是让frp只负责建立隧道把流量交给本地的Nginx反向代理再由Nginx根据域名分发给frp对应的本地端口。服务器上的Nginx配置大概是这样的思路server { listen 80; server_name blog.example.com; location / { proxy_pass http://127.0.0.1:8080; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }流量路径变成了用户请求blog.example.com- 服务器Nginx - frp客户端隧道 - 内网服务。这样做的好处是你可以在Nginx层统一加SSL证书、限流、鉴权和日志不用每个frp服务单独处理。如果你不想手动写Nginx配置也可以部署Nginx Proxy Manager用Web界面点几下就能把域名和端口对应起来。5. 常见问题与避坑指南5.1 续费价格暴涨最让人难受的不是首年贵而是第二年突然发现续费价比预期高出一大截。之前有读者和我反馈他买了一个后缀域名首年花了6块钱第二年续费要130多完全离谱。想避坑只能在注册之前查清续费价。查询渠道是两个注册商官网结算页以及域名注册局的官方定价公告。不要只看中文平台的价格有些后缀在海外注册商的续费价格可能低很多。比如.xyz在Cloudflare的续费价可能比某些国内平台首年恢复原价之后便宜不少。域名这东西注册商之间的价差真的很大注册前多开几个页面对比一下不亏。5.2 API Token权限过大很多人图省事直接把Cloudflare的Global API Key写在DDNS脚本里。这个Key是账号级别的等于把整个域名的管理权限全部交出去了。只要脚本或者服务器出点问题别人拿到了这个Key你的域名、DNS记录、甚至域名转移设置都可能被篡改。正确做法是创建一个受限的API Token只授权特定域名的DNS编辑权限。Cloudflare的Token权限模型很清晰你在创建Token时可以精确选择“某个Zone下的DNS记录编辑”。这样即使脚本被拖库了攻击者最多也就改改你的解析记录动不了其他东西。5.3 子域名和记录被扫描攻击域名解析到公网后各路扫描器很快就会发现你的IP和子域名。尤其是frp这类服务默认端口一开各种暴力破解、探测脚本都会找上门。我自己的服务器部署后就遇到过大量的HTTP扫描日志里全是奇怪的路径探测。不要以为小域名没人管。只要域名接入DNS扫描器就把你当成普通目标。应对方法也不复杂frp服务端不要全端口开放普通端口只对内网服务开放子域名尽量别用test、admin、intranet这类容易被猜的名字用随机字符串更安全用Nginx或者Cloudflare Access做一层访问鉴权比裸奔强得多。5.4 域名到期忘记续费长期低价域名的一大风险不是买不起而是忘了续费。域名一旦进入赎回期找回成本极高有些甚至直接就被别人注册走了。而且你所有的DDNS配置、证书、反向代理都绑在这个域名上一旦过期整套服务链直接断掉。我自己的经验是开启自动续费同时把域名的到期提醒邮箱设置成自己常用的邮箱最好再绑定手机号通知。如果是在Cloudflare注册的域名它会在到期前发邮件提醒续费操作也可以在后台一键完成。像我这种家里同时跑frp和NAS的人会把所有域名的到期日整理成一个表格每季度检查一次确保不会出现“半夜服务中断才发现域名过期”的尴尬。5.5 域名被某些解析服务污染或者解析生效慢有时候你会遇到修改DNS记录之后某些地区访问还是旧IP感觉很焦虑。这其实和域名本身没关系而是DNS解析缓存有更新时间。Cloudflare这类服务商的TTL可以设置成很低比如一分钟这样IP切换之后全球生效速度会快很多。但有些平台强制把TTL锁死在600秒IP变化之后最长可能要十分钟才能全部生效。对于DDNS场景来说十分钟的窗口期完全可接受毕竟家庭宽带IP并不是分钟级变化通常隔几天甚至几周才变一次。如果你实在无法忍受可以把DDNS脚本的检测间隔缩短并且在脚本里做一次本地网络检测确保确实是出口IP变化了再更新避免频繁调用API。还有一点如果同时用了多个DNS服务商比如域名NS指向Cloudflare但Cloudflare里又设了CNAME跳到另一个解析平台那整个生效链路会变长。我建议直接让域名的NS统一指向Cloudflare所有记录都在一个地方管理省得排查问题的时候来回切平台。最后分享一个小经验选域名这件事说白了就是三个字别上头。看到首年1块钱的促销不要急着冲先翻到结算页看看续费价格再决定要不要买。我的主力域名加起来也就几十块钱一年但支撑着家里的NAS、Home Assistant、几个测试项目和一堆自动化任务。便宜的域名加上顺手的DNS管理才是内网穿透和DDNS最稳定的底座。希望这篇内容能帮你少走点弯路把精力留在服务本身。
返回列表