网络通信入门:端口映射与内网穿透

20260716

适用对象:网络通信、嵌入式、Qt/C/C++、GNSS 接收机与基准站运维初学者

讨论范围:以 IPv4、家用或工业路由器、4G/5G 网络以及常见 TCP/UDP 服务为主


1. 为什么外网通常不能直接访问内网设备

现场设备通常使用私有 IPv4 地址,例如:

text 复制代码
维护电脑:192.168.1.20
GNSS接收机:192.168.1.100
路由器LAN口:192.168.1.1

这些地址只在本地网络中使用,公共 IPv4 因特网不会把数据直接路由到:

text 复制代码
192.168.1.100

因此,局域网电脑可以直接访问:

text 复制代码
192.168.1.100:5000

远端电脑却不能直接使用这个私网地址。

要让外部用户主动访问现场服务,通常需要建立一条公网入站路径,例如:

text 复制代码
公网入口地址:外部端口
→
内网设备IP:内部端口

最常见的实现方式就是端口映射。


2. 什么是端口映射

端口映射也常称为:

text 复制代码
端口转发
Port Forwarding
虚拟服务器

其含义是:

当数据到达边界设备的指定地址、协议和端口时,设备按照预先配置的规则,把数据转发给某台内网设备的指定端口。

例如:

text 复制代码
外部入口:120.36.10.88:15000
内部目标:192.168.1.100:5000
协议:TCP

#mermaid-svg-o90hzyRdWdgMwBol{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-o90hzyRdWdgMwBol .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-o90hzyRdWdgMwBol .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-o90hzyRdWdgMwBol .error-icon{fill:#552222;}#mermaid-svg-o90hzyRdWdgMwBol .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-o90hzyRdWdgMwBol .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-o90hzyRdWdgMwBol .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-o90hzyRdWdgMwBol .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-o90hzyRdWdgMwBol .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-o90hzyRdWdgMwBol .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-o90hzyRdWdgMwBol .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-o90hzyRdWdgMwBol .marker{fill:#333333;stroke:#333333;}#mermaid-svg-o90hzyRdWdgMwBol .marker.cross{stroke:#333333;}#mermaid-svg-o90hzyRdWdgMwBol svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-o90hzyRdWdgMwBol p{margin:0;}#mermaid-svg-o90hzyRdWdgMwBol .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-o90hzyRdWdgMwBol .cluster-label text{fill:#333;}#mermaid-svg-o90hzyRdWdgMwBol .cluster-label span{color:#333;}#mermaid-svg-o90hzyRdWdgMwBol .cluster-label span p{background-color:transparent;}#mermaid-svg-o90hzyRdWdgMwBol .label text,#mermaid-svg-o90hzyRdWdgMwBol span{fill:#333;color:#333;}#mermaid-svg-o90hzyRdWdgMwBol .node rect,#mermaid-svg-o90hzyRdWdgMwBol .node circle,#mermaid-svg-o90hzyRdWdgMwBol .node ellipse,#mermaid-svg-o90hzyRdWdgMwBol .node polygon,#mermaid-svg-o90hzyRdWdgMwBol .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-o90hzyRdWdgMwBol .rough-node .label text,#mermaid-svg-o90hzyRdWdgMwBol .node .label text,#mermaid-svg-o90hzyRdWdgMwBol .image-shape .label,#mermaid-svg-o90hzyRdWdgMwBol .icon-shape .label{text-anchor:middle;}#mermaid-svg-o90hzyRdWdgMwBol .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-o90hzyRdWdgMwBol .rough-node .label,#mermaid-svg-o90hzyRdWdgMwBol .node .label,#mermaid-svg-o90hzyRdWdgMwBol .image-shape .label,#mermaid-svg-o90hzyRdWdgMwBol .icon-shape .label{text-align:center;}#mermaid-svg-o90hzyRdWdgMwBol .node.clickable{cursor:pointer;}#mermaid-svg-o90hzyRdWdgMwBol .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-o90hzyRdWdgMwBol .arrowheadPath{fill:#333333;}#mermaid-svg-o90hzyRdWdgMwBol .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-o90hzyRdWdgMwBol .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-o90hzyRdWdgMwBol .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-o90hzyRdWdgMwBol .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-o90hzyRdWdgMwBol .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-o90hzyRdWdgMwBol .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-o90hzyRdWdgMwBol .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-o90hzyRdWdgMwBol .cluster text{fill:#333;}#mermaid-svg-o90hzyRdWdgMwBol .cluster span{color:#333;}#mermaid-svg-o90hzyRdWdgMwBol div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-o90hzyRdWdgMwBol .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-o90hzyRdWdgMwBol rect.text{fill:none;stroke-width:0;}#mermaid-svg-o90hzyRdWdgMwBol .icon-shape,#mermaid-svg-o90hzyRdWdgMwBol .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-o90hzyRdWdgMwBol .icon-shape p,#mermaid-svg-o90hzyRdWdgMwBol .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-o90hzyRdWdgMwBol .icon-shape .label rect,#mermaid-svg-o90hzyRdWdgMwBol .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-o90hzyRdWdgMwBol .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-o90hzyRdWdgMwBol .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-o90hzyRdWdgMwBol :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} TCP 120.36.10.88:15000
转发到 192.168.1.100:5000
响应数据
返回响应
外网客户端
公网边界设备
GNSS接收机或工控机

