跳到內容

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 部分,以獲取有關在實踐中如何處理它的更多資訊。

華夏公益教科書