2.5. IP 地址伪装是如何工作的?

以下内容基于 Ken Eves 的原始 IP 地址伪装 FAQ: 这是最简单设置的图示

PPP/ETH/etc.        +------------+                         +-------------+
to ISP provider     |  Linux #1  |       PPP/ETH/etc.      | Anybox      |
                    |            |                         |             |
  <---------- modem1|            |modem2 ----------- modem3|             |
                    |            |                         |             |
    111.222.121.212 |            |           192.168.0.100 |             |
                    +------------+                         +-------------+

在上图中,一台安装了 IP 地址伪装 (IP_MASQUERADING) 的 Linux 机器(标记为 Linux #1)通过 PPP、以太网等方式连接到互联网。 它被分配了一个公网 IP 地址:111.222.121.212。 它还具有另一个网络接口(例如 modem2),用于接收来自 PPP 连接、以太网连接等类型的网络流量。

第二台系统(不一定是 Linux)连接到 Linux #1 机器,并开始其到互联网的网络流量。 这第二台机器 *没有* 从互联网分配到公网 IP 地址,因此它使用了一个 RFC1918 私有地址,例如 192.168.0.100。(更多信息请参见下文)

通过 IP 地址伪装和正确配置的路由,这第二台机器 “Anybox” 可以像直接连接到互联网一样与互联网交互,只有一些小的例外 [稍后会提到]。

引用 Pauline Middelink (Linux IPMASQ 的创始人) 的话:

“不要忘记提及 ‘ANYBOX’ 机器应将 Linux #1 机器配置为默认网关(无论是默认路由还是子网都无关紧要)。 如果 ‘ANYBOX’ 机器通过 PPP 或 SLIP 连接连接,则应将 Linux #1 机器配置为支持所有路由地址的代理 ARP。 但是,代理 ARP 的设置和配置超出了本文档的范围。 请参阅 PPP-HOWTO 以获取更多详细信息。”

以下是关于 IPMASQ 如何简要工作原理的摘录,尽管稍后将对此进行更详细的解释。 这段简短的文字基于 comp.os.linux.networking 上的先前帖子,并已编辑以匹配上述示例中使用的名称

   o I tell machine ANYBOX that my PPP or Ethernet connected Linux box is its 
     gateway.

   o When a packet comes into the Linux box from ANYBOX, it will assign the 
     packet to a new TCP/IP source port number and insert its own IP address 
     inside the packet header, saving the originals.  The MASQ server will 
     then send the modified packet over the PPP/ETH interface onto the 
     Internet.

   o When a packet returns from the Internet into the Linux box, Linux 
     examines if the port number is one of those ports that was assigned 
     above.  If so, the MASQ server will then take the original port and 
     IP address, put them back in the returned packet header, and send 
     the packet to ANYBOX.

   o The host that sent the packet will never know the difference. 

另一个 IP 地址伪装示例

下图给出了一个典型示例

                  Ethernet
                 192.168.0.x
    +----------+
    |          |  
    | A-box    |::::::
    |          |.2   : 
    +----------+     :
                     :      +----------+   PPP/ETH   
    +----------+     :   .1 |  Linux   |     link
    |          |     :::::::| Masq-Gate|:::::::::::::::::::>> Internet
    | B-box    |::::::      |          |  111.222.121.212
    |          |.3   :      +----------+
    +----------+     :
                     :
    +----------+     :
    |          |     :
    | C-box    |::::::
    |          |.4    
    +----------+  

                
    |                       |          |                           >
    | <-Internal Network--> |          | <- External Network ----> >
    |   connected via an    |          |    Connected from the     >
    |   Ethernet hub or     |          |    Linux server to your   > 
    |       switch          |          |    Internet connection    >

在此示例中,我们关注 (4) 个计算机系统。 此外,在最右侧可能还有一些东西,您的 PPP/ETH 连接通过它连接到互联网(调制解调器服务器、DSL DSLAM、有线调制解调器路由器等)。 在互联网上,存在一些远程主机(位于页面最右侧很远的地方),您有兴趣与之通信)。 名为 Masq-Gate 的 Linux 系统是所有内部联网机器的 IP 地址伪装网关。 在此示例中,机器 A-boxB-boxC-box 必须通过 Masq-Gate 才能访问互联网。 内部网络使用多个 RFC-1918 分配的私有网络地址 之一,在本例中,它将是 C 类网络 192.168.0.0。 如果您不熟悉 RFC1918,建议您阅读 RFC 的前几章,但其要点是 TCP/IP 地址 10.0.0.0/8、172.16-31.0.0/12 和 192.168.0.0/16 是保留的。 当我们说 “保留” 时,我们的意思是任何人都可以使用这些地址,只要它们不在互联网上路由。 ISP 甚至被允许使用此私有寻址空间,只要它们将这些地址保留在自己的网络内,并且 *不* 将它们通告给其他 ISP。 不幸的是,情况并非总是如此,但这超出了本 HOWTO 的范围。

无论如何,上图中的 Linux 机器的 TCP/IP 地址为 192.168.0.1,而其他系统的地址为

这三台机器,A-box, B-boxC-box,可以具有多种操作系统中的任何一种,只要它们可以进行 TCP/IP 通信即可。 某些操作系统,例如 Windows 95Macintosh MacTCP 或 OpenTransport,甚至另一个 Linux 机器 都具有连接到互联网上其他机器的能力。 当运行 IP 地址伪装时,伪装系统或MASQ-gate转换所有这些内部连接,使其看起来源自masq-gate本身。 然后,MASQ 进行安排,使返回到伪装连接的数据被中继到正确的始发系统。 因此,内部网络上的系统只能看到到互联网的直接路由,而不知道它们的数据正在被伪装。 这称为 “透明” 连接。

注意:有关以下主题的更多详细信息,请参阅 第 7 章,例如: