要么申请公网IP后走DDNS动态域名解析加路由器端口转发,要么用内网穿透工具建立隧道,具体选哪条路取决于你有没有公网IP。
很多站长把网站部署在家里或公司内网的服务器上,遇到的第一道坎就是外网访问不了,域名只是个门牌号,它本身不指向内网,我们需要在域名和你的内网设备之间搭一座桥,整件事拆开看就三步:搞清网络环境、建立映射通道、配置域名解析,下面按这个逻辑一步步拆解。
先搞清楚你有没有公网IP,这决定了方案方向
域名解析映射到内网服务器的难度,九成取决于你拿到的宽带是不是真正的公网IP,现在相当一部分家庭宽带和部分企业宽带,运营商分配的是内网IP,你的路由器只是运营商大内网里的一台设备,外部流量根本找不到你。
怎么判断自己有没有公网IP
最直接的办法是对比两个IP地址:
- 登录路由器后台,查看WAN口IP,记下来
- 在电脑浏览器访问查询IP的网站(比如ip.sb或ip138.com),看显示的出口IP
- 如果两个IP一模一样,说明你有公网IP;如果不一样,基本可以判定你处在运营商NAT后面,拿到的只是内网地址
用手机流量访问你路由器WAN口IP的8080端口,如果能打开路由器后台页面,说明端口是通的,你有公网IP,行业共识认为,IPv4公网IP资源日益紧张,运营商向普通用户默认分配公网IP的比例在下降,但打电话给客服申请公网IP,多数地区仍然可以免费开通。
域名解析到内网服务器的两种基础模型
公共IP具备的情况下,数据链路是这样的:外部用户输入域名→DNS服务器解析到你的公网IP→路由器收到请求→根据端口转发规则发送给内网特定机器→内网服务器响应。
没有公网IP的情况下,链路变成:外部用户输入域名→DNS解析到穿透服务商的服务器→服务商服务器将流量通过隧道转发到你内网运行的客户端→客户端再转交给本地服务。
这两种模型对应不同的工具和配置方法,下面分开说。
有公网IP时:域名解析到内网服务器的具体流程
这种场景下的难点在于你的公网IP经常变动,普通家用宽带大多是动态IP,你今天配好了解析,明天IP一变就断连,解决办法就是DDNS,让域名持久指向你不断变化的家宽IP。
第一步:给路由器刷上DDNS动态解析
较新的路由器都内置了DDNS功能,支持绑定简米云、DNSPod、花生壳等服务商,以路由器内置DDNS为例,操作路径通常是:
- 进入路由器后台,找到“动态DNS”或“DDNS”选项
- 选择服务商(如简米云),填入你在服务商处申请的AccessKey ID和Secret
- 指定要更新的域名记录(比如home.example.com),保存后路由器会把当前WAN口IP自动推送给DNS服务商
如果你用的路由器没有内置DDNS,可以用一台常开的电脑或树莓派跑脚本,定时检测公网IP变化并调用云服务商API更新解析记录,这里有个关键细节:动态解析更新需要TTL设短一些,比如60秒,这样IP一变,全球DNS缓存能快速过期。
第二步:在路由器上配置端口映射(端口转发)
域名解析只解决“找到你家的门牌号”,但流量到达路由器后,路由器不知道数据包该给谁,你需要手动指定转发规则。
登录路由器后台,找到“端口映射”或“NAT转发”或“虚拟服务器”菜单,
- 填写外部端口(比如80、443,或自定义端口如8080)
- 填写内网服务器IP(固定内网IP,比如192.168.1.100)
- 填写内网端口(服务器实际监听的端口,比如nginx监听80)
- 协议选TCP,保存并启用
这里建议给你的内网服务器设置静态IP或DHCP保留地址,否则服务器重启后IP变掉,转发规则就失效了。
第三步:开放服务器本机防火墙
路由器的端口映射只负责把请求送到内网服务器,但如果服务器自己的防火墙没放行,连接照样失败,以Windows服务器为例:
- 打开“防火墙高级设置”→入站规则→新建规则
- 选择“端口”→协议选TCP→指定本地端口填80和443
- 选允许连接,应用到所有配置文件,命名即可
Linux服务器用命令放行,比如Ubuntu的ufw:sudo ufw allow 80/tcp,sudo ufw allow 443/tcp。
第四步:域名解析记录指向你的公网IP
在DNS服务商后台,添加一条A记录,主机记录填www或@,记录值填你检测到的公网IP,等DDNS生效后,这条A记录的值会被自动更新,如果家里有IPv6地址,同样可以在DNS服务商配置AAAA记录,指向服务器的IPv6地址,IPv4地址枯竭的背景下,不少宽带用户已经拿到了原生IPv6,这种情况下不需要做任何端口映射,因为每个IPv6地址都是全局可路由的,直接由路由器的DHCPv6或SLAAC将地址分配给服务器,然后域名解析到该地址即可外网访问。
| 环节 | 核心作用 | 常见坑 |
|---|---|---|
| DDNS动态解析 | 自动把域名绑定到变化的公网IP | 路由器重启后更新不及时,设置TTL过长为60秒分钟 |
| 端口映射 | 把外部流量导流到内网特定设备 | 内网IP漂移导致规则失效,外网端口冲突被运营商屏蔽 |
| 防火墙放行 | 允许到达的流量进入服务器进程 | 只配了路由器忘了配本机,测试时却用了错误的协议类型 |
没公网IP时:内网穿透和端口映射的区别你要知道
没有公网IP的情况现在非常普遍,你租的房子拉了一条宽带,运营商根本不给公网IP,电话申请也以“资源不足”为由拒绝,这时候你的所有端口映射操作都是徒劳的因为流量根本无法从公网路由到你的路由器上,解决办法是使用内网穿透技术。
内网穿透和端口映射的区别
端口映射本质上是将路由器的公网IP上的端口,转发到内网设备的某个端口,前提是路由器有一个公网可达的IP地址,内网穿透则是你主动从内网发起一条到中继服务器的长连接,中继服务器把这个连接作为通道,外部用户的请求通过中继服务器转发到你的内网设备。
这个区别决定了你能做什么:有公网IP的话,直接做端口映射最简单,速度快、延迟低、没有流量费用;没有公网IP的话,只能用内网穿透,多一跳中转延迟略高,免费方案稳定性也一般。
用frp搭建内网穿透的实操路径
frp是目前使用最普遍的内网穿透工具之一,需要一台有公网IP的云服务器(作为服务端)和你的内网服务器(作为客户端),具体步骤:
- 在云服务器上下载frp服务端,解压后编辑frps.toml,配置bindPort为7000,设置token鉴权
- 运行
./frps -c frps.toml启动服务端,记得在云安全组放行7000和转发端口 - 在内网服务器下载相同版本的frp客户端,编辑frpc.toml,服务端地址填云服务器公网IP,然后配置一个反向代理:
- 类型选tcp,本地IP填127.0.0.1,本地端口填8080(你的网站端口)
- 远程端口填8080,这样访问云服务器IP:8080就能到内网网站了
- 把域名解析到云服务器的公网IP,用nginx做反向代理,将域名请求转发到云服务器的8080端口
这个方案本质上是通过云服务器做跳板,所以云服务器的带宽就决定了你的网站体验,租云服务器时,可以关注带宽费用,如果只是静态页面展示,按流量计费可能比固定带宽更划算。
免费穿透方案:使用ZeroTier或Tailscale实现异地组网
如果你不追求让公网所有人访问,只打算自己或小团队在外网访问内网的服务,还可以用ZeroTier这类异地组网工具,
原理是在你的内网服务器和手机、个人电脑之间组建一个虚拟局域网,域名解析直接用内网IP段的地址即可,不需要公网IP,也不需要端口映射,这种方式干扰最少,但只适合有客户端设备在手里的场景,做NAS远程访问(比如群晖、威联通)非常合适。
域名映射到内网服务器之后需要注意的安全事项
把家里的服务器暴露到公网是一件有风险的事,映射完成后先别急着收工,建议你按下面几个方向做一遍安全加固:
- 修改SSH和远程桌面默认端口,不建议直接映射22或3389端口到公网,这些端口被自动化扫描工具盯上的概率极高
- 配置访问白名单,在路由器或云防火墙层面只放行你常用IP段的访问,如果IP是变化的,至少开启登录失败锁定
- 内网服务器使用强密码,如果网站程序有登录后台,开启两步验证或MA
- 为你的网站配置HTTPS证书,Let’s Encrypt提供免费证书,用acme.sh或caddy可以自动续期
- 在路由器里关闭UPnP,避免内网设备自动添加端口映射规则
这几年物联网设备被攻击的事件很密集,其中一大部分就是因为用户把设备端口直接暴露在公网且保留了出厂默认口令,没有公网IP的情况下用内网穿透,同样需要验证穿透服务商的访问认证信息。
关于域名映射到内网服务器的常见问题
家用宽带80端口被封了,域名解析到内网服务器还能访问吗
能,运营商确实普遍封禁了80和443端口,但你可以用非标准端口做映射,比如8001、8080,访问时输入http://你的域名:8001,也可以使用云服务器上做反向代理,让云服务器监听443,再通过frp隧道把流量转到内网服务器,这样对外看起来用的是标准HTTPS端口。
DDNS解析生效要多久,IP变了网站打不开了怎么办
DDNS的更新周期由你设置的TTL决定,通常设置60秒的话,生效时间在1分钟以内,如果IP变了网站打不开,先登录DNS服务商后台看解析记录值是否等于你路由器当前的公网IP,如果路由器没自动更新,检查DDNS脚本或插件的日志,多数情况下是路由器DDNS服务商配置里的密钥过期了。
动态IPv6环境下,域名解析记录怎么保持最新
在ip -6 addr查看服务器当前IPv6地址,然后在DNS后台添加AAAA记录,如果IPv6前缀会发生改变(运营商偶尔会重新分配前缀),需要定期更新AAA记录,你可以用crontab定时任务配合脚本,检测IPv6变化自动更新DNS记录,也可以用Docker部署ddns-go这类工具,同时管理A记录和AAAA记录的自动更新。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/632974.html





