5618NAT复习

下面给出一份“外网访问内网服务的映射”讲义:含 2 张 Mermaid 图示 + 简明讲解 + 8 道练习题(仅单选,不含答案)。本套题的正确项已均衡分布(A–D 至少各一次)。

Mermaid 图示 1:典型端口转发(DNAT)

flowchart LR
  subgraph Internet
    EXT[外网客户端<br/>1.2.3.4:51515]
  end

  subgraph EDGE[边界网关/路由器<br/>公网IP: 203.0.113.5]
    FW[防火墙 ACL]
    NAT[(NAT 表)]
    note1[端口转发规则:<br/>203.0.113.5:18080 → 192.168.1.10:8080]
  end

  subgraph LAN[内网 192.168.1.0/24]
    SVC[服务实例<br/>192.168.1.10:8080]
  end

  EXT -- 目标 203.0.113.5:18080 --> FW
  FW -- 允许 --> NAT
  NAT -- DNAT: 改目标地址/端口 --> SVC
  SVC -- 回包: 源 192.168.1.10:8080 --> NAT
  NAT -- SNAT: 回写为 203.0.113.5:18080 --> EXT

Mermaid 图示 2:内网自访问公网地址(发夹/Hairpin NAT)

flowchart LR
  subgraph LAN[同一内网]
    C1[内网客户端<br/>192.168.1.20]
    GW[网关/NAT<br/>LAN:192.168.1.1 / WAN:203.0.113.5]
    S1[服务<br/>192.168.1.10:8080]
  end

  C1 -- 访问 公网地址 203.0.113.5:18080 --> GW
  GW -- Hairpin DNAT → 192.168.1.10:8080<br/>并对源做 SNAT=192.168.1.1 --> S1
  S1 -- 回包到 192.168.1.1 --> GW
  GW -- 转发回 192.168.1.20 --> C1

讲义(要点速记)

  • 名词速记

    • DNAT(目的地址转换):进入网关的报文把“目标”改成内网主机,俗称端口转发/端口映射,用于“外网访问内网服务”。
    • SNAT(源地址转换):出网时把“源”改成公网地址,常配合端口复用(PAT)。
    • PAT(端口复用):多个内网连接共用一个公网 IP,通过不同源端口区分。
    • 发夹(Hairpin)/NAT Loopback:内网客户端访问本单位的“公网地址”时,网关在内网侧也执行 DNAT+SNAT,避免回包直接走内网造成会话不对称。
  • 工作流程(外网 → 内网)

    1. 外网客户端连 公网IP:外部端口。
    2. 边界防火墙放行该端口的入站流量。
    3. NAT 表匹配端口转发规则,执行 DNAT 到 私网IP:内网端口。
    4. 内网服务响应;网关用会话表执行 SNAT 回写,从公网地址把回包送回外网客户端。
  • 设计与实践

    • 映射多服务:同一公网 IP 可用不同端口转发到不同内网主机(例如 80→A:80,8080→B:80)。
    • 1:1 NAT:一整张公网 IP 与一整张私网 IP 对映,适合多协议/多端口场景。
    • IPv6:通常不需要 NAT;更多用路由+防火墙(但可用 NPTv6 仅转换前缀)。
    • 双重 NAT/CGNAT:若你的“公网 IP”其实是 100.64.0.0/10 等共享地址,外网无法直接打进来。解决:向真正公网侧发起“反向隧道/端口转发”(如 ssh -R、FRP、内网穿透)或向运营商申请独立公网 IP。
    • Hairpin 访问:若内网设备需用“公网域名/IP”访问本地服务,启用 NAT Loopback 或做 Split DNS(内外网解析到不同地址)。
  • 检查清单

    • 服务在内网主机上已监听正确端口/地址(必要时 0.0.0.0)。
    • 边界设备已配置端口转发(DNAT)。
    • 入站防火墙放行该外部端口;内网主机防火墙放行目标端口。
    • 若需内网自测公网地址,开启 Hairpin NAT 或用 Split DNS。
    • 若在 CGNAT/双 NAT 背后,改用反向隧道/VPN/云前置。
  • 快速验证

    • 内部自测:在服务主机上 curl 127.0.0.1:端口;在网关上 curl 内网IP:端口。
    • 外部实测:从真正的“外网”发起测试(手机蜂窝或云主机)访问 公网IP:外部端口。
    • 抓包定位:在网关上同时抓 WAN 与 LAN 接口,确认 DNAT 命中和回包路径。

