外网域名和内网服务之间到底缺了什么
外网域名映射到内网域名,核心思路就是让公网用户通过一个可解析的域名,绕过NAT和防火墙的阻挡,最终访问到你内网服务器上的服务。 这个过程中真正缺的不是域名,而是公网到内网的那条“路”,你家宽带或者公司出口,绝大多数情况下只有一个公网IP,甚至没有独立公网IP,内网服务器用的是192.168.x.x这类私有地址,公网设备根本不知道这个地址在哪,所以映射要做的,就是把“域名→公网IP→内网IP”这三层关系打通。
先确认你手里有没有“公网IP”这张牌
动手之前,先搞清楚自己的网络条件,这会直接决定你走哪条路,打开路由器后台,找到WAN口状态,如果显示的IP地址和你在百度搜索“IP”得到的地址一致,说明你有公网IP,如果不一致,或者路由器WAN口拿到的是100.64.x.x、10.x.x.x这类地址,那大概率运营商给你的是内网IP(CGNAT环境),行业共识认为,国内大部分家庭宽带和部分企业宽带,默认给的都是内网IP,需要打电话找运营商申请公网IP,通常能免费开通。
有公网IP:用端口映射+DDNS,性价比最高的方案
如果你有公网IP,恭喜你,这是最干净、最稳定的路子,不依赖任何第三方服务,整个过程分两步:第一步做端口映射(DNAT),把路由器的某个公网端口转发给内网服务器的IP和端口,第二步做DDNS(动态域名解析),把你申请的公网IP自动绑定到一个域名上。
路由器端口映射的详细配置步骤
以最常见的TP-Link、华为、小米路由器为例,管理后台里通常叫“端口映射”或“虚拟服务器”,具体操作如下:
- 登录路由器后台,找到“转发规则”或“高级设置”里的“端口映射”菜单。
- 添加一条规则:外部端口填你想要公网访问的端口(比如80或443),内部IP填你内网服务器的固定IP(比如192.168.1.88),内部端口填服务实际监听的端口(比如80)。
- 协议选择TCP,如果跑的是视频或游戏,可能还需要UDP。
- 保存后,建议先用“公网IP:端口”的方式从外网访问测试,确认端口通了再做域名绑定。
给内网服务器设置固定IP,别让IP乱跳
这一步很多人忽略,但特别关键,如果内网服务器用的是DHCP自动获取IP,一旦路由器重启或者租约到期,IP变了,你的端口映射规则就全废了,建议进入路由器后台的“DHCP服务器”设置,把服务器网卡的MAC地址和IP做一个静态绑定,具体步骤:找到“静态地址分配”,添加一条记录,填上MAC地址和你想固定的IP,绑定完成后,重启服务器网卡验证IP是否生效。
DDNS配置:把变化的IP固定到域名上
国内家用宽带就算有公网IP,也基本都是动态的,每隔一段时间就会变,DDNS的作用就是自动检测IP变化并更新域名解析记录,主流做法有两种:
- 路由器自带DDNS功能:在路由器后台找到“DDNS”或“动态DNS”菜单,选择服务商(花生壳、公云、简米云等),填入你的域名和账号密码,路由器会定期把WAN口IP推送给服务商,自动完成解析更新。
- 内网服务器装DDNS客户端:如果路由器不支持DDNS,可以在内网一台常开的机器上装DDNS客户端,以Linux为例,用crontab定时任务配合curl命令调用云服务商的API更新解析记录,实现同样的效果。
没有公网IP:内网穿透和反向代理该怎么选
这是大多数人的真实处境,没有公网IP,端口映射这条路直接堵死了,这时候需要借助一台有公网IP的云服务器做中转,把公网流量通过隧道转发到内网,这个场景下,内网穿透和端口映射的区别在于:端口映射是直接在路由器上把公网端口“推”给内网,而内网穿透是内网主动向外“拉”一条隧道,穿透力更强,不依赖公网IP。
用frp做内网穿透,一套完整的实操教程
frp是目前开源社区里用得最多的内网穿透工具,GitHub上star数很高,支持TCP、UDP、HTTP、HTTPS多种协议,配置分为服务端(云服务器)和客户端(内网机器)两部分。
服务端配置步骤(假设你的云服务器是CentOS或Ubuntu):
- 下载frp最新版压缩包,解压后只需要保留frps和frps.toml两个文件。
- 编辑frps.toml,基础配置里写
bindPort = 7000,这是服务端和客户端通信的端口,如果要做域名访问,再开启vhostHTTPPort = 8080,用于接收HTTP流量。 - 启动服务端:
./frps -c frps.toml,确认7000和8080端口在云服务器安全组里已经放行。
客户端配置步骤(假设你的内网跑着一个Nginx,监听80端口):
- 编辑frpc.toml,服务端地址填云服务器的公网IP,
serverPort = 7000。 - 定义一个HTTP代理:
name = "web",type = "http",localPort = 80,customDomains = ["你的域名"],这里的意思是,当用户访问你的域名时,frp服务端会把流量通过隧道转发给内网机器的80端口。 - 启动客户端:
./frpc -c frpc.toml,看到“start proxy success”就代表隧道通了。
最后一步,把域名的解析记录指向云服务器的公网IP,类型选A记录,这样用户访问域名时,流量会先到云服务器,再通过frp隧道进入内网。
使用Nginx反向代理做中转,适合已有云服务器的场景
如果你不想用frp这类工具,而是想直接利用云服务器的Nginx做反向代理,也可以实现同样的效果,前提是内网机器需要主动建立一条隧道,通常和frp配合使用,或者用SSH隧道,单独用Nginx只能反向代理云服务器本身能访问到的服务,没法穿透到你家里那台没公网IP的机器,所以常见做法是:用frp把内网机器的端口暴露到云服务器的某个本地端口(比如127.0.0.1:8080),再用Nginx把域名转发到这个本地端口。
具体配置片段如下:
- 在frpc.toml里改用TCP类型,
localPort = 80,remotePort = 8080,这样云服务器的8080端口就对应内网的80端口。 - 在云服务器Nginx配置里加一个server块,
server_name填你的域名,location /里写proxy_pass http://127.0.0.1:8080;,再配上proxy_set_header Host $host;和proxy_set_header X-Real-IP $remote_addr;确保内网应用能拿到真实客户端IP和正确的Host头。 - reload Nginx,访问域名即可。
买不到公网IP,还有哪些免费和付费的穿透服务
除了自己搭frp,也有现成的服务商提供内网穿透,比如花生壳、网云穿、Tailscale等,免费版通常有限速、限制流量、强制加端口号访问等条件,如果你只是测试用,免费版够用了,如果跑正式业务,建议直接买付费版。内网穿透服务的价格差异很大,便宜的几十块钱一年,企业级的按带宽和并发数计费,一年几百到几千不等,算一笔账:一台最便宜的云服务器一年也要两三百块,加上带宽费用,如果只是临时用一下,现成服务商反而更划算。
外网域名映射到内网域名时,这些细节决定成败
映射通了只是第一步,能不能稳定、安全地跑起来,才是真正考验人的地方。
80端口被封怎么办
国内云服务器默认都不开放80和443端口,需要去备案才能用,如果你没有备案,或者不想备案,可以用非标准端口访问,比如http://域名:8080,但这样用户体验很差,用户记不住端口号,行业内的通行做法是:用443端口+域名备案走正规路线,或者用frp的vhostHTTPPort配合一个非80端口,牺牲一点体验换取便利,如果你有备案,记得在云服务商控制台的安全组里放行80和443端口。
防火墙和访问控制的硬性要求
映射到内网之后,你的服务相当于直接暴露在公网上了,扫描和攻击几乎是必然的,内网服务器的防火墙一定要做好限制,Linux服务器上用ufw或firewalld只放行必要的端口,其他全部拒绝,给内网服务加上身份验证,比如Nginx的Basic Auth,或者应用本身的登录鉴权,如果服务本身没有认证能力,强烈建议在前面套一层Nginx,用
auth_basic指令加上密码保护,避免裸奔。
HTTPS证书怎么配置
现在浏览器对HTTP的警告越来越强,2026年的环境下,HTTPS已经是标配,有公网IP且域名备案的情况下,直接用certbot申请Let’s Encrypt证书,配合Nginx自动续期,用frp穿透的情况下,证书可以放在云服务器的Nginx层,内网服务继续用HTTP跑,SSL终结在云端,具体做法:在Nginx里配置证书,把proxy_pass指向frp暴露的本地端口,这样内网服务不需要处理证书,减少配置复杂度。
排查问题时的三板斧
- 从外网ping域名,确认解析正确,IP指向云服务器或你的公网IP。
- 用
telnet 域名 端口测试端口通不通,不通就检查云服务器安全组、路由器端口映射、frp状态这三层。 - 看日志,frp客户端和服务端都有详细的日志输出,Nginx的
error.log也能帮你定位是代理配置问题还是上游服务问题。
常见问题解答
外网域名映射到内网域名需要多长时间能搞定
如果所有条件都具备,比如有公网IP、路由器支持DDNS、域名已经备案,最快十几分钟就能搞定,如果走内网穿透,下载frp、改配置、启动服务,半小时以内也能完成,主要时间花在等运营商开通公网IP和域名备案上,这两个环节可能需要几个工作日。
内网穿透和端口映射有什么区别,哪个更稳定
端口映射是直接由路由器转发流量,链路短,延迟低,稳定性取决于你的宽带质量,内网穿透多走一层云服务器中转,链路长一点,但胜在不依赖公网IP,适用面更广,对于要求高稳定性的业务,有公网IP的前提下优先选择端口映射;没有公网IP,内网穿透是唯一出路,选一家靠谱的云服务商也能做到非常稳定。
域名解析到内网服务器,解析记录应该填什么
如果走端口映射方案,填你路由器的公网IP,如果走内网穿透方案,填云服务器的公网IP,不要把内网IP直接填到解析记录里,公网DNS解析不了私有地址,如果IP是动态的,要配合DDNS使用,否则IP一变解析就失效。
域名映射这件事,说到底就是根据你的网络条件,选对一条路,有公网IP走端口映射,没有公网IP走内网穿透,两者都能让外网用户通过域名顺畅地访问到内网服务,关键在于把每一步的配置做扎实,尤其是固定IP、防火墙和HTTPS这三个环节,做完了就能长期稳定地跑下去。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/617399.html





