是什么

  • 定义NAT(网络地址转换)通过将专用(私有)IP地址转换为公网(全局)IP地址,解决IPv4地址枯竭并实现内外网通信;结合传输层端口号的NAPT/静态端口映射可实现外网主动访问内网特定服务。

  • 大白话:私网就像大学宿舍楼,大家在宿舍里的代号都是“1号床、2号床”(私有IP地址冲突);宿舍楼大门只有一个收发室地址(公网IP)。你想上网买东西,收发室帮你换成大门地址发出去(源NAT);外网想给你送外卖,必须写“收发室转80号柜”(端口映射/目的NAT),外卖员才能精准投递到对应床位。

核心内容

1. 基础认知补充(为什么会有这道题的奇怪现象?)

  • 私有地址不可公网路由192.168.0.0/1610.0.0.0/8172.16.0.0/12 是专用私网地址。互联网路由器遇到私网目的IP直接丢弃。

  • 地址重叠/冲突:全世界成千上万个家庭和局域网都在用 192.168.1.1,它们在各自局域网内是唯一的,但在公网看来,必须全部披上各自网关的公网IP外衣

2. 第一问剖析:到底需要配什么?为什么?

视角一:客户端(H2/H3)想发数据到外网,需要配什么?

  • 现实困惑:H2 自己的 IP 是 192.168.1.2,它要发包给外网,怎么知道第一步交给谁?

  • 底层原理

    • 计算机拿目的 IP 和自己的子网掩码做与运算:如果目的 IP 和自己在同一个子网,直接在局域网内发广播(ARP)找人;如果不在同一个子网(跨网段),电脑必须把包无脑交给“班主任/保安”(即默认网关)

    • 题目特意交代了“局域网采用静态 IP 地址配置”。如果是动态(DHCP),网关会自动下发;但静态必须人工手动填写。

    • 结论 1:H2 和 H3 必须配置 默认网关(Default Gateway)为 192.168.1.1(路由器 R3 的内网接口)。否则跨网数据包在本地就报错卡死,根本发不出去。

视角二:Web 服务器藏在私网里,外网怎么找到它?

  • 现实困惑:外网机器(包括跨路由的 H2)根本不知道 192.168.1.2 是谁,即使知道了往公网发,公网路由器也直接丢弃。

  • 底层原理

    • 外部世界能看到的,只有路由器 R2 露在公网的那张脸:公网 IP 203.10.2.2

    • 要让别人访问到内网的 Web 服务,就必须在 R2 上贴一张“告示”(静态映射条目):只要外网有人向我的 203.10.2.2:80 发请求,我就无条件把这个包的目的地改成内网的 192.168.1.2:80

    • 结论 2:必须在路由器 R2 的 NAT 表中配置一条静态端口映射条目

      • 外网:IP: 203.10.2.2端口: 80(HTTP协议默认端口)

      • 内网:IP: 192.168.1.2端口: 80

3. 第二问剖析:数据报 P 全程 IP 变迁链条(为什么是这样?)

核心黄金法则

  • 普通路由器转发:只查路由表换 MAC 帧头,IP 首部的源 IP 和目的 IP 绝对不变

  • NAT 路由器(出私网):发生 SNAT(改源 IP),把私网源 IP 换成公网出口 IP。

  • NAT 路由器(进私网):发生 DNAT(改目的 IP),把公网目的 IP 换成内网真实服务 IP。

[H2: 192.168.1.2] 
      │ (1) H2发出:源 192.168.1.2 -> 目的 203.10.2.2
      ▼
[NAT路由 R3] 
      │ (2) 经过R3出境(SNAT):源 203.10.2.6 -> 目的 203.10.2.2
      ▼
[普通路由 R1] 
      │ (3) 经过R1普通转发:IP完全不变
      ▼
[NAT路由 R2] 
      │ (4) 经过R2入境(DNAT):源 203.10.2.6 -> 目的 192.168.1.2
      ▼
[Web服务器: 192.168.1.2]

阶段 1:H2 刚发出的那一瞬间

  • 源 IP = 192.168.1.2:发件人是 H2 自己。

  • 目的 IP = 203.10.2.2

    • 为什么目的不是 192.168.1.2?

    • 如果 H2 写目的地址是 192.168.1.2,H2 一看“咦?目的 IP 跟我自己一模一样!”,它会认为是在访问本机环回,或者发本地 ARP 广播,根本不会送给网关,这辈子都访问不到对面的服务器!因此,H2 访问的必须是服务对外公布的公网门牌号 203.10.2.2