外部用户访问的是公网入口,不是直接访问私网地址。


3. IP 地址、协议和端口各自表示什么

可以简单理解为:

text 复制代码
IP地址
→ 找到目标主机或网络接口

TCP/UDP
→ 确定使用哪一种传输协议

端口号
→ 找到该协议下的具体服务

例如:

text 复制代码
192.168.1.100:22/TCP

通常表示访问该设备上的 SSH 服务。

需要注意:

  • TCP 端口和 UDP 端口属于不同的协议空间;
  • 5000/TCP5000/UDP 不是同一个入口;
  • 端口号本身不等于应用协议,应用程序可以使用非默认端口。

4. 端口映射与 NAT 的关系

端口映射通常由 NAT 功能实现。入站方向主要涉及:

text 复制代码
DNAT
=
修改目标IP地址,必要时同时修改目标端口

例如:

text 复制代码
转换前目标:
120.36.10.88:15000

转换后目标:
192.168.1.100:5000

边界设备通常还会通过连接跟踪或状态表保存转换关系,使返回数据能够正确送回外网客户端。

4.1 常见术语区别

概念 主要含义
NAT 网络地址转换的总称
SNAT 修改源地址,常用于内网主动访问外网
DNAT 修改目标地址,端口映射常使用
NAPT/PAT 同时转换地址和端口,多台设备可共享一个公网 IPv4
端口映射 面向业务的配置,把外部入口转发给内部服务

因此:

text 复制代码
端口映射属于NAT的一种应用
但端口映射不等于全部NAT功能

5. 没有端口映射时,外部请求会怎样

假设外部访问:

text 复制代码
120.36.10.88:15000/TCP

若没有匹配的端口映射,可能出现:

  • 边界防火墙直接丢弃或拒绝;
  • 路由器本机正好监听该端口,请求由路由器自己处理;
  • 上级路由器、光猫或运营商提前阻断;
  • 数据到达边界设备,但没有规则转发到内网。

因此,更准确的表述是:

入站数据必须同时满足"存在正确的转发规则"和"安全策略允许",才能到达指定内网服务。


6. 端口映射与防火墙的关系

端口映射解决:

text 复制代码
数据应该转发到哪里

防火墙解决:

text 复制代码
该数据是否允许通过

#mermaid-svg-QRXXy3qY3hDzg3do{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-QRXXy3qY3hDzg3do .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-QRXXy3qY3hDzg3do .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-QRXXy3qY3hDzg3do .error-icon{fill:#552222;}#mermaid-svg-QRXXy3qY3hDzg3do .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-QRXXy3qY3hDzg3do .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-QRXXy3qY3hDzg3do .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-QRXXy3qY3hDzg3do .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-QRXXy3qY3hDzg3do .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-QRXXy3qY3hDzg3do .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-QRXXy3qY3hDzg3do .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-QRXXy3qY3hDzg3do .marker{fill:#333333;stroke:#333333;}#mermaid-svg-QRXXy3qY3hDzg3do .marker.cross{stroke:#333333;}#mermaid-svg-QRXXy3qY3hDzg3do svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-QRXXy3qY3hDzg3do p{margin:0;}#mermaid-svg-QRXXy3qY3hDzg3do .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-QRXXy3qY3hDzg3do .cluster-label text{fill:#333;}#mermaid-svg-QRXXy3qY3hDzg3do .cluster-label span{color:#333;}#mermaid-svg-QRXXy3qY3hDzg3do .cluster-label span p{background-color:transparent;}#mermaid-svg-QRXXy3qY3hDzg3do .label text,#mermaid-svg-QRXXy3qY3hDzg3do span{fill:#333;color:#333;}#mermaid-svg-QRXXy3qY3hDzg3do .node rect,#mermaid-svg-QRXXy3qY3hDzg3do .node circle,#mermaid-svg-QRXXy3qY3hDzg3do .node ellipse,#mermaid-svg-QRXXy3qY3hDzg3do .node polygon,#mermaid-svg-QRXXy3qY3hDzg3do .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-QRXXy3qY3hDzg3do .rough-node .label text,#mermaid-svg-QRXXy3qY3hDzg3do .node .label text,#mermaid-svg-QRXXy3qY3hDzg3do .image-shape .label,#mermaid-svg-QRXXy3qY3hDzg3do .icon-shape .label{text-anchor:middle;}#mermaid-svg-QRXXy3qY3hDzg3do .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-QRXXy3qY3hDzg3do .rough-node .label,#mermaid-svg-QRXXy3qY3hDzg3do .node .label,#mermaid-svg-QRXXy3qY3hDzg3do .image-shape .label,#mermaid-svg-QRXXy3qY3hDzg3do .icon-shape .label{text-align:center;}#mermaid-svg-QRXXy3qY3hDzg3do .node.clickable{cursor:pointer;}#mermaid-svg-QRXXy3qY3hDzg3do .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-QRXXy3qY3hDzg3do .arrowheadPath{fill:#333333;}#mermaid-svg-QRXXy3qY3hDzg3do .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-QRXXy3qY3hDzg3do .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-QRXXy3qY3hDzg3do .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-QRXXy3qY3hDzg3do .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-QRXXy3qY3hDzg3do .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-QRXXy3qY3hDzg3do .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-QRXXy3qY3hDzg3do .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-QRXXy3qY3hDzg3do .cluster text{fill:#333;}#mermaid-svg-QRXXy3qY3hDzg3do .cluster span{color:#333;}#mermaid-svg-QRXXy3qY3hDzg3do div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-QRXXy3qY3hDzg3do .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-QRXXy3qY3hDzg3do rect.text{fill:none;stroke-width:0;}#mermaid-svg-QRXXy3qY3hDzg3do .icon-shape,#mermaid-svg-QRXXy3qY3hDzg3do .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-QRXXy3qY3hDzg3do .icon-shape p,#mermaid-svg-QRXXy3qY3hDzg3do .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-QRXXy3qY3hDzg3do .icon-shape .label rect,#mermaid-svg-QRXXy3qY3hDzg3do .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-QRXXy3qY3hDzg3do .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-QRXXy3qY3hDzg3do .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-QRXXy3qY3hDzg3do :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 否



外网客户端
公网入口
安全策略允许?
丢弃或拒绝
存在匹配规则?
不转发到内网服务
内网设备

不同厂商设备内部的处理顺序可能不同,图中只表示逻辑条件,不代表固定的软件执行顺序。


7. 端口映射成功的必要条件

7.1 内网服务正常

必须先在局域网中测试:

text 复制代码
192.168.1.100:5000

需要确认:

  • 服务程序已经启动;
  • 服务监听正确的地址和端口;
  • TCP/UDP 协议正确;
  • 内网设备防火墙允许;
  • 登录、证书或应用权限正确。

如果服务只监听:

text 复制代码
127.0.0.1

它只能被设备本机访问,局域网和端口映射都无法连接。

7.2 内网地址稳定

映射规则通常固定指向:

text 复制代码
192.168.1.100:5000

如果 DHCP 把设备地址改成 192.168.1.120,规则就会失效。

可采用:

  • 手工静态 IP;
  • DHCP 地址保留。

7.3 公网入站路径可达且可控

真正要求不是"现场路由器必须亲自拿到公网 IPv4",而是:

从外部客户端到执行端口映射的设备之间,必须存在可到达、可配置的入站路径。

最简单的情况是现场路由器直接获得公网 IPv4。

如果前面还有光猫或上级路由器,也可以逐级转发,但配置和排障更复杂。

7.4 返回路径正确

请求到达内网设备后,响应通常应经同一边界设备返回。

如果设备使用错误网关、存在策略路由或发生非对称路由,可能出现:

text 复制代码
请求能够到达
但响应无法正确返回

7.5 所有安全策略允许

需要检查:

  • 上级光猫或路由器;
  • 边界路由器、防火墙;
  • 企业 ACL;
  • 内网设备防火墙;
  • 云安全组;
  • 运营商接入限制。

8. 怎样判断是否具有公网 IPv4 入站能力

8.1 查看 WAN 地址

常见非公网 IPv4 范围包括:

text 复制代码
10.0.0.0/8
172.16.0.0/12
192.168.0.0/16
100.64.0.0/10

其中:

  • 前三个是私有地址;
  • 100.64.0.0/10 是共享地址空间,常用于运营商 CGNAT。

如果 WAN 地址位于这些范围,现场路由器通常不直接处于公网边界。

以上不是全部特殊用途地址。判断时应结合运营商网络结构和实际外部测试。

8.2 比较 WAN 地址与外部出口地址

可比较:

text 复制代码
路由器WAN地址
外部网站看到的IPv4出口地址

若两者不同,通常说明中间存在:

  • 上级 NAT;
  • CGNAT;
  • 代理或其他出口设备;
  • 多 WAN 或特殊接入架构。

若两者相同,也只能说明"看起来没有普通地址转换",不能保证入站端口一定可达,因为还可能有:

  • 防火墙;
  • 运营商入站限制;
  • 动态地址变化;
  • 服务或映射配置错误。

最终仍应从真正的外部网络测试。


9. 双重 NAT、多级 NAT 与 CGNAT

9.1 双重 NAT

text 复制代码
内网设备
→ 自有路由器
→ 光猫路由模式
→ 因特网

