5.2. IP in IP トンネリング

Linux では、このトンネルの利用はかなり昔から可能でした。 2 つのカーネルモジュール、ipip.o と new_tunnel.o が必要です。

いま 3 つのネットワークがあるとしましょう。 内部ネットワーク A と B、そしてその中間にあるネットワーク C (あるいはインターネット) です。 ネットワーク A は:

network 10.0.1.0
netmask 255.255.255.0
router  10.0.1.1

このルータのネットワーク C 側のアドレスは 172.16.17.18 です。

ネットワーク B では:

network 10.0.2.0
netmask 255.255.255.0
router  10.0.2.1

このルータのネットワーク C 側のアドレスは 172.19.20.21 です。

ここではネットワーク C は、 A から B へのパケット (およびその逆) をすべて通すとします。 ここにはインターネットを利用することもできます。

では作業に入ります:

まず最初にモジュールをインストールします。

modprobe ipip.o
modprobe 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

あっという間に終わりました。ただし、ブロードキャストや IPv6 のトラフィックを IP-in-IP トンネルを通してフォワードすることはできません。 単に通常では通信ができない 2 つの IPv4 ネットワークを接続しただけ、です。 互換性に関して言いますと、このコードは長いこと存在しているため、 ずっと昔の 1.3 カーネルくらいまでは互換です。しかし私が知る限り、 Linux の IP-in-IP トンネルは他の OS やルータと一緒には動作しません。 これはシンプルで、ちゃんと働きます。これでなければならない理由があるなら 使えばいいですし、そうでなければ GRE を使うといいでしょう。