跳到内容

Linux 网络/IPIP 封装

来自维基教科书,开放的书籍,开放的世界

IPIP 封装

[编辑 | 编辑源代码]

为什么要将 IP 数据报封装在 IP 数据报中?如果您以前从未见过它的应用,这似乎是一件奇怪的事情。好的,以下是一些常见的用例:移动 IP 和 IP 多播。也许最广泛的应用也是最不为人知的,业余无线电。

内核编译选项


            Networking options  --->
                [*] TCP/IP networking
                [*] IP: forwarding/gatewaying
                ....
                <*> IP: tunneling


IP 隧道设备称为 `tunl0`、`tunl1` 等。

"但是为什么呢?". 好吧,好吧。传统的 IP 路由规则规定,一个 IP 网络由一个网络地址和一个网络掩码组成。这会产生一系列连续的地址,这些地址都可以通过单个路由条目进行路由。这非常方便,但这意味着您只能在连接到特定网络时使用特定 IP 地址。在大多数情况下,这都没有问题,但如果您是一个移动网民,那么您可能无法一直保持连接到同一个地方。IP/IP 封装(IP 隧道)允许您通过允许发送到您 IP 地址的数据报被包装起来并重定向到另一个 IP 地址来克服这种限制。如果您知道要在一个不同的 IP 网络上运行一段时间,您可以设置一台机器在您的家庭网络上接受发送到您 IP 地址的数据报,并将它们重定向到您临时实际使用的地址。

隧道网络配置。

[编辑 | 编辑源代码]
      192.168.1/24                          192.168.2/24

          -                                     -
          |      ppp0 =            ppp0 =       |
          |  aaa.bbb.ccc.ddd  fff.ggg.hhh.iii   |
          |                                     |
          |   /-----\                 /-----\   |
          |   |     |       //        |     |   |
          |---|  A  |------//---------|  B  |---|
          |   |     |     //          |     |   |
          |   \-----/                 \-----/   |
          |                                     |
          -                                     -

该图说明了使用 IPIP 封装的另一个可能原因,虚拟专用网络。此示例假设您有两台机器,每台机器都具有一个简单的拨号互联网连接。每个主机仅分配一个 IP 地址。在这些机器的后面是配置有保留 IP 网络地址的一些私有局域网。假设您希望允许网络 A 上的任何主机连接到网络 B 上的任何主机,就像它们与互联网正确连接并具有网络路由一样。IPIP 封装将允许您这样做。请注意,封装并不能解决如何让网络 A 和 B 上的主机与互联网上的任何其他主机通信的问题,您仍然需要像 IP 伪装这样的技巧来解决这个问题。封装通常由充当路由器的机器执行。

Linux 路由器 `A` 将使用以下类似脚本配置


       #!/bin/sh
       PATH=/sbin:/usr/sbin
       mask=255.255.255.0
       remotegw=fff.ggg.hhh.iii
       #
       # Ethernet configuration
       ifconfig eth0 192.168.1.1 netmask $mask up
       route add -net 192.168.1.0 netmask $mask eth0
       #
       # ppp0 configuration (start ppp link, set default route)
       pppd
       route add default ppp0
       #
       # Tunnel device configuration
       ifconfig tunl0 192.168.1.1 up
       route add -net 192.168.2.0 netmask $mask gw $remotegw tunl0


Linux 路由器 `B` 将使用类似的脚本配置


            #!/bin/sh
            PATH=/sbin:/usr/sbin
            mask=255.255.255.0
            remotegw=aaa.bbb.ccc.ddd
            #
            # Ethernet configuration
            ifconfig eth0 192.168.2.1 netmask $mask up
            route add -net 192.168.2.0 netmask $mask eth0
            #
            # ppp0 configuration (start ppp link, set default route)
            pppd
            route add default ppp0
            #
            # Tunnel device configuration
            ifconfig tunl0 192.168.2.1 up
            route add -net 192.168.1.0 netmask $mask gw $remotegw tunl0


命令


            route add -net 192.168.1.0 netmask $mask gw $remotegw tunl0


表示:`将发送到 192.168.1.0/24 的任何数据报封装在一个目标地址为 aaa.bbb.ccc.ddd 的 IPIP 封装数据报中`。

请注意,配置在两端都是相互的。隧道设备使用路由中的 `gw` 作为将要放置收到的数据报的 IP 数据报的目标。该机器必须知道如何对 IPIP 数据报进行解封装,也就是说,它也必须使用隧道设备进行配置。

隧道主机配置。

[编辑 | 编辑源代码]

您不必路由整个网络。例如,您可以只路由单个 IP 地址。在这种情况下,您可以使用其家庭 IP 地址配置 `remote` 机器上的 tunl 设备,并在 A 端仅使用主机路由(和代理 ARP)而不是通过隧道设备的网络路由。让我们适当地重新绘制和修改配置。现在我们只有主机 `B`,它希望充当它完全连接到互联网并也是主机 `A` 支持的远程网络的一部分。


      192.168.1/24

          -
          |      ppp0 =                ppp0 =
          |  aaa.bbb.ccc.ddd      fff.ggg.hhh.iii
          |
          |   /-----\                 /-----\
          |   |     |       //        |     |
          |---|  A  |------//---------|  B  |
          |   |     |     //          |     |
          |   \-----/                 \-----/
          |                      also: 192.168.1.12
          -


Linux 路由器 `A` 将使用以下配置


            #!/bin/sh
            PATH=/sbin:/usr/sbin
            mask=255.255.255.0
            remotegw=fff.ggg.hhh.iii
            #
            # Ethernet configuration
            ifconfig eth0 192.168.1.1 netmask $mask up
            route add -net 192.168.1.0 netmask $mask eth0
            #
            # ppp0 configuration (start ppp link, set default route)
            pppd
            route add default ppp0
            #
            # Tunnel device configuration
            ifconfig tunl0 192.168.1.1 up
            route add -host 192.168.1.12 gw $remotegw tunl0
            #
            # Proxy ARP for the remote host
            arp -s 192.168.1.12 xx:xx:xx:xx:xx:xx pub


Linux 主机 `B` 将使用以下配置


       #!/bin/sh
       PATH=/sbin:/usr/sbin
       mask=255.255.255.0
       remotegw=aaa.bbb.ccc.ddd
       #
       # ppp0 configuration (start ppp link, set default route)
       pppd
       route add default ppp0
       #
       # Tunnel device configuration
       ifconfig tunl0 192.168.1.12 up
       route add -net 192.168.1.0 netmask $mask gw $remotegwtunl0


这种配置更像是移动 IP 应用程序。如果单个主机希望在互联网上漫游并始终维护一个可用的 IP 地址,您应该参考移动 IP 部分,以获取有关在实践中如何处理它的更多信息。

华夏公益教科书