#mermaid-svg-m2RaWhYnJkJ2hFWi{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-m2RaWhYnJkJ2hFWi .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-m2RaWhYnJkJ2hFWi .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-m2RaWhYnJkJ2hFWi .error-icon{fill:#552222;}#mermaid-svg-m2RaWhYnJkJ2hFWi .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-m2RaWhYnJkJ2hFWi .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-m2RaWhYnJkJ2hFWi .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-m2RaWhYnJkJ2hFWi .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-m2RaWhYnJkJ2hFWi .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-m2RaWhYnJkJ2hFWi .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-m2RaWhYnJkJ2hFWi .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-m2RaWhYnJkJ2hFWi .marker{fill:#333333;stroke:#333333;}#mermaid-svg-m2RaWhYnJkJ2hFWi .marker.cross{stroke:#333333;}#mermaid-svg-m2RaWhYnJkJ2hFWi svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-m2RaWhYnJkJ2hFWi p{margin:0;}#mermaid-svg-m2RaWhYnJkJ2hFWi .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-m2RaWhYnJkJ2hFWi .cluster-label text{fill:#333;}#mermaid-svg-m2RaWhYnJkJ2hFWi .cluster-label span{color:#333;}#mermaid-svg-m2RaWhYnJkJ2hFWi .cluster-label span p{background-color:transparent;}#mermaid-svg-m2RaWhYnJkJ2hFWi .label text,#mermaid-svg-m2RaWhYnJkJ2hFWi span{fill:#333;color:#333;}#mermaid-svg-m2RaWhYnJkJ2hFWi .node rect,#mermaid-svg-m2RaWhYnJkJ2hFWi .node circle,#mermaid-svg-m2RaWhYnJkJ2hFWi .node ellipse,#mermaid-svg-m2RaWhYnJkJ2hFWi .node polygon,#mermaid-svg-m2RaWhYnJkJ2hFWi .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-m2RaWhYnJkJ2hFWi .rough-node .label text,#mermaid-svg-m2RaWhYnJkJ2hFWi .node .label text,#mermaid-svg-m2RaWhYnJkJ2hFWi .image-shape .label,#mermaid-svg-m2RaWhYnJkJ2hFWi .icon-shape .label{text-anchor:middle;}#mermaid-svg-m2RaWhYnJkJ2hFWi .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-m2RaWhYnJkJ2hFWi .rough-node .label,#mermaid-svg-m2RaWhYnJkJ2hFWi .node .label,#mermaid-svg-m2RaWhYnJkJ2hFWi .image-shape .label,#mermaid-svg-m2RaWhYnJkJ2hFWi .icon-shape .label{text-align:center;}#mermaid-svg-m2RaWhYnJkJ2hFWi .node.clickable{cursor:pointer;}#mermaid-svg-m2RaWhYnJkJ2hFWi .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-m2RaWhYnJkJ2hFWi .arrowheadPath{fill:#333333;}#mermaid-svg-m2RaWhYnJkJ2hFWi .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-m2RaWhYnJkJ2hFWi .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-m2RaWhYnJkJ2hFWi .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-m2RaWhYnJkJ2hFWi .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-m2RaWhYnJkJ2hFWi .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-m2RaWhYnJkJ2hFWi .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-m2RaWhYnJkJ2hFWi .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-m2RaWhYnJkJ2hFWi .cluster text{fill:#333;}#mermaid-svg-m2RaWhYnJkJ2hFWi .cluster span{color:#333;}#mermaid-svg-m2RaWhYnJkJ2hFWi div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-m2RaWhYnJkJ2hFWi .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-m2RaWhYnJkJ2hFWi rect.text{fill:none;stroke-width:0;}#mermaid-svg-m2RaWhYnJkJ2hFWi .icon-shape,#mermaid-svg-m2RaWhYnJkJ2hFWi .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-m2RaWhYnJkJ2hFWi .icon-shape p,#mermaid-svg-m2RaWhYnJkJ2hFWi .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-m2RaWhYnJkJ2hFWi .icon-shape .label rect,#mermaid-svg-m2RaWhYnJkJ2hFWi .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-m2RaWhYnJkJ2hFWi .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-m2RaWhYnJkJ2hFWi .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-m2RaWhYnJkJ2hFWi :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 设备

192.168.1.100
自有路由器

192.168.1.1
光猫或上级路由器

192.168.0.1
因特网

只在 R1 上做映射通常不够,还需要在 R2 上继续转发到 R1

也可以:

  • 将光猫改为桥接模式;
  • 让自有路由器直接拨号;
  • 使用 VPN 或反向隧道。

9.2 CGNAT

若最外层是运营商 CGNAT,用户通常没有权限配置运营商侧的入站映射。

此时,本地路由器即使配置正确,公网主动连接仍然无法到达。


10. TCP 和 UDP 都能做端口映射吗

可以,但必须按实际服务协议配置。

10.1 TCP

常见于:

  • SSH;
  • HTTP/HTTPS;
  • NTRIP;
  • MQTT;
  • Modbus TCP;
  • 自定义 TCP Server。

TCP 有连接建立过程,边界设备通常会跟踪连接状态。

10.2 UDP

常见于:

  • 自定义 UDP 数据;
  • 语音或视频流;
  • 实时传感器数据;
  • 某些设备发现与控制协议。

UDP 没有 TCP 三次握手,但 NAT 和防火墙仍可能维护基于以下信息的状态:

text 复制代码
源IP
源端口
目标IP
目标端口
协议
超时时间

不同设备的 UDP 映射和过滤行为可能不同,超时通常也比 TCP 更短。

10.3 配置原则

不要因为不确定就同时开放 TCP 和 UDP。

应先确认:

text 复制代码
服务使用TCP
服务使用UDP
或TCP、UDP分别承担不同功能

11. 外部端口和内部端口可以不同吗

可以。

例如:

text 复制代码
外部端口:15000
内部IP:192.168.1.100
内部端口:5000
协议:TCP

表示:

text 复制代码
公网入口:15000/TCP
→
192.168.1.100:5000/TCP

这样可以:

  • 避免外部端口冲突;
  • 为多台设备分配不同入口;
  • 方便规则管理。

但修改外部端口只能减少部分默认端口扫描噪声,不能替代认证、加密和防火墙。


12. 多台设备怎样共享一个公网地址

假设三台设备都监听 5000/TCP

外部入口 内部目标
公网IP:15000/TCP 192.168.1.100:5000/TCP
公网IP:15001/TCP 192.168.1.101:5000/TCP
公网IP:15002/TCP 192.168.1.102:5000/TCP

对于普通静态端口映射:

