7.3. IPSEC トンネル

これまでのところは、 通信の両端が直接 IPSEC を理解している、 いわゆる IPSEC の「転送 (transport)」モードのみを見てきました。 しかし通常は IPSEC を理解するマシンばかりではないので、 ルータのみに IPSEC を喋らせ、 その後ろにあるネットワークの作業を肩代わりさせることが必要となります。 こちらは「トンネルモード」と呼ばれています。

この設定はとても簡単です。10.0.0.216 から 130.161.0.0/16 へ向かうトラフィックを すべて 10.0.0.11 経由でトンネルさせるには、 以下を 10.0.0.216 で実行するだけです。
#!/sbin/setkey -f
flush;
spdflush;

add 10.0.0.216 10.0.0.11 esp 34501
	-m tunnel
	-E 3des-cbc "123456789012123456789012";

spdadd 10.0.0.0/24 130.161.0.0/16 any -P out ipsec
           esp/tunnel/10.0.0.216-10.0.0.11/require;
ここでは '-m tunnel' に注目してください。これが最重要の部分です。 これは最初に ESP 暗号化された SA をトンネルの両端で設定します。

次に実際のトンネルを設定します。これはカーネルに対し、 10.0.0.24 から 130.161.0.0 に向かう経路のトラフィックを 暗号化するよう指定しています。 さらに、続いてこのトラフィックは 10.0.0.11 に出荷されるのです。

10.0.0.11 でも少々設定が必要です。
#!/sbin/setkey -f
flush;
spdflush;

add 10.0.0.216 10.0.0.11 esp 34501
	-m tunnel
	-E 3des-cbc "123456789012123456789012";

spdadd 10.0.0.0/24 130.161.0.0/16 any -P in ipsec
           esp/tunnel/10.0.0.216-10.0.0.11/require;
これは、'-P out' が '-P in' に変わったことを除けば、まったく同じものです。 これまでの例と同様、ここでの例も一方向のトラフィックのみを設定しました。 トンネルの反対方向を完成させるのは、読者の課題としておきます。

この設定は別名「代理 ESP」とも呼ばれています。 こちらのほうが少々わかりやすいでしょうか。

Note: IPSEC トンネルには、カーネルで IP Forwarding を有効にしておく必要があります!