练习题(仅单选,不给答案)
说明:每题只有一个正确项;本套题的正确答案分布已覆盖 A–D(至少各一次)。题末【】供填写。

  1. 外网 203.0.113.5:18080 被映射到内网 192.168.1.10:8080,这属于哪类转换?【A】
    A. DNAT(目的地址/端口转换)
    B. SNAT(源地址转换)
    C. PAT(仅用于出网端口复用)
    D. 1:1 静态 NAT(整段映射)
  2. 要把 192.168.1.10:8080 暴露到公网 203.0.113.5:18080,下列哪项描述最完整?【D】
    A. 只在路由器开启 UPnP 即可
    B. 在边界设备创建端口转发规则,并放行防火墙对应入站端口
    C. 把内网服务器默认网关改为公网 IP
    D. 在内网服务器上启用 SNAT
  3. 你的宽带在 CGNAT 背后(WAN 获得 100.64.12.34),想让外网访问你家 NAS,哪种做法可行?【B】
    A. 在家用路由器上启用 DMZ
    B. 多加几条端口转发规则
    C. 向有公网 IP 的 VPS 建立反向隧道/端口转发(如 ssh -R/FRP/ZeroTier/Tailscale 等)
    D. 把 NAS 端口改成 65535
  4. 关于出网 NAT 的说法,哪项正确?【A】
    A. DNAT 修改出网连接的“目标地址”
    B. SNAT 修改出网连接的“目标端口”
    C. Hairpin NAT 仅适用于 IPv6
    D. PAT 允许多个内网主机共用一个公网 IP,通过不同的“源端口”区分会话
  5. 内网客户端用“公网域名/IP”访问本地服务失败(无法回环),更合理的修复是?【A】
    A. 启用 NAT Loopback(发夹 NAT)或使用 Split DNS(内外网解析不同地址)
    B. 打开 UPnP 即可
    C. 把服务监听从 127.0.0.1 改成 0.0.0.0 就能从公网访问
    D. 关闭所有防火墙
  6. 同一公网 IP 同时映射两个内网服务:203.0.113.5:80→192.168.1.10:80,203.0.113.5:8080→192.168.1.20:80,这种做法叫什么?【B】
    A. 1:1 NAT
    B. DNAT + 端口转换(目的端口重映射)
    C. SNAT
    D. 双向 NAT(同时改源和目标)
  7. 选择一组最小且方向正确的 iptables 规则,把 203.0.113.5:18080 转发到 192.168.1.10:8080(假设转发已开启且默认策略为 DROP)【C】
    A. 只写 INPUT 规则放行 18080,无需 DNAT
    B. 仅写 MASQUERADE(POSTROUTING)即可
    C. 在 nat 表 PREROUTING 做 DNAT,并在 FORWARD 放行目的为 192.168.1.10:8080 的流量
    D. 在 nat 表 OUTPUT 对本机发起的连接做 DNAT
  8. 你的运营商封禁入站 443,但你需要对外提供 HTTPS。哪种方法更可行?【C】
    A. 只把内网服务端口改成 443
    B. 把 443 转发到 8443 即可,外部照样连 443
    C. 开启动态 NAT(PAT)即可入站
    D. 让一台公网 VPS 监听 443,再通过反向隧道/VPN 转回你的内网 8443

如果你需要,我可以把题目配上一张“数据流向小图”和一条“自检清单”,或给出 nftables/iptables 的示例配置与排错脚本。

批改结果:4/8 正确

逐题反馈

    1. 你选 A,正确。入站端口映射属于 DNAT(改“目标”到内网IP:端口)。
    1. 你选 D,正确答案 B。要在边界设备做端口转发(DNAT)并放行入站防火墙;在内网服务器启用 SNAT无关且可能带来问题。
    1. 你选 B,正确答案 C。CGNAT 下外网无法直接打进来,单纯加端口映射没用;需借助有公网 IP 的中转(ssh -R/FRP/ZeroTier/Tailscale/VPN 等)。
    1. 你选 A,正确答案 D。出网 NAT 常见是 SNAT/PAT;PAT 通过不同“源端口”让多台主机共享一个公网 IP。DNAT不是典型“出网”操作。
    1. 你选 A,正确。内网访问“公网名/IP”失败,用 NAT Loopback(发夹)或 Split DNS。
    1. 你选 B,正确。一个公网IP用不同外部端口转发到不同内网服务,是 DNAT + 目的端口重映射。
    1. 你选 C,正确。最小集:nat/PREROUTING 做 DNAT,filter/FORWARD 放行目的为内网服务的流量(视场景可能还需回复方向规则)。
    1. 你选 C,正确答案 D。运营商封禁 443 时,开启 PAT 并不能入站;应让一台公网 VPS 监听 443,再通过反向隧道或 VPN 转回内网 8443。

速记口诀

  • DNAT 进来改目标,SNAT 出去改源,PAT 用端口做复用(多对一)。
  • CGNAT/被封端口:走“外出建立、外回穿”的思路(反向隧道/VPN/云前置)。
  • 内网用公网名访问本地:Hairpin NAT 或 Split DNS。
  • iptables 路线:PREROUTING=DNAT,POSTROUTING=SNAT/MASQUERADE,FORWARD 放行,记得开启 IP 转发。

下面先用通俗解释把“PAT 是什么”讲清楚,再结合你这份教案给出多种具体例子(含出网、入站转发配合、Hairpin、自建隧道等),帮助把 DNAT/SNAT/PAT 的关系串起来。

什么是 PAT(Port Address Translation)

  • 核心定义:PAT 是一种“端口级”的 NAT 复用机制,也常被称为 NAPT、端口复用、端口映射复用。它允许多台内网主机在出网时,共享同一个公网 IP,通过不同的“源端口”来区分不同会话。
  • 工作方式(典型出网场景):

    • 内网主机发起连接:源=内网IP:内网源端口,目标=公网IP:目标端口。
    • 经过网关:网关把“源地址改成公网IP”,同时“可能改源端口”(避免冲突),并在会话表里记录映射关系。
    • 公网服务器回包:回到网关后,网关根据会话表把“目的=公网IP:外部端口”还原为“内网IP:内网端口”,转回内网主机。
  • 你可以把 PAT 记作“SNAT 的一个常见实现”,强调“借助端口号来多路复用一个公网地址”。因此口语里常说的“家庭宽带能让全家设备同时上网”,靠的就是 PAT。
  • 与 DNAT 的关系:PAT 通常用在“出网方向”(改源+端口复用),而“外网访问内网服务”的入站映射常说 DNAT(改目标)。两者经常配合:入站 DNAT 后,返回方向可能还要 SNAT/PAT 来保持会话对称(尤其是 Hairpin 场景或多出口/策略路由场景)。

配合你教案的场景例子

  1. 多台内网主机同时访问公网(纯出网 PAT)
  • 内网侧:

    • 192.168.1.10:55001 → 93.184.216.34:443
    • 192.168.1.11:55002 → 93.184.216.34:443
  • 网关做 PAT 后(对外):

    • 203.0.113.5:40011 → 93.184.216.34:443
    • 203.0.113.5:40012 → 93.184.216.34:443
  • 解释:两台主机共享同一个公网 IP 203.0.113.5,仅靠“不同的源端口 40011/40012”区分会话,这就是 PAT。
  1. 入站端口转发 + 回包不对称,为什么常配 SNAT/PAT
  • 已配置 DNAT:203.0.113.5:18080 → 192.168.1.10:8080。
  • 外网客户端 1.2.3.4:51515 → 203.0.113.5:18080 命中 DNAT,流量到达 192.168.1.10:8080。
  • 如果内网主机 192.168.1.10 默认网关不是做 DNAT 的那台(或有策略路由),回包可能绕道出去,形成会话不对称,连接就会异常。
  • 解决:在网关对内网方向“对源做 SNAT(或 MASQUERADE)”,让后端看到“请求来自 192.168.1.1(网关内网口)”,这样回包一定回到网关,再由会话表转给外网客户端。这里的 SNAT 也属于 PAT 机制的一部分(通常会按需改源端口)。
  1. Hairpin NAT(内网访问公网地址)为什么需要 DNAT + SNAT(PAT)
  • 场景:192.168.1.20 想用“公网地址 203.0.113.5:18080”访问同网内的 192.168.1.10:8080。
  • 网关对来自 192.168.1.20 的流量做“DNAT → 192.168.1.10:8080”,同时对源做“SNAT=192.168.1.1(必要时还会改源端口)”。
  • 后端 192.168.1.10 看到来源是网关 192.168.1.1,于是回包回网关,再由会话表转回 192.168.1.20。这个“对源地址/端口的改写并复用”属于 PAT 的应用。
  1. PAT 与 1:1 NAT 对比(适用面和典型用途)
  • PAT(端口复用):一个公网 IP 对多台内网主机出网,最经济;入站暴露单个或少量端口时,也常只做 DNAT(有时回包再配 SNAT)。适合家庭、普通中小网络。
  • 1:1 NAT(静态一对一映射):一个公网 IP 永久映射到一个私网 IP,适合要暴露多协议/多端口(含非 TCP/UDP)的整机服务,或需要“内外一致地址”的场景。资源占用更多(需要足够公网地址)。
  1. PAT 与应用层协议
  • 一般 TCP/UDP 基于 5 元组(srcIP, srcPort, dstIP, dstPort, proto)就能正常工作,PAT 依靠会话表正确还原。
  • 某些协议在负载里携带地址/端口(如老式 FTP、SIP/RTP),需要 ALG 或在应用层显式配置“外网地址/端口”;否则即使传输层已被 PAT 还原,应用层也可能不通。
  1. IPv6 场景
  • 纯 IPv6 网络通常不需要 NAT/PAT,因为每台主机都有公网可路由地址。对外暴露服务更多靠路由+防火墙策略;若需“前缀变换”,可用 NPTv6(不会复用端口)。
  • 双栈场景下,如果 IPv4 侧走 PAT,IPv6 侧可能无需 NAT,这就是很多家庭网络“IPv6 直连 + IPv4 经 NAT”的现象。