同一个公网 IP、同一种传输协议和同一个外部端口,通常只能对应一个内部目标。

负载均衡、反向代理等高级方案可以把一个入口分发到多个后端,但那已经不属于简单的一对一端口映射。


13. 哪些情况不需要端口映射

13.1 设备主动访问外部服务器

例如:

text 复制代码
GNSS基准站主动连接NTRIP Caster
设备主动连接MQTT Broker
设备主动上传日志
设备主动建立VPN或反向隧道

连接由内向外发起后,普通 NAT 通常会自动建立返回路径,不需要静态端口映射。

13.2 同一局域网内访问

同一可达局域网中的设备可以直接访问内网 IP,不需要绕到公网入口。

13.3 已通过 VPN 组网

远程电脑与现场网络已经通过 VPN 互联时,可以使用虚拟网段或现场内网地址访问,不一定需要公开业务端口。


14. 什么是内网穿透

"内网穿透"是一个宽泛的工程说法,通常指:

在没有直接公网入站能力时,通过设备主动连接、隧道、中继或 P2P 等方式,让外部用户能够访问内网服务。

常见实现包括:

  • 反向 TCP 隧道;
  • 公网中转服务器;
  • VPN 组网;
  • P2P 打洞;
  • 云端设备管理通道;
  • SD-WAN;
  • 零信任接入。

最常见的反向隧道路径是:

text 复制代码
内网设备主动连接公网服务器
→ 保持隧道
→ 外部用户通过服务器访问内网设备

#mermaid-svg-Mf6BwwWsQNTIjcRT{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-Mf6BwwWsQNTIjcRT .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-Mf6BwwWsQNTIjcRT .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-Mf6BwwWsQNTIjcRT .error-icon{fill:#552222;}#mermaid-svg-Mf6BwwWsQNTIjcRT .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-Mf6BwwWsQNTIjcRT .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-Mf6BwwWsQNTIjcRT .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-Mf6BwwWsQNTIjcRT .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-Mf6BwwWsQNTIjcRT .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-Mf6BwwWsQNTIjcRT .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-Mf6BwwWsQNTIjcRT .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-Mf6BwwWsQNTIjcRT .marker{fill:#333333;stroke:#333333;}#mermaid-svg-Mf6BwwWsQNTIjcRT .marker.cross{stroke:#333333;}#mermaid-svg-Mf6BwwWsQNTIjcRT svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-Mf6BwwWsQNTIjcRT p{margin:0;}#mermaid-svg-Mf6BwwWsQNTIjcRT .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-Mf6BwwWsQNTIjcRT .cluster-label text{fill:#333;}#mermaid-svg-Mf6BwwWsQNTIjcRT .cluster-label span{color:#333;}#mermaid-svg-Mf6BwwWsQNTIjcRT .cluster-label span p{background-color:transparent;}#mermaid-svg-Mf6BwwWsQNTIjcRT .label text,#mermaid-svg-Mf6BwwWsQNTIjcRT span{fill:#333;color:#333;}#mermaid-svg-Mf6BwwWsQNTIjcRT .node rect,#mermaid-svg-Mf6BwwWsQNTIjcRT .node circle,#mermaid-svg-Mf6BwwWsQNTIjcRT .node ellipse,#mermaid-svg-Mf6BwwWsQNTIjcRT .node polygon,#mermaid-svg-Mf6BwwWsQNTIjcRT .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-Mf6BwwWsQNTIjcRT .rough-node .label text,#mermaid-svg-Mf6BwwWsQNTIjcRT .node .label text,#mermaid-svg-Mf6BwwWsQNTIjcRT .image-shape .label,#mermaid-svg-Mf6BwwWsQNTIjcRT .icon-shape .label{text-anchor:middle;}#mermaid-svg-Mf6BwwWsQNTIjcRT .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-Mf6BwwWsQNTIjcRT .rough-node .label,#mermaid-svg-Mf6BwwWsQNTIjcRT .node .label,#mermaid-svg-Mf6BwwWsQNTIjcRT .image-shape .label,#mermaid-svg-Mf6BwwWsQNTIjcRT .icon-shape .label{text-align:center;}#mermaid-svg-Mf6BwwWsQNTIjcRT .node.clickable{cursor:pointer;}#mermaid-svg-Mf6BwwWsQNTIjcRT .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-Mf6BwwWsQNTIjcRT .arrowheadPath{fill:#333333;}#mermaid-svg-Mf6BwwWsQNTIjcRT .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-Mf6BwwWsQNTIjcRT .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-Mf6BwwWsQNTIjcRT .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Mf6BwwWsQNTIjcRT .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-Mf6BwwWsQNTIjcRT .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Mf6BwwWsQNTIjcRT .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-Mf6BwwWsQNTIjcRT .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-Mf6BwwWsQNTIjcRT .cluster text{fill:#333;}#mermaid-svg-Mf6BwwWsQNTIjcRT .cluster span{color:#333;}#mermaid-svg-Mf6BwwWsQNTIjcRT div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-Mf6BwwWsQNTIjcRT .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-Mf6BwwWsQNTIjcRT rect.text{fill:none;stroke-width:0;}#mermaid-svg-Mf6BwwWsQNTIjcRT .icon-shape,#mermaid-svg-Mf6BwwWsQNTIjcRT .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-Mf6BwwWsQNTIjcRT .icon-shape p,#mermaid-svg-Mf6BwwWsQNTIjcRT .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-Mf6BwwWsQNTIjcRT .icon-shape .label rect,#mermaid-svg-Mf6BwwWsQNTIjcRT .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-Mf6BwwWsQNTIjcRT .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-Mf6BwwWsQNTIjcRT .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-Mf6BwwWsQNTIjcRT :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 主动建立隧道
认证并访问
通过隧道转发
内网设备
公网服务器或云平台
远程用户

