端口映射为什么必须写协议
NAT 的端口映射是按协议分开的:TCP 与 UDP 即便使用相同的端口号,也是两条彼此独立、互不覆盖的映射规则。这一点是排障时最常见的盲区——只做了 TCP 映射,依赖 UDP 的业务照样不通,而配置看上去完全正常。此外 ICMP 没有端口概念,要让外网能 ping 通内网地址,需要用不带端口的方式做整机映射,而不是复制一条端口映射改成 ICMP。
基本信息
| 适用场景 | 按业务协议发布内网服务 |
|---|---|
| 核心规则 | 同一端口号的 TCP 与 UDP 是两条独立映射 |
| 华为/H3C 命令 | nat server protocol tcp/udp/icmp global ... inside ... |
| 思科命令 | ip nat inside source static tcp/udp ...(ICMP 需用整机静态映射) |
| 核对方法 | 按业务实际使用的协议逐条确认是否已映射 |
典型使用场景
- 发布 Web 或 SSH 服务:使用 TCP 映射,把外网端口转到内网服务器
- 发布 DNS、部分 VPN 与语音服务:这些业务依赖 UDP,必须单独配置 UDP 映射
- 允许外网探测:需要外网 ping 通内网地址时,配置 ICMP 或整机映射
- 同一服务器多协议业务:Web 页面走 TCP、音视频走 UDP,两条规则都要有
- 排障复核:业务不通时按协议逐条核对映射是否齐全
华为 VRP(H3C 写法一致)
华为 VRP(H3C 写法一致)
[Huawei] interface GigabitEthernet0/0/1
[Huawei-GigabitEthernet0/0/1] nat server protocol tcp global 202.1.1.1 443 inside 192.168.1.20 443
[Huawei-GigabitEthernet0/0/1] nat server protocol udp global 202.1.1.1 443 inside 192.168.1.20 443
[Huawei-GigabitEthernet0/0/1] nat server protocol icmp global 202.1.1.1 inside 192.168.1.20
[Huawei-GigabitEthernet0/0/1] display nat server ! 查看已发布的映射思科 IOS
思科 IOS
SW-CORE-01(config)# ip nat inside source static tcp 192.168.1.20 443 202.1.1.1 443
SW-CORE-01(config)# ip nat inside source static udp 192.168.1.20 443 202.1.1.1 443
! ICMP 需按整机地址做静态映射,会占用一个公网地址
SW-CORE-01(config)# ip nat inside source static 192.168.1.20 202.1.1.2
SW-CORE-01# show ip nat translations | include 443协议选择对照
| 业务类型 | 使用协议 | 映射写法要点 |
|---|---|---|
| 网站与 SSH | TCP | 按端口发布,写清内外端口 |
| DNS 查询 | UDP(部分场景同时用 TCP) | 两种协议都发布才稳妥 |
| VPN 与语音 | UDP 为主 | 漏掉 UDP 映射时表现为能连不通 |
| 外网 ping 探测 | ICMP | 华为/H3C 可直接指定 icmp,思科用整机映射 |
| 文件传输 | TCP | 注意部分协议还需要额外的数据端口 |
业务不通时先确认协议是否齐全,再怀疑后端服务。同一个端口号下 TCP 通、UDP 不通是很常见的现象,原因通常就是只配了其中一条。
思科没有按端口做 ICMP 映射的写法,要允许外网 ping 通内网地址只能做整机静态映射,这会占用一个公网地址。规划地址资源时要把这一条算进去。