Linux有3種隧道。 它們是: IP-in-IP 隧道、 GRE 隧道和非內核隧道(如PPTP)。
1. 關於隧道的幾點注釋
隧道可以用於實現很多非常不一般而有趣的功能。 但如果你的配置有問題,卻也會發生可怕的錯誤。 除非你確切地知道你在做什麼,否則不要把缺省路由指向一個隧道設備。 而且,隧道會增加協定開銷,因為它需要一個額外的IP包頭。 一般應該是每個包增加20個位元組,所以如果一個網路的MTU是1500位元組的話,使用隧道技術後,實際的IP包長度最長只能有1480位元組了。 這倒不是什麼原則性的問題,但如果你想使用隧道技術構建一個比較大規模的網路的話,最好仔細研究一下關于IP包的分片和彙聚的知識。 哦,還有,挖一個隧道最好的方法當然是同時從兩頭挖。
2. IP-in-IP 隧道
這種隧道在Linux上已經實現很長一段時間了。 需要兩個內核模組:ipip.o 和 new_tunnel.o。
比如說你有3個網路:內部網A和B,中間網C(比如說:Internet)。
A網路的情況:
網路位址 10.0.1.0
子網路遮罩 255.255.255.0
路由器 10.0.1.1
路由器在C網路上的位址是172.16.17.18。
B網路的情況:
網路位址 10.0.2.0
子網路遮罩 255.255.255.0
路由器 1
路由器在C網路上的IP位址是 172.19.20.21。
已知C網路已經連通,我們假定它會將所有的資料包從A傳到B,反之亦然。 而且你可以隨便使用Internet。
這就是你要做的:
首先,確認模組是否載入:
insmod ipip.o
insmod new_tunnel.o
然後,在A網路的路由器上輸入:
ifconfig tunl0 10.0.1.1 pointopoint 172.19.20.21
route add -net 10.0.2.0 netmask 255.255.255.0 dev tunl0
並且在B網路的路由器上輸入:
ifconfig tunl0 10.0.2.1 pointopoint 172.16.17.18
route add -net 10.0.1.0 netmask 255.255.255.0 dev tunl0
如果你想中止隧道,輸入:
ifconfig tunl0 down
簡單之極! 但是你不能通過IP-in-IP隧道轉發廣播或者HTTP://www.aliyun.com/zixun/aggregation/9485.html">IPv6資料包。 你只是連接了兩個一般情況下無法直接通訊的IPv4網路而已。 至於相容性,這部分代碼已經有很長一段歷史了,它的相容性可以上溯到1.3版的內核。 據我所知,Linux的IP-in-IP 隧道不能與其他作業系統或路由器互相通訊。 它很簡單,也很有效。 需要它的時候儘管使用,否則就使用GRE。