部分方案会先尝试 P2P 直连,无法直连时才使用中继。


15. 端口映射、VPN 与反向隧道怎样选择

对比项 端口映射 VPN 组网 反向隧道/云穿透
现场需要公网入站能力 通常需要 现场端通常不需要,但至少要有可达的 VPN 节点 现场端通常不需要
是否直接暴露业务端口 通常否 取决于实现
是否依赖额外节点 通常不依赖 需要 VPN 服务端或组网平台 通常需要公网服务器或云平台
多设备管理 规则较多 较方便 较方便
安全控制 需逐端口强化 可集中认证和授权 取决于平台与协议
典型用途 少量公开服务 远程运维、专网互联 无公网、快速远程接入

工程上可以这样判断:

text 复制代码
少量公开服务 + 公网入口可控
→ 可以考虑端口映射

远程运维 + 安全要求高
→ 优先考虑VPN或零信任接入

4G/5G、CGNAT、无法控制边界设备
→ 考虑反向隧道、VPN、SD-WAN或APN专网

16. IPv6 场景需要端口映射吗

如果设备获得可从外部路由到达的全球单播 IPv6 地址,通常不需要像 IPv4 NAPT 那样共享地址和端口。

外部路径可能是:

text 复制代码
远程客户端
→ IPv6路由
→ 设备全球IPv6地址

但仍需满足:

  • 双方具备 IPv6 连通性;
  • 路由正确;
  • 边界防火墙允许;
  • 设备防火墙允许;
  • 服务监听 IPv6 地址;
  • 地址稳定或使用正确的 DNS/DDNS。

因此:

公网 IPv6 解决的是寻址和路由问题,不代表服务自动对外开放。

路由器界面的"IPv6 端口开放"通常是在配置入站防火墙规则,不一定是在执行传统 IPv4 NAPT。


17. DDNS 能解决什么问题

DDNS 用于把可能变化的公网地址关联到固定域名:

text 复制代码
gnss-base.example.com
→ 当前公网地址

它解决:

text 复制代码
公网地址变化后,怎样继续通过固定名称找到入口

它不能解决:

  • CGNAT;
  • 没有公网入站能力;
  • 防火墙阻断;
  • 端口映射未配置;
  • 内网服务未启动。

因此:

text 复制代码
DDNS
≠
端口映射
≠
内网穿透

18. 家用路由器中的"DMZ 主机"

家用路由器中的"DMZ 主机"通常表示:

将大量没有匹配其他规则的入站流量转发给指定内网设备。

这与企业网络中独立划分的 DMZ 安全区域不是同一个概念。

例如:

text 复制代码
DMZ主机:192.168.1.100

可能导致该设备暴露大量端口。

因此:

  • 可用于短时间排障;
  • 不建议长期用于生产环境;
  • 应优先使用精确端口映射或 VPN。

具体转发范围取决于路由器厂商实现。


19. GNSS 场景示例

19.1 远程访问接收机 Web 页面

现场服务:

text 复制代码
192.168.1.100:80/TCP

映射:

text 复制代码
公网入口:18080/TCP
→
192.168.1.100:80/TCP

访问:

text 复制代码
http://公网地址:18080

很多 GNSS 接收机的 Web 管理界面认证和加密能力有限,不建议直接暴露到公网。

19.2 远程连接 GNSS TCP 数据服务

现场服务:

text 复制代码
192.168.1.100:5000/TCP

映射:

text 复制代码
公网入口:15000/TCP
→
192.168.1.100:5000/TCP

19.3 基准站主动回传数据

更常见、更易部署的方式是:

text 复制代码
GNSS基准站
→ 主动连接NTRIP Caster或中心服务器

这种方式不需要外部主动连接现场设备,也通常不需要端口映射。

19.4 4G/5G 路由器后的基准站

若 WAN 地址位于私网或 100.64.0.0/10,通常处于运营商 NAT 后。

可采用:

  • NTRIP Server 主动连接 Caster;
  • VPN;
  • 反向隧道;
  • SD-WAN;
  • 专用 APN;
  • 运营商公网或专网接入。

对于 GNSS 数据回传,终端主动连接中心服务通常比直接开放设备管理端口更容易部署,也更安全。


20. 推荐配置与排查流程