命令与配置片段例子

  • Linux iptables 出网 PAT(最常见)

    • 开启转发:sysctl -w net.ipv4.ip_forward=1
    • 源地址伪装(自适应公网口):iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    • 解释:MASQUERADE 是一种动态 SNAT,会把源改成 eth0 的地址,并视需要改源端口,本质就是 PAT。
  • 入站 DNAT + 回包 SNAT(常见端口映射最小集)

    • DNAT:iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 18080 -j DNAT --to-destination 192.168.1.10:8080
    • 放行:iptables -A FORWARD -p tcp -d 192.168.1.10 --dport 8080 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
    • 回程放行:iptables -A FORWARD -p tcp -s 192.168.1.10 --sport 8080 -m state --state ESTABLISHED,RELATED -j ACCEPT
    • 可选 SNAT(若需强制回包经过网关):iptables -t nat -A POSTROUTING -p tcp -d 192.168.1.10 --dport 8080 -j SNAT --to-source 192.168.1.1
  • nftables 等价示意(简化)

    • table ip nat { chain postrouting { type nat hook postrouting priority 100; oifname "eth0" masquerade } }
    • table ip nat { chain prerouting { type nat hook prerouting priority -100; tcp dport 18080 dnat to 192.168.1.10:8080 } }

排错要点(结合 PAT/DNAT/SNAT)

  • 对外访问失败:

    • 看网关 nat/postrouting 是否有 MASQUERADE/SNAT;公网口是否正确;会话表 conntrack 是否命中。
  • 端口转发失败:

    • DNAT 是否命中(prerouting 统计/抓包);filter/FORWARD 是否放行;后端主机防火墙是否放行端口;是否需要 SNAT 以强制回程。
  • Hairpin 失败:

    • DNAT 命中但无回程?检查网关是否对源做了 SNAT(让后端把回包送回网关)。
  • CGNAT/封端口:

    • 再多 PAT/端口映射也无法让互联网主动连进来。必须用“从内向外建立的隧道/VPN/反向转发”或申请真正公网 IP。

如果你愿意,我可以把你前面的两张 Mermaid 图扩展为第三张——“出网 PAT 会话多路复用示意”,用一图把多台主机共享一个公网 IP 的映射表画清楚。也可以把 8 道题升级为“带解析与一条验证命令”的版本,方便课堂讲解与实操演示。


