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