#mermaid-svg-g6MhEc9uc64LgDcL{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}@keyframes edge-animation-frame{from{stroke-dashoffset:0;}}@keyframes dash{to{stroke-dashoffset:0;}}#mermaid-svg-g6MhEc9uc64LgDcL .edge-animation-slow{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 50s linear infinite;stroke-linecap:round;}#mermaid-svg-g6MhEc9uc64LgDcL .edge-animation-fast{stroke-dasharray:9,5!important;stroke-dashoffset:900;animation:dash 20s linear infinite;stroke-linecap:round;}#mermaid-svg-g6MhEc9uc64LgDcL .error-icon{fill:#552222;}#mermaid-svg-g6MhEc9uc64LgDcL .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-g6MhEc9uc64LgDcL .edge-thickness-normal{stroke-width:1px;}#mermaid-svg-g6MhEc9uc64LgDcL .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-g6MhEc9uc64LgDcL .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-g6MhEc9uc64LgDcL .edge-thickness-invisible{stroke-width:0;fill:none;}#mermaid-svg-g6MhEc9uc64LgDcL .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-g6MhEc9uc64LgDcL .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-g6MhEc9uc64LgDcL .marker{fill:#333333;stroke:#333333;}#mermaid-svg-g6MhEc9uc64LgDcL .marker.cross{stroke:#333333;}#mermaid-svg-g6MhEc9uc64LgDcL svg{font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-g6MhEc9uc64LgDcL p{margin:0;}#mermaid-svg-g6MhEc9uc64LgDcL .label{font-family:"trebuchet ms",verdana,arial,sans-serif;color:#333;}#mermaid-svg-g6MhEc9uc64LgDcL .cluster-label text{fill:#333;}#mermaid-svg-g6MhEc9uc64LgDcL .cluster-label span{color:#333;}#mermaid-svg-g6MhEc9uc64LgDcL .cluster-label span p{background-color:transparent;}#mermaid-svg-g6MhEc9uc64LgDcL .label text,#mermaid-svg-g6MhEc9uc64LgDcL span{fill:#333;color:#333;}#mermaid-svg-g6MhEc9uc64LgDcL .node rect,#mermaid-svg-g6MhEc9uc64LgDcL .node circle,#mermaid-svg-g6MhEc9uc64LgDcL .node ellipse,#mermaid-svg-g6MhEc9uc64LgDcL .node polygon,#mermaid-svg-g6MhEc9uc64LgDcL .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-g6MhEc9uc64LgDcL .rough-node .label text,#mermaid-svg-g6MhEc9uc64LgDcL .node .label text,#mermaid-svg-g6MhEc9uc64LgDcL .image-shape .label,#mermaid-svg-g6MhEc9uc64LgDcL .icon-shape .label{text-anchor:middle;}#mermaid-svg-g6MhEc9uc64LgDcL .node .katex path{fill:#000;stroke:#000;stroke-width:1px;}#mermaid-svg-g6MhEc9uc64LgDcL .rough-node .label,#mermaid-svg-g6MhEc9uc64LgDcL .node .label,#mermaid-svg-g6MhEc9uc64LgDcL .image-shape .label,#mermaid-svg-g6MhEc9uc64LgDcL .icon-shape .label{text-align:center;}#mermaid-svg-g6MhEc9uc64LgDcL .node.clickable{cursor:pointer;}#mermaid-svg-g6MhEc9uc64LgDcL .root .anchor path{fill:#333333!important;stroke-width:0;stroke:#333333;}#mermaid-svg-g6MhEc9uc64LgDcL .arrowheadPath{fill:#333333;}#mermaid-svg-g6MhEc9uc64LgDcL .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-g6MhEc9uc64LgDcL .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-g6MhEc9uc64LgDcL .edgeLabel{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-g6MhEc9uc64LgDcL .edgeLabel p{background-color:rgba(232,232,232, 0.8);}#mermaid-svg-g6MhEc9uc64LgDcL .edgeLabel rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-g6MhEc9uc64LgDcL .labelBkg{background-color:rgba(232, 232, 232, 0.5);}#mermaid-svg-g6MhEc9uc64LgDcL .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-g6MhEc9uc64LgDcL .cluster text{fill:#333;}#mermaid-svg-g6MhEc9uc64LgDcL .cluster span{color:#333;}#mermaid-svg-g6MhEc9uc64LgDcL div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-g6MhEc9uc64LgDcL .flowchartTitleText{text-anchor:middle;font-size:18px;fill:#333;}#mermaid-svg-g6MhEc9uc64LgDcL rect.text{fill:none;stroke-width:0;}#mermaid-svg-g6MhEc9uc64LgDcL .icon-shape,#mermaid-svg-g6MhEc9uc64LgDcL .image-shape{background-color:rgba(232,232,232, 0.8);text-align:center;}#mermaid-svg-g6MhEc9uc64LgDcL .icon-shape p,#mermaid-svg-g6MhEc9uc64LgDcL .image-shape p{background-color:rgba(232,232,232, 0.8);padding:2px;}#mermaid-svg-g6MhEc9uc64LgDcL .icon-shape .label rect,#mermaid-svg-g6MhEc9uc64LgDcL .image-shape .label rect{opacity:0.5;background-color:rgba(232,232,232, 0.8);fill:rgba(232,232,232, 0.8);}#mermaid-svg-g6MhEc9uc64LgDcL .label-icon{display:inline-block;height:1em;overflow:visible;vertical-align:-0.125em;}#mermaid-svg-g6MhEc9uc64LgDcL .node .label-icon path{fill:currentColor;stroke:revert;stroke-width:revert;}#mermaid-svg-g6MhEc9uc64LgDcL :root{--mermaid-font-family:"trebuchet ms",verdana,arial,sans-serif;} 否