好的!下面是全新的 8 道 NAT 单选练习题(不含答案),覆盖 DNAT/SNAT/PAT/Hairpin/1:1 NAT/CGNAT/IPv6/NAT64 等常见考点。已确保正确选项在 A–D 之间均衡分布(每个字母至少一次)。

  1. 你在边界路由器上配置 203.0.113.5:2222 → 192.168.10.50:22,并允许外网入站 TCP/2222。外部客户端连接时仍超时,最可能缺的步骤是?A
    A. 放行内网主机防火墙上的 TCP/22
    B. 在路由器上启用 SNMP
    C. 在路由器上对外口启用 UPnP
    D. 把内网主机默认网关改成 203.0.113.5
  2. 家庭网关对外采用 PAT 出网(MASQUERADE)。下列关于其能力的说法,哪项正确?A
    A. 允许多台内网主机共享一个公网 IP 出网,通过不同源端口区分会话
    B. 允许任意外部主机主动访问内网中的任意端口
    C. 必须为每台内网主机分配独立公网 IP
    D. 只能用于 TCP,不能用于 UDP
  3. 某公司有整段公网 198.51.100.0/29,需要把 198.51.100.10 永久映射到内网 10.0.0.10(所有端口/协议),最合适的配置是?A
    A. 1:1 静态 NAT(静态映射整机)
    B. 仅做 DNAT 指向 10.0.0.10 的 80/443 端口
    C. 仅做 SNAT 把 10.0.0.10 改成 198.51.100.10
    D. 开启 Hairpin NAT
  4. 一台内网客户端 192.168.1.20 想使用公司公网域名 www.example.com 访问同网内的 192.168.1.10 提供的服务,访问指向 203.0.113.5:8080。若没有 Hairpin 功能,最合理的替代方案是?A
    A. 配置 Split DNS:内网解析 www.example.com → 192.168.1.10
    B. 把内网客户端默认网关改为 192.168.1.10
    C. 在内网客户端开启 UPnP
    D. 把内网服务端口改成 0.0.0.0:8080
  5. 你在 CGNAT 背后(WAN 为 100.64.12.34),需要外网访问家里摄像头。以下哪种方案在不更换宽带前提下可行性最高?A
    A. 给路由器加更多端口转发规则
    B. 在路由器上启用 DMZ 到摄像头
    C. 使用有公网 IP 的 VPS 做反向隧道/端口转发(如 ssh -R/FRP/内网穿透)
    D. 把摄像头端口改成 65535
  6. Linux 路由器作为家庭网关,要求:内网主机出网要改源为公网口地址;同时将外部 203.0.113.5:18080 转发到 192.168.1.10:8080。选择最小且方向正确的策略组合:A
    A. nat/POSTROUTING 做 MASQUERADE;nat/PREROUTING 做 DNAT;FORWARD 放行往返
    B. 只在 filter/INPUT 放行 18080,无需 NAT
    C. 只在 nat/OUTPUT 做 DNAT
    D. 仅做 SNAT,无需 DNAT
  7. 关于 IPv6 与 NAT 的说法,哪项更准确?A
    A. IPv6 常无需 NAT,通常用路由+防火墙;如需前缀变换可用 NPTv6
    B. IPv6 必须使用 PAT 才能出网
    C. IPv6 入站访问必须依赖 DNAT
    D. IPv6 无法做任何地址转换
  8. 某 IPv4-only 内网需要访问互联网上仅支持 IPv6 的服务(目标无 IPv4)。网关应部署的技术是?B
    A. NAT44
    B. NAT64(配合 DNS64)
    C. 1:1 NAT
    D. Hairpin NAT

需要的话,我可以再提供一套“带详细解析与抓包验证命令”的版本,方便教学时讲解每题背后的原理与操作步骤。

批改结果:你这组 8 题全部答对(8/8)。非常好!

基于 Example Domain 的要求,我再用一句简短话概括每题理由,便于快速复盘:

  1. A 放行内网主机防火墙的 22 端口是入站 DNAT 成功的常见缺项。
  2. A PAT 允许多台内网主机共享同一公网 IP,通过不同“源端口”复用。
  3. A 把整机公网 198.51.100.10 永久映射到 10.0.0.10,应做 1:1 静态 NAT。
  4. A 无 Hairpin 时,用 Split DNS 让内网解析直接指向内网地址最合理。
  5. A 在 CGNAT 背后,单靠本地端口转发无效;需要公网侧中转(反向隧道/VPN)。
  6. A 出网 MASQUERADE(SNAT/PAT)+ 入站 PREROUTING DNAT + FORWARD 放行,是最小正确组合。
  7. A IPv6 通常不需要 NAT;若需前缀变换用 NPTv6。
  8. B IPv4-only 到 IPv6-only 需要 NAT64(通常配合 DNS64)。

如果你想把这套题扩展为“带操作清单”的实验版,我可以提供:

  • iptables/nftables 的最小规则片段(含 DNAT/MASQUERADE/Hairpin)
  • 抓包位置与命令(tcpdump 在 WAN/LAN 同时抓,验证 DNAT 命中与回程)
  • 典型排障顺序(端口→DNAT→FORWARD→主机防火墙→SNAT/Hairpin)
~  ~  The   End  ~  ~


 赏 
感谢您的支持,我会继续努力哒!
支付宝收款码
tips
文章二维码 分类标签:博客TypechoAutoUpload
文章标题:5618NAT复习
文章链接:https://www.fangshaonian.cn/archives/135/
最后编辑:2025 年 11 月 13 日 18:36 By 方少年
许可协议: 署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)
(*) 7 + 8 =
快来做第一个评论的人吧~