
1. 先把概念捋直内网IP、公网IP到底谁是谁“IP地址在哪里查看、怎样查询自己电脑IP、怎么判断有没有公网IP、内网IP又怎么让外网访问”这四件事看着像四个独立问题实际上是一条线上的四个环节查地址、认地址、验地址、用地址。我这些年帮人处理远程访问、设备联调、家庭服务器发布十次里有八次卡住不是技术难而是从第一步就把地址认错了把内网地址当成公网地址在用后面所有配置都是白费功夫。这一节先把概念钉死不然后面所有操作都没有判断依据。IP地址本质上是网络里的门牌号但门牌号分“楼内房号”和“小区大门牌”两种。路由器给你电脑发的那个192.168.x.x是楼内房号出了这栋楼没人认识而互联网上真正能被人从外部找到的地址才是小区大门牌。绝大多数家庭宽带手里的都是房号不是门牌。这里最容易混淆的是三组地址我把它们摊开讲私有地址、公网地址、特殊保留地址。私有地址就是内网IP可以在自己家里随便用但不会被互联网路由任何人从外部都无法直接访问到它公网地址是全球唯一的理论上任何联网设备都能直接连过来特殊保留地址包括回环地址127.0.0.1和链路本地地址169.254.x.x前者代表“本机自己”后者代表“没拿到地址时的自分配地址”看到这两个基本说明你查错了对象。私有地址的范围是固定的三段记不住也没关系看开头两位数字就够判断地址段范围常见出现位置容量10.0.0.0/810.0.0.0 - 10.255.255.255公司内网、云主机内网约1677万个172.16.0.0/12172.16.0.0 - 172.31.255.255部分路由器默认段、容器网络约104万个192.168.0.0/16192.168.0.0 - 192.168.255.255家用路由器最常见约6.5万个100.64.0.0/10100.64.0.0 - 100.127.255.255共享地址转换场景约419万个第四行那个100.64.x.x段要单独说它是最容易被误判成公网地址的一段。这个段是给“多个用户共享一个公网出口”的场景预留的很多宽带服务商在IPv4地址不够分的时候会给你分一个这个段的地址。它看起来不像192.168那么“家味儿”很多人一看不是192开头就以为自己是公网IP结果配了半天映射怎么都不通。判断口诀只要开头落在上面这四行里就是内网地址没有例外。至于为什么你在电脑上查到的地址和在网上查到的地址不一样原因就是中间的地址转换。路由器拿一个公网地址对外对内给每台设备发私有地址设备发出的每个数据包经过路由器时源地址会被替换成路由器的公网地址回包再按端口号映射回具体设备。这个过程叫 NAT它解决了地址不够用的问题代价就是外网无法主动找到你内部的设备——这也正是“内网IP怎么给外网访问”这个问题的根源所在。注意不要用“能不能上网”来判断有没有公网IP。内网地址一样能正常上网、看视频、打游戏只是不能被外部主动连接。这两个能力是分开的。理解到这一层后面查地址的时候你心里就有数了查到的每一个地址先问自己它在哪个段再问它在哪台设备上答案基本就出来了。2. 各系统查本机IP的实操路径查本机IP这件事不同系统的入口完全不一样但原则只有一条优先用命令行图形界面的信息经常被裁剪看不到网关、掩码、DNS这些关键项。下面按系统分别说每种给两到三种路径挑顺手的用。2.1 Windows 下四种查法与各自适用场景最通用的肯定是命令行。按下Win R输入cmd回车然后敲ipconfig输出里会列出所有网络适配器重点看“无线局域网适配器 WLAN”或“以太网适配器”下面的 IPv4 地址那个就是你的内网IP。如果你还接了虚拟机、装了虚拟网卡输出里会有一堆VMnet、vEthernet之类的条目别被带偏认准名字里带 WLAN 或以太网的那一段。想要更完整的信息加/allipconfig /all这个会多出物理地址、DHCP 是否启用、租约获取时间、默认网关、DNS 服务器。默认网关那一行极其重要它通常就是路由器的内网地址后面要进路由器后台配置端口映射靠的就是这个地址。很多人不知道路由器管理页地址是多少其实网关地址加个http://直接浏览器打开就行。第二个路径是设置界面设置 网络和 Internet WLAN或以太网 点击当前连接的网络下面会显示 IPv4 地址、DNS、网关等。这个路径的好处是直观适合完全不想碰命令行的朋友缺点是有时候信息刷新不及时切换网络后需要退出重进一次。第三个路径是任务栏。点右下角网络图标选中当前连接部分系统版本会直接显示 IP。这个最快但信息最少。第四个是 PowerShell适合需要批量处理或写脚本的场景Get-NetIPAddress -AddressFamily IPv4 | Format-Table InterfaceAlias, IPAddress, PrefixLength输出比ipconfig干净只有适配器名、地址、掩码长度三列一眼扫完。我平时做批量设备排查时更爱用这个因为它的输出可以直接管道给其他命令做过滤。2.2 macOS 与 Linux 的查法macOS 图形界面路径是系统设置 网络 选中当前连接 详细信息IP 地址在“TCP/IP”标签页里。快捷方式是按住Option键再点菜单栏的 Wi-Fi 图标会直接展开当前网络的 IP、路由器地址、信号强度等一堆信息这个技巧知道的人不多但非常好用。命令行的话ifconfig | grep inet 会列出所有 IPv4 地址127.0.0.1忽略剩下那个就是。或者用networksetup -getinfo Wi-Fi输出更结构化直接给出 IP、子网掩码、路由器三项。Linux 这边命令更多按新旧分ip -4 addr show hostname -I nmcli device showip addr是现代发行版的标准命令ifconfig在不少新系统里默认已经不带需要额外装包。hostname -I最快一行输出所有地址适合放进脚本。nmcli是 NetworkManager 的客户端输出信息最全连 DHCP 租期和 DNS 都有。提示在 Linux 上如果你的机器有多个网卡比如一台既接内网又接外网网关的服务器hostname -I会输出多个地址顺序不保证。要确认哪个是主用地址用ip route看 default 那行对应的出口网卡。2.3 移动端怎么查iOS设置 无线局域网 点当前网络右侧的 i 图标IP 地址在“IP 地址”栏同时能看到路由器地址和子网掩码。安卓设置 WLAN 点当前连接不同厂商定制系统位置略有差异通常在“网络详情”或“IP 设置”里。部分系统默认显示的是“IP 设置DHCP”需要展开才能看到实际地址。手机查地址有个常见误区很多人看到手机上是192.168.43.x就以为自己家网段是43其实那是手机开热点时自己当网关的固定段和家里路由器网段完全是两回事。判断依据还是网关地址网关是多少网段就是多少。2.4 一眼分辨查出来的是内网还是公网拿到地址之后判断只需要三步我把它整理成一张对照表遇到任何地址对着扫一遍就行地址特征判定处理方式10.x.x.x私有地址内网需映射或转发才能外部访问172.16.x.x - 172.31.x.x私有地址同上192.168.x.x私有地址同上家用最常见100.64.x.x - 100.127.x.x共享地址大概率无公网IPv4走隧道或IPv6127.x.x.x回环地址代表本机自己不是网络地址169.254.x.x链路本地没拿到DHCP地址检查网线或路由其它如 203.0.113.x公网地址理论上可被外部访问需确认中间有无NAT举个具体例子查出来是192.168.1.23网关是192.168.1.1那这台机器在内网第二十三号位查出来是100.66.12.87那基本可以判定处在共享地址转换后面公网IPv4这条路的希望很渺茫查出来是203.0.113.45且网关也是同段公网地址那这台机器是直接挂在公网上的防火墙就是唯一屏障这时候反而要小心。注意203.0.113.x、198.51.100.x、192.0.2.x这三段是文档专用保留段我在文章里用来举例你自己网络里不会出现。看到别人文章里用这几个段举例不要以为是真实地址。到这里查地址这一环就算彻底通了。剩下两件事验证你手上这个地址到底能不能被外部访问以及如果不能怎么绕过去。3. 判断自家宽带有没有公网IP的四个递进验证法“我到底有没有公网IP”是整个流程里最关键的一个岔路口判断错了后面全白干。有公网IPv4路由器端口映射十分钟搞定没有就得换IPv6或者中继转发。这一节给四个层层递进的验证方法前一个不确定就往后走一个四个都做完结论就非常扎实了。3.1 对比法本机出口地址 versus 路由器WAN口地址这是最快的一步不需要任何工具。做法是先用第2节的方法拿到本机内网地址再用浏览器搜索“我的IP”或者打开任意一个查询访问者地址的页面记下页面上显示的那个地址——这是你整个网络对外的出口地址。然后登录路由器管理后台找到“外网设置”“WAN口状态”“上网状态”之类的页面看 WAN 口拿到的地址。把这两个地址放在一起比两者一致说明路由器直接持有公网地址出口没有被上层再做一次转换大概率有公网IPv4。两者不一致说明路由器 WAN 口拿到的还是私有地址或共享地址上面还有一层设备在做转换公网IPv4基本没戏。这个对比法的原理很直白如果路由器拿的就是公网地址那它对外呈现的地址和它自己持有的地址应该是同一个如果中间还夹了一层那对外看到的是最外层那个地址路由器自己手里的只是内层房号。我见过最常见的误判就是只看浏览器显示的公网地址一看“哎不是192开头我有公网IP”然后兴冲冲去配映射配完发现从外面根本连不上。浏览器显示的那个地址永远是最外层出口的地址它不能证明你有公网IP只能证明你的网络能出去。3.2 查WAN口地址落在哪个段拿到 WAN 口地址之后直接套用第2节那张判断表如果 WAN 口是192.168.x.x或10.x.x.x说明路由器上面还有一层设备在做转换典型场景是“光猫拨号 路由器二次拨号”或者“光猫拨号 路由器当二级路由”。这种情况下你需要在光猫那一层做映射或者把光猫改成桥接、让路由器拨号才能拿到真正的公网地址。如果 WAN 口是100.64.x.x到100.127.x.x这个段那就是共享地址转换说明宽带服务商给你分的是共享地址不是独占公网地址。这个段的特点是多个用户共用外层地址靠端口号区分你自己做映射没有意义因为外层那一层不归你管。如果 WAN 口是真正的公网地址比如203.0.113.x那恭喜这条路走得通直接跳到第4节看端口映射。3.3 路径追踪看路上有几层转换前两步是静态看地址这一步是动态看路径。Windows 上tracert -d 203.0.113.1macOS 和 Linuxtraceroute -n 203.0.113.1-d或-n的作用是不做域名反解输出更快更干净。看输出前几跳的地址第一跳通常是你的网关192.168.1.1或类似正常。第二跳如果还是私有地址或共享地址段说明光猫或上层设备又做了一次转换这就是“双重NAT”。第二跳直接是公网地址说明路径上只有一层转换比较健康。双重NAT是端口映射失败的头号原因没有之一。数据包要穿过两层转换你只在第二层配了映射第一层没配外部请求到第一层就被丢了。这种情况要么在第一层也加一条映射要么直接把第一层设备改成桥接模式让第二层设备直接拨号从根上消除一层。提示有些网络环境会屏蔽 ICMPtracert输出全是星号。这时候可以试试用ping配合 TTL 递增的方式绕一下或者直接看路由器后台的 WAN 连接类型是 PPPoE 还是 DHCPPPPoE 拨号的那一层通常就是最外层。3.4 反向验证从外部主动连进来前面三步都是“看”这一步是“试”也是唯一能给出确定结论的方法。做法分两种情况第一种如果你已经有了一台在外网的机器比如云上的主机从那台机器上直接对你家的公网地址发起连接测试。Linux 下用nc -vz 你的地址 端口或者curl -v telnet://地址:端口Windows 下用Test-NetConnection -ComputerName 地址 -Port 端口。能连上说明端口是通的连不上说明要么地址不是公网要么映射没生效要么防火墙拦了。第二种如果没有外网机器用手机流量。把手机 Wi-Fi 关掉只用移动数据然后访问你家服务的地址。这是最贴近真实场景的验证——手机走的是完全不同的网络路径能连上就说明外部真的可达。这里有个细节容易被忽略不要在同一网络内测试自己的公网地址。很多路由器不支持 NAT 回流也就是内网设备访问自己的公网地址你在家里用电脑访问自己的公网IP很可能失败但外部其实是通的。这个现象迷惑性极强我见过不少人因此误判自己没公网IP白白折腾了好几天。测试一定要用外部网络手机流量是最方便的选择。3.5 四种验证结果对照把上面四步的结论汇总一下对应关系大致是这样验证组合判定结论推荐路线WAN口公网 路径一跳 外部可连有独立公网IPv4端口映射最省事WAN口公网 外部不可连有公网但映射/防火墙有问题查映射规则和本机防火墙WAN口私有 路径两跳双重NAT光猫改桥接或在光猫加映射WAN口共享段(100.64/10)共享地址转换无公网IPv4IPv6 优先其次中继转发全部失败但IPv6可用无公网IPv4但有公网IPv6走IPv6直连见4.2这张表我建议直接截图存手机里下次帮朋友排查的时候照着走比凭记忆靠谱得多。判断清楚之后再动手能省掉大量无效尝试。需要强调的是现在很多家庭宽带默认不下发公网IPv4这是普遍现象不是你的问题也不用去纠结。真正值得关注的是 IPv6 这条被严重低估的路下一节详细说。4. 内网服务给外网访问的四条路线确认了手上有什么牌接下来就是怎么打。让内网服务被外网访问本质上是解决“外部请求怎么找到你内部某台设备的某个端口”这个问题。四条主流路线按实现成本和适用范围从低到高排我把每条的原理、适用条件和坑都讲透。4.1 路线一路由器端口映射有公网IPv4时的首选端口映射的原理是把“公网地址的某个端口”和“内网某台设备的某个端口”绑定起来。外部请求打到公网地址的这个端口路由器查表之后原样转给内网设备。这是最直接、延迟最低的方案中间不经过任何第三方服务器。配置入口在路由器的“端口转发”“虚拟服务器”“NAT映射”这类菜单里不同厂商叫法不一样但功能相同。需要填的通常是四项外部端口外网访问时用的端口建议选 20000 以上的高位端口内部地址目标设备的内网IP必须固定内部端口服务实际监听的端口协议TCP 还是 UDP或者两者都选这里有个参数选择需要解释一下。很多人图省事外部端口和内部端口填成一样比如服务跑在 8080外部也映射 8080。这样能用但没必要。外部端口和内部端口完全可以不一样比如外部用 38080内部还是 8080路由器负责转。这样做的好处是外部端口更难被扫到安全性稍好一些同时也避开了某些宽带服务商对常见端口80、443、8080的封锁。端口号的取值范围是 0 到 65535其中 0 到 1023 是系统保留端口需要特权才能监听配置映射时不要往这个区间选。1024 到 49151 是注册端口很多常见服务占用扫描器也重点扫这一段。49152 以上是动态端口相对冷门我一般推荐在 20000 到 60000 之间随手挑一个不冲突的既避开常见端口又不至于太怪。注意部分宽带服务商在接入层就封了 80 和 443 的入站你映射了也不通还以为是配置错了。遇到映射其他端口正常、只有 80/443 不通的基本就是这个原因换个高位端口立刻就好。还有两个与之相关的功能一个是 UPnP一个是 DMZ。UPnP 允许内网程序自动向路由器申请开映射方便但风险不小因为你不知道哪个程序偷偷开了什么端口建议在路由器里关掉。DMZ 是把某台内网设备完全暴露到公网所有端口全开等于把设备直接扔到外面除非你非常清楚自己在做什么否则不要用。4.2 路线二IPv6 直连被低估的免费方案这几年家庭宽带普遍下发了 IPv6 地址而且和 IPv4 不一样IPv6 不玩 NAT 那一套每台设备拿到的都是可以直接被外部访问的全局地址。换句话说如果你的网络有 IPv6你天生就有公网可达性不需要任何映射。验证方式很简单在电脑上查 IPv6 地址看是不是以2408、2409、240e这类开头国内常见的地址前缀或者直接访问任意一个显示访问者 IPv6 地址的页面能显示出地址就说明整条链路都支持。如果本机有 IPv6 但外部访问不通九成是路由器的 IPv6 防火墙把入站拦了。这是默认的合理设置不是故障。要放行特定端口需要在路由器的 IPv6 防火墙设置里加规则方向是“入站”目标是你那台设备的 IPv6 地址端口填服务的监听端口。不同路由器配置界面差异较大但逻辑都一样允许某个端口从外部进入某台设备。IPv6 方案有两个现实问题必须提前知道。第一是地址会变宽带重新拨号或者前缀租约到期后设备的 IPv6 地址可能变化写死的地址过几天就失效了。解决办法是配合 DDNS下一节说。第二是对方网络必须支持 IPv6如果访问方所在网络只有 IPv4那就连不上你的 IPv6 地址。所以 IPv6 适合“双方都现代”的场景比如自己的手机访问家里的服务现在主流移动网络基本都支持了。我个人对 IPv6 的评价是这是目前最被低估的方案。不花钱、不依赖第三方、延迟低唯一的门槛是要理解“没有 NAT”这件事意味着防火墙就是唯一的门禁配的时候要谨慎一点只放行确实需要的端口不要图省事全放开。4.3 路线三动态域名 DDNS解决地址漂移不管走 IPv4 还是 IPv6家庭宽带的地址都不是固定不变的重新拨号、断电重启、租约到期都可能换地址。每次都去查一遍当前地址再手动改连接配置不现实。DDNS 就是干这个的在本地跑一个客户端定期检测当前地址一旦变化就自动更新到域名服务商那边你始终用同一个域名访问。实现方式有三种按门槛排路由器内置 DDNS大部分路由器后台有 DDNS 菜单选一个服务商填账号密码路由器自动上报。这是最省事的适合不想折腾的人。服务商客户端在设备上装一个轻量客户端定期上报。适合路由器不支持你想用的服务商的情况。自己写脚本用curl调用服务商提供的更新接口配合cron定时任务。适合有特殊需求或想完全掌控的。第三种给个思路脚本逻辑其实很简单先查当前出口地址和上次记录比对不一致就调更新接口一致就退出。查询当前地址那一步用任意一个返回访问者地址的回显接口即可。放一个示意伪代码实际接口以所选服务商文档为准#!/bin/bash # 伪代码示意读取当前地址与缓存比对变化则上报 CURRENT$(curl -s https://回显接口地址) CACHE$(cat /tmp/last_ip 2/dev/null) if [ $CURRENT ! $CACHE ]; then curl -s https://服务商的更新接口?host你的域名ip$CURRENTtoken你的令牌 echo $CURRENT /tmp/last_ip fi定时任务设为每 5 到 10 分钟跑一次就够太频繁容易被服务商限流。DDNS 本身不解决“能否访问”的问题它只解决“地址总变”的问题所以它必须和端口映射或 IPv6 放行搭配使用。这个关系要理清不然会以为是 DDNS 突然不好用了其实是底下的映射规则掉了。4.4 路线四中继隧道转发没有公网地址时的兜底如果前面三条都走不通——没有公网IPv4、没有可用IPv6、宽带服务商那边也没法改——那就只剩中继转发这条路。原理是在内网设备上跑一个客户端主动向外网的一台中继服务器建立一条长连接外部访问请求发到中继服务器服务器顺着这条已经建立好的连接把流量回传给内网客户端。因为是内网主动往外连不涉及任何入站所以在任何网络环境下都能跑通。这条路的优点和缺点同样明显。优点是适用性最广什么网络环境都能用。缺点是延迟会变高因为流量要绕到中继服务器再回来如果中继服务器离你远体验会明显下降另外带宽受中继服务器限制不要指望跑满你家宽带。实现上分两类一类是自建自己在云上租一台小机器当中继跑一个转发程序另一类是用现成的中转服务配置简单但免费版通常有带宽和连接数限制。选哪种取决于你对延迟和隐私的要求以及愿意投入多少精力。用第三方中转服务时有几条经验值得记一下第一看清楚它的转发规则哪些端口能转、有没有并发限制第二注意数据传输是否加密涉及敏感内容时别把不设防的服务直接暴露出去第三如果免费版限速严重先测一下实际带宽再决定要不要投入别配完了发现没法用。4.5 四条路线选型对照路线前提条件延迟表现配置复杂度适用场景端口映射有公网IPv4最低低家庭服务器、远程桌面、监控IPv6直连双端支持IPv6很低中手机访问自家设备、新设备联调DDNS前两者之一不额外增加低必须与映射或放行搭配中继转发无较高中无公网地址时的兜底选型逻辑其实很清晰先看有没有公网IPv4有就直接映射没有就看IPv6通不通通就走IPv6两条都不行再上中继。DDNS 不是独立路线它是给前两条擦屁股的别把它当成第四种方案。5. 实战把一个内网服务发布出去理论讲完来一遍完整流程。这里以一个跑在192.168.1.50:8080的 Web 服务为例目标是让外网通过一个域名访问到它。整个过程分为六个步骤每一步我会说清楚为什么这么做以及容易在哪翻车。5.1 前置条件自检清单动手之前先把这几项确认了能避免后面 80% 的返工检查项怎么确认不通过怎么办服务本机可访问本机浏览器访问 127.0.0.1:8080服务没起来先解决服务内网其它设备可访问手机连同一Wi-Fi访问 192.168.1.50:8080本机防火墙拦了放行内网IP固定重启路由后地址是否变做 DHCP 静态绑定WAN口有公网地址见第3节对比法走 IPv6 或中继端口未被服务商封换高位端口试换端口第二项特别容易被跳过。我遇到过太多次“映射配好了怎么不通”最后发现是服务的监听地址写成了127.0.0.1。这个地址只接受本机连接其他任何设备都连不上包括你自己的手机。解决方法是把服务配置里的监听地址改成0.0.0.0表示监听所有网卡。第三项也重要。内网IP如果是 DHCP 动态分配的路由器重启后可能变成192.168.1.51你映射还写着.50自然不通。固定方式有两种一是在路由器的 DHCP 设置里做静态绑定把设备的 MAC 地址和固定IP绑起来设备不用改配置二是在设备本机手动设静态IP但要避开 DHCP 分配池否则可能冲突。我更推荐第一种集中管理换设备也方便。5.2 端口映射的具体配置与参数计算进路由器后台找到端口转发页面填四项外部端口38080 内部地址192.168.1.50 内部端口8080 协议TCP外部端口为什么选 38080 而不是 8080三个理由第一8080 是扫描器重点关注的端口暴露在公网上每天会被扫几百次第二部分服务商的接入策略对常见 Web 端口有额外限制第三高位端口和你的服务名、设备型号没有任何关联不容易被针对性尝试。如果这个服务只需要给自己用还可以在路由器里加一条来源限制只允许特定来源地址访问。但家庭宽带的对外地址通常是动态的手机流量地址也会变这个限制维护起来麻烦实际价值有限更实际的做法是强化服务自身的认证。配完之后路由器的映射列表里应该能看到这条规则状态是启用。有些路由器需要点“保存并应用”之后才生效有些还需要重启一次看具体型号。5.3 防火墙与安全加固映射只是把路打通门后面还得有锁。按风险从高到低排这几件事一定要做第一改掉默认端口和默认账号。暴露在公网上的服务第一波扫描通常在几小时内就会到。默认端口加默认口令是最容易被拿下的组合改成一个不常见端口加强口令能挡掉绝大多数自动化尝试。第二能加认证就加认证。Web 服务前面套一层基础认证远程桌面只允许特定账号文件服务不要开匿名。这些配置花不了几分钟但差别巨大。第三只开必须的端口。一台设备上跑了三个服务只映射你自己要用的那一个不要图省事全映射。每多开一个端口就多一个可能被利用的入口。第四关掉 UPnP 和 DMZ。前面说过这两个功能会削弱你对端口开放情况的掌控家庭网络里没必要开。第五留日志。至少保留访问日志和登录失败记录出问题的时候能追溯。我习惯每周扫一眼失败登录次数如果突然暴增说明可能被盯上了该换端口换端口。注意远程桌面这类高权限服务的风险等级远高于普通网页服务能不直接暴露就尽量不要直接暴露。如果必须用务必开双因素认证并且把端口改到一个不常见的位置。5.4 外部验证与结果确认配完之后按这个顺序验证每一步都过了才算成功内网另一台设备访问192.168.1.50:8080确认服务本身在内网可用。手机流量访问公网地址:38080确认映射生效。这一步能过说明整条路通了。手机流量访问域名:38080确认 DDNS 生效。这一步能过说明域名解析和地址更新都正常。隔一天再测一次确认 DDNS 在地址变化后能自动跟上。第 4 步最容易被忽略。当天配好能用第二天不能用了八成是地址变了而 DDNS 没更新或者更新了但本地 DNS 缓存还没过期。遇到这种情况先nslookup 你的域名看解析出来的是不是当前地址再决定是查 DDNS 客户端还是等缓存过期。我个人在实际操作中的体会是这套流程真正耗时间的不是配置而是前置条件的排查。配置本身十分钟就能做完但如果内网IP没固定、服务监听地址不对、光猫多了一层NAT每一个都能让你卡上几个小时。所以我把前置自检放在最前面宁可多花十分钟确认也不要配完之后反复猜。6. 常见问题与排查实录这一节全部是踩过坑之后攒下来的按问题出现的频率从高到低排。每个问题给出判断依据和处理办法遇到时按顺序对号入座。6.1 端口映射配了不生效的排查顺序这是最高频的问题。排查一定要有顺序乱试只会浪费时间。我的固定顺序是第一步确认公网地址是不是真的。按第3节的对比法走一遍。如果 WAN 口是私有地址或共享地址段映射配得再对也没用方向就错了。第二步确认服务在内网能不能被别的设备访问。用手机连同一 Wi-Fi 访问内网地址加端口。不通就是本机防火墙或监听地址的问题跟映射无关。第三步确认服务监听的是所有网卡。在服务所在机器上执行netstat -ano | findstr :8080或者 Linux 下ss -lntp | grep 8080看监听地址那一列。如果是127.0.0.1:8080只有本机能连改成0.0.0.0:8080。如果是0.0.0.0:8080或[::]:8080说明监听没问题。第四步确认防火墙放行。Windows 防火墙默认会拦入站需要给对应程序或端口加一条入站规则。命令行方式netsh advfirewall firewall add rule name自定义服务8080 dirin actionallow protocolTCP localport8080Linux 上如果用 firewalldfirewall-cmd --add-port8080/tcp --permanent然后--reload。第五步确认没有双重NAT。用第3节的 traceroute 方法看第二跳。如果有两层要么在第一层也加映射要么把第一层改桥接。第六步确认端口没被服务商封。换一个高位端口重新映射如果换了就好说明原端口被封了。把这个顺序记牢绝大多数映射问题都能在半小时内定位。6.2 地址天天变、过几天就连不上宽带地址变化是常态处理方式取决于你走的是哪条路。走 IPv4 映射的核心是 DDNS 要真的在更新定期检查客户端日志有没有报错走 IPv6 的同理而且要确认路由器的前缀变化后设备地址是否跟着变。有个隐蔽的坑DDNS 客户端更新成功但域名服务商那边的 TTL 设得很长导致解析缓存迟迟不刷新。这种情况不是客户端问题把 TTL 调到 60 秒到 300 秒之间会好很多。代价是解析请求变多但自用场景完全无所谓。另一个坑是客户端和服务商之间的认证令牌过期。很多服务商的令牌有有效期到期了更新接口会返回失败但客户端不一定有显眼的提示。建议在脚本里加上失败重试和日志记录出问题时能第一时间看到。6.3 IPv6 通了但就是连不上IPv6 的排查和 IPv4 完全不是一个思路因为它没有 NAT问题通常出在防火墙上。检查顺序先确认本机确实有全局 IPv6 地址而不是只有fe80开头的链路本地地址。fe80开头的地址只能在本地链路上用外部访问不了。然后确认外部网络比如手机流量本身支持 IPv6有些网络环境只给 IPv4这种情况你这边再正常也没用。最后检查路由器的 IPv6 防火墙入站规则是不是默认拒绝所有入站需要给目标端口单独放行。还有一个容易忽略的点IPv6 地址写法里有冒号在浏览器地址栏访问时要加方括号比如http://[2408:xxxx::1]:8080不加方括号解析会出错。这个细节坑过不少人。6.4 安全问题速查表把风险点整理成一张表配完之后对着过一遍风险项判断方法处理建议默认端口暴露端口号是否常见22/3389/8080换成 20000 以上高位端口弱口令是否有默认账号或简单密码强口令 双因素认证无认证服务访问是否需要登录至少加一层基础认证端口开太多映射列表有几条规则只保留必需的UPnP 开启路由器设置里是否启用关闭改手动映射DMZ 开启是否有设备被全端口暴露关闭无日志是否记录访问和失败登录开启日志并定期查看服务版本过旧是否有已知漏洞定期更新这张表里我最想强调的还是第一条和第二条。大量自动化扫描就是靠“默认端口 默认口令”这两个条件筛目标的把这两个改掉能挡掉绝大部分无差别尝试。剩下的针对性攻击那是另一个层面的问题家庭场景基本遇不到。6.5 常见现象速查再补几个零散但高频的现象遇到直接对照现象最可能原因快速验证内网通、外网不通映射未生效或公网地址不对手机流量测端口家里通、外面不通NAT回流不支持误判换外部网络测昨天通、今天不通地址变了或DDNS失效nslookup 查解析只有80/443不通服务商封端口换高位端口时通时不通设备休眠或无线信号弱有线连接再测速度很慢上行带宽限制或走中继内网测速对比“内网通、外网不通”和“家里通、外面不通”这两个现象经常被混为一谈其实完全不同。前者是真的没通后者是路由器不支持从内网访问自己的公网地址实际外部是通的。区分方法只有一个用手机流量测不要用家里的网络测。最后分享一个我自己一直在用的习惯把所有配置信息记在一个文档里包括内网IP、映射端口、DDNS域名、服务监听端口、防火墙规则。时间一长具体数字一定记不住尤其是设备多的时候。这份文档在换路由器、迁移服务、排查故障的时候能省掉大量时间比任何记忆都可靠。