确认内网IP、协议和服务端口
在局域网内测试
局域网内正常?
修复监听、权限、协议和设备防火墙
固定内网设备地址
确认公网入站路径
入口可达且边界可控?
改用VPN、反向隧道、SD-WAN或APN
配置外部端口和内部目标
配置最小化防火墙放行
使用真正外网测试
访问成功?
逐级检查NAT、路由、防火墙和日志
完成并持续监控

20.1 常用命令

Linux 查看监听:

bash 复制代码
ss -lntup

Windows 查看监听:

powershell 复制代码
netstat -ano

测试 TCP 服务:

bash 复制代码
nc -vz 192.168.1.100 5000

Windows:

powershell 复制代码
Test-NetConnection 192.168.1.100 -Port 5000

抓取 TCP 或 UDP 5000 端口:

bash 复制代码
tcpdump -i eth0 host 192.168.1.100 and port 5000

Wireshark:

text 复制代码
ip.addr == 192.168.1.100 && tcp.port == 5000

若测试 UDP,应把过滤条件改为:

text 复制代码
udp.port == 5000

公网入口应从真正的外部网络测试。部分路由器不支持 NAT 回环,因此在同一局域网内访问自己的公网地址可能失败,但外网访问仍可能正常。


21. 常见失败原因

现象或原因 说明
内网服务未监听 端口映射不能代替服务程序
服务只监听 127.0.0.1 只能本机访问
内网地址变化 映射仍指向旧 IP
TCP/UDP 选择错误 两种协议不能互相替代
防火墙未放行 映射存在但数据被丢弃
双重 NAT 只配置一层转发不够
CGNAT 用户不能配置运营商侧入站映射
外部端口冲突 入口已被其他服务或规则占用
返回路由异常 请求到达但响应走错路径
NAT 回环不支持 内网使用公网地址测试失败
运营商或企业限制 入站端口或协议被过滤
DDNS 地址过期 域名未指向当前入口
UDP 状态超时 长时间无数据后映射或状态失效

22. 安全建议

端口映射会增加公网暴露面,应遵循最小开放原则。

22.1 谨慎暴露管理服务

不建议直接暴露:

  • Telnet;
  • RDP;
  • 数据库端口;
  • 未加密的 HTTP 管理页面;
  • 无认证的自定义服务;
  • 安全能力较弱的 GNSS 接收机后台。

SSH 也应使用密钥认证、来源限制或 VPN 保护。

22.2 修改端口不是安全措施

把内部 SSH 22 映射为外部 25022,只能减少部分默认扫描噪声,不能替代:

  • 强认证;
  • 加密;
  • 来源 IP 白名单;
  • 多因素认证;
  • 漏洞修复;
  • 日志审计。

22.3 优先使用 VPN 或零信任接入

对于设备运维,推荐:

text 复制代码
先建立受控的VPN或零信任连接 → 再访问设备内网地址

而不是直接开放设备管理端口。

22.4 GNSS 设备优先主动连接

基准站可主动连接 NTRIP Caster、中心服务器或 VPN 平台,尽量避免把设备后台直接暴露到公网。


23. 总结

text 复制代码
端口映射 = 公网入口地址、协议和端口 → 内网设备地址、协议和端口

成功通常需要:

text 复制代码
内网服务正常
内网地址稳定
公网入站路径可达
所有NAT层级可控
返回路由正确
防火墙允许
TCP/UDP配置正确
text 复制代码
公网入口可控 + 仅开放少量服务
→ 可以考虑端口映射

CGNAT、4G/5G大内网或安全要求高
→ 优先考虑VPN、反向隧道、SD-WAN、零信任或APN专网

对于 GNSS 基准站和嵌入式终端,能够让设备主动连接中心服务时,通常比直接暴露设备管理端口更容易部署,也更安全。

相关推荐
爱刷碗的苏泓舒8 小时前
网络通信入门:电脑连接 GNSS 定位终端的Wi‑Fi热点下载文件的原理
ssh·网络通信·gnss·嵌入式系统·数据传输·wifi热点·终端调试
爱刷碗的苏泓舒9 小时前
网络通信入门:静态 IP、动态 IP、路由器、交换机与手机热点
网络·智能手机·路由器·网络通信·交换机·手机热点·终端调试
承渊政道7 天前
OneNav书签导航实操:极空间Docker部署、分类整理与公网访问
运维·docker·内网穿透·cpolar·nas·onenav·轻量级部署
星恒讯工业路由器12 天前
公网IP、NAT、端口映射:外网访问家里的“通关攻略”
网络·智能路由器·信息与通信·nat·端口映射·公网ip
勤奋的树懒12 天前
考勤机内网穿透绑定方案
内网穿透·多地拉取考勤数据
DARLING Zero two♡1 个月前
三重加密的异地组网方案:保障个人远程数据传输安全
内网穿透·异地组网·网络工具·远程开发·节点小宝·nas 远程访问·p2p 技术
不昀1 个月前
VOOHU沃虎:使用音频变压器时常见的接地和屏蔽注意事项有哪些?
网络·音视频·以太网·网络通信·电子元器件
ZeroNews内网穿透1 个月前
NAS部署Hermes AI Agent + 零讯内网穿透,实现远程可管理的AI助手
人工智能·安全·ai·内网穿透
wei_shuo1 个月前
无公网 IP 也能跨网互联:8 年技术沉淀的内网穿透 + 异地组网解决方案
内网穿透·异地组网·网络工具·远程开发·节点小宝·nas 远程访问·p2p 技术