资讯动态

公网IP查询与端口映射:NAT、IPv6外网访问内网服务排障指南

发布时间:2026/10/29 11:45:52 来源:尧图企业网站定制
上周又被一个朋友拽住问家里那台常年开机的机器到底有没有公网IP他想在外面直接连回来结果折腾了两个晚上路由器上映射也做了防火墙也关了就是不通用。等我让他把路由器 WAN 口地址和网页上查到的那个地址发过来一看——两个数字根本不一样问题当场就清楚了他这条线路压根没有公网IP做端口映射自然是对着空气打拳。这种事我遇到太多次了。查公网IP看起来是最简单的一步实际上是整条链路排障的分水岭公网IP这个东西决定了你能不能用最朴素的方式把内网服务开放到外网访问。有就是路由器上敲几条端口映射规则的事没有就得换一整套思路走 IPv6 直连、走中转隧道、或者借一台有公网地址的机器做跳板。方向搞反了后面所有操作都是白费功夫。这篇东西我按自己平时带人排障的顺序写先把公网IP、内网IP、NAT 这几层关系掰清楚再给你几条能立刻上手的查询和判断方法然后分“有公网IP”和“没有公网IP”两条路把端口映射和几种通用的外网访问方案讲透。刚接触网络的新手能照着抄做过一些映射但老是被“时通时不通”折磨的人也能在排查那一段里找到答案。1. 先把概念掰开公网IP、内网IP、NAT到底什么关系1.1 一台设备身上其实挂着好几个地址很多人一上来就打开网页查 IP查到一串数字就以为那是“我的IP”这是最容易走偏的起点。一台设备在网络里从来不是一个地址而是一串地址每一层都有自己的身份。最里面一层是设备自己的地址也就是网卡上配的那个常见的是192.168.1.x、10.0.0.x、172.16.x.x这几个私网段它只在你家或公司这个局域网内有效出了这个范围没人认识。往上一层是网关地址也就是你连的路由器在局域网里的那个地址通常是192.168.1.1之类。再往外一层是路由器 WAN 口拿到的地址这个地址是运营商侧分配给你的。最外面一层才是“外界看到的你”也就是你访问外部服务时对方服务器记录下来的来源地址。关键在于最外层和第三层很多时候不是同一个东西。中间隔着的那个东西叫 NAT网络地址转换。它的作用相当于公司前台内部几十上百号人都有内部分机号但对外只有一个总机号码外面打进来只能打到总机再由前台转接。NAT 做的就是这件事——把内网一堆私网地址统一转换成出口的那一个地址。所以判断“我有没有公网IP”本质上是问这个总机号码是不是只属于我一个人外面能不能直接打到总机上并且被转接进来。只查网页上显示的地址等于只看到了总机号码看不到它背后是不是还套了一层。1.2 路由器 WAN 口地址不等于公网地址这是最核心的一个认知。我见过太多人打开路由器管理页面看到 WAN 口那一栏写着个 IP就认定自己是有公网IP的然后开始做端口映射做完发现不通开始怀疑路由器坏了、怀疑服务没起来、怀疑运营商封端口。实际情况是运营商侧的地址资源早就紧张了绝大多数家庭宽带和相当一部分企业宽带给你的是运营商内网里的一个地址。也就是说你路由器的 WAN 口地址本身就是个私网地址或者运营商级 NAT 专用段你在它上面做端口映射映射的是“运营商内网里的一个地址”公网上根本路由不到这里。要判断这件事必须做一次交叉比对把路由器 WAN 口显示的地址和从外部看到的你的出口地址放在一起看。两者一致且 WAN 口地址不是私网段那才有戏两者不一致说明你上面至少还压着一层 NAT映射做到路由器这一层就断了。注意有些光猫是桥接模式有些是路由模式。光猫自己拨号的情况下你家路由器 WAN 口拿到的是光猫下发的私网地址真正的出口地址在光猫上。这种“光猫拨号 路由器二次 NAT”的结构会让判断变得更绕一定要往上找到真正拨号的那台设备。1.3 三条硬标准快速判定有没有公网IP我把判断逻辑压缩成三条标准按顺序过一遍基本不会误判。判定项看什么结论第一标准路由器 WAN 口地址是否落在10.0.0.0/8、172.16.0.0/12、192.168.0.0/16落在里面一定不是公网地址第二标准WAN 口地址是否落在100.64.0.0/10100.64.x.x到100.127.x.x落在里面属于运营商级 NAT 专用段没有公网IPv4第三标准WAN 口地址与外部查到的地址是否完全相同相同才可能是真公网不同则上面还有一层第二标准很多人不知道。100.64.0.0/10这个段是专门留给运营商做大规模地址转换用的你看到100.64到100.127开头的 WAN 口地址基本可以立刻下结论这条线路没有独立公网IPv4端口映射这条路走不通别再浪费时间试了。第三条要额外说明一点WAN 口地址和外部地址一致只能说明“IPv4 出口是独立的”还不能百分百保证入站方向没被限制。少数线路会给独立地址但在入站方向做过滤这种情况相对少见一般表现为“外部 ping 不通、端口连不上”排查时留意一下就行。2. 查公网IP的几种实操方法从最快到最准2.1 最快的一步看外部回显的出口地址想立刻知道自己“对外长什么样”最简单的方式是找一个会回显来访地址的页面或接口。这类服务很多随便挑一个稳定的即可比如打开搜索引擎直接搜“IP”首页就会显示当前出口地址或者访问任意一个显示来访 IP 的站点。命令行方式更适合脚本化也方便你反复比对# 请求一个回显来访地址的接口把结果打印出来 curl -s http://回显接口地址 # 只看IPv4出口 curl -4 -s http://回显接口地址 # 只看IPv6出口 curl -6 -s http://回显接口地址Windows 下如果没有 curl可以用 PowerShell# Windows PowerShell 查看外部看到的出口地址 (Invoke-RestMethod -Uri http://回显接口地址).Trim()这里有个细节值得记住-4和-6两个参数分别强制走 IPv4 和 IPv6 出口。现在不少线路是双栈同一条宽带可能同时有两个出口地址一个 IPv4 一个 IPv6。你在浏览器里查到的是哪个取决于系统当时的优先级很容易看串。想搞清楚状况就分开查两次。2.2 第二步把本地地址和网关挖出来外部地址查完接下来要拿到内部的证据。这一步纯本地操作不依赖任何外部服务随时可做。Windows 上最直接的是ipconfig /all看默认网关和本机地址。要看路由走向用 PowerShell 更清楚# 查看所有网络接口的地址配置 Get-NetIPConfiguration # 查看默认路由确认出口网关 Get-NetRoute -DestinationPrefix 0.0.0.0/0Linux 上# 查看接口地址 ip addr show # 查看默认路由 ip route show defaultmacOS 上ifconfig netstat -rn | head -20这一步的目的不是看本机地址而是找到默认网关然后登录到那台设备上去看它的 WAN 口地址。家庭环境里网关一般就是路由器浏览器打开管理页面找“上网设置”“WAN 口状态”“网络状态”这类栏目里面会写着获取到的地址、子网掩码、网关和 DNS。2.3 第三步交叉比对做一次路径侦察拿到两个数字之后别急着下结论再做一次路径侦察看看数据包出门要经过几跳。Windows 上用tracertLinux 和 macOS 上用traceroute# Windows观察前几跳的地址特征 tracert -d -h 8 一个外部地址 # Linux / macOS traceroute -n -m 8 一个外部地址看前几跳。如果第一跳就是192.168.x.x你的路由器第二跳变成100.64.x.x或者10.x.x.x那基本可以确认链路上有多层 NAT 参与你的流量在被别人转换。正常有公网IPv4的线路前几跳之后应该很快出现公网段的地址。再补一个动作把 WAN 口地址和外部查到的地址并排写下来逐位比对。现场情况外部看到的地址WAN 口地址判断A113.x.x.x113.x.x.x一致可能是真公网继续验证入站B113.x.x.x192.168.1.2上面还压着一层光猫拨号去找光猫C113.x.x.x100.72.x.x运营商级 NAT没有公网IPv4D113.x.x.x10.20.x.x运营商内网没有公网IPv4情况 B 特别容易被误判成“有公网”因为外部地址看着是公网段。实际上你的路由器只是光猫的下级真正的拨号在光猫上。这种结构下端口映射要在光猫上做或者在光猫上把路由器设为 DMZ 主机把入站流量整体转给路由器再在路由器上做映射。两层都要配缺一层就不通。2.4 IPv6 是另一套判断逻辑别套用 IPv4 的经验IPv6 的情况和 IPv4 完全不同很多人在这里栽跟头。IPv6 地址空间足够大正常来说运营商会给你的设备分配全局地址地址长这样2408:或2409:开头的 128 位串。看到这种地址说明你的设备已经拿到了可以在公网上路由的地址理论上不需要任何映射就能被外部访问。但“有地址”和“能访问”是两件事。判断 IPv6 要过三道关设备是否有全局地址不是fe80:开头的链路本地地址也不是fd00:开头的唯一本地地址这条地址是否真的能出去用curl -6测试外部是否真的能打进来用手机蜂窝网络访问测试别用同一个局域网测那测的是内网回环没有意义。# 查看本机IPv6全局地址 ip -6 addr show scope global # 测试IPv6出站连通性 curl -6 -s -m 5 http://支持IPv6的回显接口地址我实际踩过的坑家里设备拿到了2408:开头的地址curl -6出站也通但从外面就是连不进来。查了半天是路由器防火墙默认拦截所有入站连接需要在防火墙里单独放行那条规则。IPv6 没有 NAT 这层“天然屏障”路由器厂商为了安全默认全挡这个默认值反而成了最常见的拦路虎。3. 结论落地四种典型网络形态和对应打法3.1 形态一真公网IPv4最省心的那一种WAN 口地址是公网段和外部查到的地址一致入站方向没有明显限制。这种形态下端口映射就是正解配完立刻能用延迟最低不依赖任何第三方服务。验证入站是否真的通别只看局域网。用手机切到蜂窝网络访问http://你的公网地址:映射端口能出内容就是通了。局域网内能访问不算数那走的是内网直连根本没经过映射。这种线路现在越来越少但一些老宽带、部分企业专线、以及主动申请过公网地址的账号还能拿到。如果你确实需要长期对外提供服务值得为这件事跟运营商沟通一次。3.2 形态二运营商级 NAT绝大多数家庭宽带的现状WAN 口落在100.64.0.0/10或者干脆是私网段。这类线路的特点是出站完全正常上网、看视频、下载都没问题因为 NAT 表会记录你的出站会话但入站方向没有任何入口外部主动发起的连接一律到不了你这里。在这种形态下端口映射在路由器上配得再对也没用。原因不复杂映射规则生效的前提是“外部流量能到达这台路由器”而流量在运营商那一层就被拦住了压根到不了你家路由器。3.3 形态三双栈但IPv6入站被挡最常见也最可惜设备拿到了 IPv6 全局地址出站正常但外部访问不通。这种形态其实离成功只差一步属于“配置问题”而非“资源问题”性价比最高。处理顺序是先确认路由器防火墙的入站规则有没有放行目标端口再确认目标设备自己的防火墙Windows 防火墙、Linux 的 iptables/nftables有没有放行最后确认服务本身监听的是不是::或0.0.0.0而不是只监听127.0.0.1。这三点挨个排查八成能解决。IPv6 的另一个麻烦是地址会变。运营商下发的前缀可能会周期性变化虽然不像 IPv4 动态地址变得那么勤但一旦变了你记的那个地址就失效了。解决办法和 IPv4 一样动态域名解析把域名绑到设备上让客户端定期上报当前地址。3.4 四种形态汇总对照形态WAN 口特征外部可达性推荐方案成本真公网IPv4公网段与外部一致可直接入站端口映射 动态域名低运营商级NAT100.64/10或私网段不可入站IPv6 优先否则中转隧道中双栈但入站被挡有 IPv6 全局地址配置后可入站放行防火墙 动态域名低多层NAT光猫路由器WAN 口是私网外部是公网需逐层打通光猫改桥接或设 DMZ中我把这张表打印出来贴在工位上过排障时先归类再动手能省掉大量“瞎试”的时间。4. 有公网IP时端口映射怎么做才不出错4.1 映射三要素少一个都不生效端口映射的规则本质上就三个参数加一个协议外部端口、内部地址、内部端口、协议类型。含义是“凡是打到本机 WAN 口某个端口上的流量转发到内网某台机器的某个端口”。举个具体的内网有一台机器地址是192.168.1.50上面跑了个 Web 服务监听 80 端口你想从外面用http://公网地址:8080访问。规则就是外部端口 8080内部地址192.168.1.50内部端口 80协议 TCP。几个容易配错的地方协议类型漏选。有些路由器默认只加 TCP如果你的服务是 UDP 的比如某些游戏服务、监控流必须单独再加一条 UDP 规则。外部端口和内部端口搞反。这两栏在很多路由器界面上挨得很近填反了就是“映射了个寂寞”。内部地址填成了设备名。有些路由器支持按设备名选但设备名背后是靠 DHCP 租约解析的租约一过期就失效老老实实填 IP。4.2 先把内网地址钉死别让服务半夜搬家这是我见过最高频的“昨天还好好的今天不通了”的原因。设备通过 DHCP 拿地址租约到期或者路由器重启地址从192.168.1.50变成192.168.1.63你的映射规则还指着.50自然断。解决办法两种选一种就行在路由器里做DHCP 静态分配按 MAC 地址绑定固定 IP或者直接在设备上配静态 IP注意静态 IP 要落在路由器 DHCP 池之外否则会冲突。注意静态 IP 一定要避开 DHCP 地址池。比如池子是192.168.1.100-192.168.1.199你就把设备固定在192.168.1.50这种池外地址不然某天分配器把这个地址发给别的设备就是地址冲突两边都上不了网。4.3 别把端口一股脑全开出去映射做完能用很多人就到此为止了。但把内网服务暴露到公网等于把门开在大街上扫描器几分钟就能找到你。几条我一直在用的底线管理类端口远程桌面、SSH、路由器管理页不要直接映射到公网改成通过其他方式访问确实需要暴露的服务改掉默认端口只能减少噪音扫描不是安全措施真正的防线是强密码加多因素认证能用白名单限制来源地址的就限制只放行自己常用的出口段服务本身及时更新暴露在公网的老版本组件是最常见的入口。还有一个容易被忽略的点只映射真正需要的端口不要图省事把 DMZ 主机一开。DMZ 会把所有未映射端口全转给一台设备等于把这台设备完全暴露风险极高。4.4 动态公网地址的应对动态域名解析家用宽带的公网地址通常是动态的重启光猫或者运营商侧调整地址就变了。靠记 IP 显然不现实标准解法是动态域名解析DDNS把域名指向你的地址再让一个客户端定期检测地址变化并上报更新。配置逻辑分两步。第一步在域名服务侧创建一条 A 记录IPv4或 AAAA 记录IPv6TTL 设短一点比如 60 到 300 秒方便变更后快速生效。第二步在路由器或内网某台常开设备上跑更新客户端把当前地址推上去。TTL 这个参数值得说一下设太长比如 3600 秒地址变了之后外部还要缓存一小时才更新你会以为是映射坏了设太短会增加解析请求量但家用场景完全无所谓。我的习惯是 120 秒平衡得比较好。5. 没有公网IP时几条通用的外网访问思路5.1 方案A优先试IPv6成本最低如果线路是双栈设备能拿到 IPv6 全局地址那这是最优先考虑的方案不花钱、不依赖第三方、延迟也低。需要做的只有三件事放行路由器防火墙入站规则、放行设备自身防火墙、配一条 AAAA 记录做动态解析。访问的时候用域名而不是地址因为 IPv6 地址太长且会变。客户端和服务端都支持 IPv6 的前提下这条路走起来非常顺。唯一的限制是访问端也得有 IPv6——现在主流移动网络基本都有但部分公司网络、部分公共 WiFi 还是纯 IPv4这种情况下会连不上需要有兜底方案。5.2 方案B由内向外建隧道绕开入站限制没有公网IP的核心矛盾是“外部无法主动连进来”。那就反过来想让内网设备主动连出去在外部留一条已建立的连接通道外部访问走这条通道进来。这就是各类中转隧道方案的基本原理方向反了问题就解了。通用做法是找一台有公网地址的服务器做中转节点内网设备启动一个客户端主动连上去建立一条长连接隧道外部访问时先连到中转节点由它把流量顺着隧道送进来。用 SSH 自带的反向转发就能做个最小验证不需要装任何额外软件# 在中转机上允许转发服务端配置 # /etc/ssh/sshd_config 中开启 GatewayPorts yes # 内网设备执行把中转机的 8080 端口转回本地 80 端口 ssh -N -R 0.0.0.0:8080:127.0.0.1:80 用户名中转机地址这条命令的意思是在内网设备上发起一个到中转机的 SSH 连接并在中转机上监听 8080所有打到中转机 8080 的流量顺着这条连接回到内网设备的 80 端口。验证一下http://中转机地址:8080能不能出内容就能确认隧道通了。-N表示不执行远程命令只做转发0.0.0.0表示监听所有网卡这个受服务端GatewayPorts配置约束不设的话只监听回环地址外部访问不到。实际长期使用要加两个东西-o ServerAliveInterval30做保活避免连接被中间设备按空闲超时切断以及用autossh或系统服务的方式托管断线自动重连。裸ssh命令放在前台终端一关就断了只能当验证用。5.3 方案C中转节点 常驻客户端适合长期跑方案 B 的思路扩展到生产环境就是找一台有公网地址的服务器跑一个专门的中转服务端内网跑客户端把本地端口映射上去。相比裸 SSH这类方案的优势是支持多端口、支持多协议、断线重连更可靠、还能做访问控制。部署时的经验点中转机上的端口要单独规划别和已有服务冲突。建议用高位端口比如 20000 以上减少和常见服务的碰撞。隧道两端都要开防火墙放行对应端口。中转机上经常只放行了 80/443自定义端口忘了开白白排查半天。客户端配置成开机自启的常驻服务别用前台进程。断电重启后能自己恢复才算真正能用。有条件的话加一层鉴权别让任何人知道地址就能随便连。5.4 四种方案横向对照方案依赖条件访问端要求延迟适用场景端口映射有公网IPv4无最低老宽带、专线、自建服务IPv6 直连双栈线路访问端有 IPv6低手机访问家庭服务反向隧道一台中转机无中无公网IP的长期方案中转节点客户端一台中转机无中多端口、多协议场景选型的核心判断顺序我总结成一句能走 IPv6 就走 IPv6走不通看有没有公网IPv4都没有就上中转隧道。别一上来就上隧道多绕的每一跳都是延迟和故障点。6. 常见问题与排查实录6.1 映射配好了却不生效按这个顺序查排障最怕没有顺序东一榔头西一棒子。我固定按这个链条从内到外查基本十分钟内能定位第一步确认服务本身活着并且监听地址正确。这是最容易被跳过但也最常见的一步。# Linux 查看端口监听情况 ss -lntp | grep 8080 # Windows 查看端口占用 netstat -ano | findstr :8080看到127.0.0.1:8080就要警觉了——这说明服务只监听回环地址只有本机能访问局域网内其他设备连都连不上更别说外网。改成0.0.0.0或::才对。第二步局域网内另一台设备访问测试。用手机连同一个 WiFi访问http://192.168.1.50:80。这一步不通问题在内网跟公网和映射完全无关先解决服务监听和本机防火墙。第三步确认映射规则生效。很多路由器改完规则要保存并重启服务才生效界面上看着改了实际没落地。改完点一次“保存”或“应用”必要时重启一下路由器验证。第四步外网访问验证。手机切蜂窝网络访问公网地址。这一步不通回头查第一章那三条标准确认到底有没有公网IP。第五步比对结论。全链路每一段都验证过问题一定在某一段的边界上这就是定位思路。6.2 高频问题速查表现象最可能的原因处理方式局域网能访问外网不行无公网IP / 映射未生效比对 WAN 口地址检查规则外网连不上但 ping 得通服务只监听回环 / 本机防火墙改监听地址放行端口昨天能用今天不通内网地址被 DHCP 换了做静态绑定换了网络就失效公网地址变化配动态域名解析手机能连公司网不能对方网络限制出站端口换 443/80 等常用端口测试连上了但速度很慢中转节点带宽或线路绕路换更近的中转节点隔几分钟断一次连接空闲被中间设备切断加保活心跳IPv6 出站通、入站不通路由器防火墙拦入站放行对应端口规则6.3 几个我用血换来的坑改端口不等于加安全。有人把 3389 改成 53389 就觉得安全了其实扫描器是全端口扫的改端口只减少日志噪音。真正的做法是不直接暴露这类管理端口。运营商封 80/443 入站很常见。家用宽带的 80 和 443 端口有些线路在入站方向是封的你映射做了、服务也起了就是不通。用高位端口测试一下比如 8443通了就说明是端口被封。这个坑我踩过整整一晚上。光猫和路由器的映射要配两层。光猫拨号 路由器二次 NAT 的结构只在路由器上做映射是无效的。要么在光猫上把路由器设成 DMZ要么把光猫改成桥接让路由器拨号少一层 NAT 少一堆麻烦。IPv6 测试别在同一局域网内做。局域网内访问 IPv6 地址走的是本地链路根本不经过公网测出来通没有任何意义。必须用蜂窝网络测。隧道方案要考虑访问端。IPv6 方案很优雅但如果你常用的那台设备所在网络没有 IPv6那就是不可用。选方案前先确认使用场景别配置完了才发现打不开。提示排障时养成记录的习惯。把 WAN 口地址、外部地址、映射规则、测试结果写在一张纸上比对的时候一目了然。凭记忆排查十有八九会在同一个地方绕圈。7. 长期可用性把一次性配置变成能维护的东西7.1 三个必须监控的点配置一次能用不算完真正麻烦的是“用了三个月突然不通”。我一般会盯三个点。地址变化。动态域名解析的更新客户端有没有在跑最近一次上报是什么时候。很多解析服务提供查询接口写个定时任务每天检查一次地址不对就告警。隧道连接状态。走中转隧道的话客户端进程是不是活着、最近有没有重连记录。断线重连日志如果每天几十条说明链路质量有问题得换节点。端口可达性。从外部定期探一次目标端口不通就通知。这个探测点必须放在外部网络放在内网测毫无意义。7.2 关于IPv6的一点个人判断这两年我给朋友配环境只要线路支持双栈我都优先把 IPv6 这条路打通。原因不复杂不花钱、不依赖第三方、没有额外的一跳延迟而且地址资源不存在紧张问题。唯一要处理的就是防火墙放行和地址变化的追踪两件事都是一次配置长期有效。当然 IPv4 该保留还是保留做兜底。我的做法是两条路都配好日常优先用 IPv6 域名连不上时切 IPv4 加隧道的方案。多花半小时配置换来的是以后不用再对着“连接超时”发呆。最后分享一个排查小习惯遇到“外网访问不了”的报障我第一句话永远不是“你映射配了吗”而是“把路由器 WAN 口地址和网页上查到的地址发我看看”。这两个数字一对方向立刻就定了剩下的都是执行层面的活。

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