阶段 2:经过 R3 转发后(离开右侧私网,进入公网)

  • 源 IP = 203.10.2.6

    • R3 发现这个包要送往外网,执行 SNAT(源地址转换)。如果不把源 IP 改成公网 IP,就算包到了对方手里,对方回信时也无法把信送回一个私网地址。因此 R3 把源 IP 披上了自己的公网皮:203.10.2.6

  • 目的 IP = 203.10.2.2:目的地始终是指向 R2 的公网地址,保持不变。

阶段 3:经过 R1 转发时

  • R1 只是个普通中继路由器,只查路由表,不改 IP 报头(源、目的 IP 均保持 203.10.2.6 203.10.2.2)。

阶段 4:经过 R2 转发后(离开公网,进入左侧私网)

  • 源 IP = 203.10.2.6:发件人是谁依然明确记录,保持不变。

  • 目的 IP = 192.168.1.2

    • 包到达 R2 外网口,R2 检查端口是 80,查到静态 NAT 表规则:“找我的 80 端口其实是找内网的 192.168.1.2:80”,执行 DNAT(目的地址转换),把目的地改成内网 Web 服务器真实的 IP 192.168.1.2,顺着交换机 S1 发送给服务器。

例题

  • 题目

    某校园网有两个局域网,通过路由器 R1、R2 和 R3 互连后接入 Internet,S1 和 S2 为以太网交换机。局域网采用静态 IP 地址配置,路由器部分接口以及各主机的 IP 地址如下图所示。

    (拓扑结构见原题:左侧通过 R2 连 Web 服务器 192.168.1.2 和 H1 192.168.1.3,R2 外网口为 203.10.2.2/30;右侧通过 R3 连 H2 192.168.1.2 和 H3 192.168.1.3,R3 外网口为 203.10.2.6/30)。

    1. 为使 H2 和 H3 能够访问 Web 服务器(使用默认端口号),需要进行什么配置?

    2. 若 H2 主动访问 Web 服务器时,将 HTTP 请求报文封装到 IP 数据报 P 中发送,则 H2 发送的 P 的源 IP 地址和目的 IP 地址分别是什么?经过 R3 转发后,P 的源 IP 地址和目的 IP 地址分别是什么?经过 R2 转发后,P 的源 IP 地址和目的 IP 地址分别是什么?

  • 分析

    1. 客户端访问外网需配置网关指引下一跳;服务端被外网访问需在边界路由器 R2 上做静态端口映射(针对 HTTP 80 端口)。

    2. 梳理完整的 IP 变迁链条:H2 发包(目的为 R2 外网口) R3 改源 IP(SNAT) R2 改目的 IP(DNAT)送达服务器。

  • 答案

    (1)

    需要进行的配置:

    1. 在路由器 R2 的 NAT 转换表中添加静态转换项

      • 外网 IP 地址:203.10.2.2,外网端口号:80

      • 内网 IP 地址:192.168.1.2,内网端口号:80

    2. 在主机 H2 和 H3 上配置默认网关

      • 默认网关 IP 地址为 192.168.1.1

    (2)

    • H2 发送的 P

      • 源 IP 地址:192.168.1.2

      • 目的 IP 地址:203.10.2.2

    • 经过 R3 转发后

      • 源 IP 地址:203.10.2.6

      • 目的 IP 地址:203.10.2.2

    • 经过 R2 转发后

      • 源 IP 地址:203.10.2.6

      • 目的 IP 地址:192.168.1.2

⚠️ 易错点

Warning

  • 第一问漏配“默认网关”:看到题只顾着想 NAT 表,完全忽视了题干给的提示“静态 IP 地址配置”。主机没有网关,连局域网都出不去。

  • 目的 IP 误填对端内网 IP:以为 H2 访问 Web 服务器就直接填 Web 服务器的 192.168.1.2内网主机向外发起访问时,绝不可能知道对方的私网 IP,更不能填跟自己撞车的 IP,目的 IP 必须填对端路由器的公网 IP。

  • 混淆 SNAT 与 DNAT 的发生位置

    • 出自己的私网走 NAT:改的是发件人(改源 IP,把内网 IP 换成自己的公网出口 IP)。

    • 进对方的私网走 NAT:改的是收件人(改目的 IP,把自己的公网 IP 还原成真实内网服务器 IP)。