2.7.5. Openswan を使用したホスト間の VPN

Openswan および と呼ばれる 2 つのホスト間で IPsec VPN を作成するよう設定するには、leftのホスト上で root で以下のコマンドを実行して新たな生 RSA 鍵のペアを作成します。
~]# ipsec newhostkey --configdir /etc/ipsec.d \
        --output /etc/ipsec.d/ipsec.secrets --bits 4096
Generated RSA key pair using the NSS database
これで ホストの RSA 鍵ペアが生成されます。エントロピーが低い仮想マシンでは特に、RSA 鍵の生成プロセスは時間が長くかかります。
公開鍵を表示するには、 と呼ばれるホスト上で root で以下のコマンドを実行します。
~]# ipsec showhostkey --left
ipsec showhostkey nss directory showhostkey: /etc/ipsec.d
# rsakey AQO+NIez4
leftrsasigkey=0sAQO+NIez4bxcib5FPjT3jF3S6Mrz9NACaD5B4wPXFuhxQmy6c8GNX1A9yB0vvLWon [...] W8rQIf4NrL6eGd5r9HwIPT7
以下で説明するように、この鍵を設定ファイルに追加する必要があります。
と呼ばれるホスト上で root で以下のコマンドを実行します。
~]# ipsec newhostkey --configdir /etc/ipsec.d \
        --output /etc/ipsec.d/ipsec.secrets --bits 4096
Generated RSA key pair using the NSS database
公開鍵を表示するには、 と呼ばれるホスト上で root で以下のコマンドを実行します。
~]# ipsec showhostkey --right
# rsakey AQO3fwC6n
rightrsasigkey=0sAQO3fwC6nSSGgt64DWiYZzuHbc4 [...] D/v8t5YTQ==
この鍵を設定ファイルに追加する必要があります。
このホスト間のトンネル用に設定ファイルを作成するには、上記の leftrsasigkey=rightrsasigkey= の各行を /etc/ipsec.d/ ディレクトリー内のカスタム設定ファイルに記載します。Openswan がカスタム設定ファイルを読み取るようにするには、root でエディターを実行し、メイン設定ファイルである /etc/ipsec.conf で以下の行の # 文字を削除します。これで、以下の行が有効になります。
include /etc/ipsec.d/*.conf
root でエディターを使用して以下の形式で適切な名前のファイルを作成します。
/etc/ipsec.d/my_host-to-host.conf
以下のようにファイルを編集します。
conn mytunnel
    leftid=@west.example.com
    left=192.1.2.23
    leftrsasigkey=0sAQOrlo+hOafUZDlCQmXFrje/oZm [...] W2n417C/4urYHQkCvuIQ==
    rightid=@east.example.com
    right=192.1.2.45
    rightrsasigkey=0sAQO3fwC6nSSGgt64DWiYZzuHbc4 [...] D/v8t5YTQ==
    authby=rsasig
    # load and initiate automatically
    auto=start
左右両方のホストに同一の設定ファイルを使用することができます。ホストはかを自動検出します。leftrsasigkey の値をのホストから、rightrsasigkey の値をのホストから取得していることを確認してください。
ipsec が起動していることを確認します。
~]# service ipsec start
ipsec_setup: Starting Openswan IPsec U2.6.32/K2.6.32-412.el6.x86_64...
ipsec_setup: /usr/libexec/ipsec/addconn Non-fips mode set in /proc/sys/crypto/fips_enabled
root で以下のコマンドを実行して、IPsec トンネルを読み込みます。
~]# ipsec auto --add mytunnel
/usr/libexec/ipsec/addconn Non-fips mode set in /proc/sys/crypto/fips_enabled
左右両方のホストのトンネルを表示するには、root で以下のコマンドを実行します。
~]# ipsec auto --up mytunnel
104 "mytunnel" #1: STATE_MAIN_I1: initiate
003 "mytunnel" #1: received Vendor ID payload [Dead Peer Detection]
106 "mytunnel" #1: STATE_MAIN_I2: sent MI2, expecting MR2
108 "mytunnel" #1: STATE_MAIN_I3: sent MI3, expecting MR3
003 "mytunnel" #1: received Vendor ID payload [CAN-IKEv2]
004 "mytunnel" #1: STATE_MAIN_I4: ISAKMP SA established {auth=OAKLEY_RSA_SIG cipher=aes_128 prf=oakley_sha group=modp2048}
117 "mytunnel" #2: STATE_QUICK_I1: initiate
004 "mytunnel" #2: STATE_QUICK_I2: sent QI2, IPsec SA established tunnel mode {ESP=>0x63ad7e17 <0x4841b647 xfrm=AES_128-HMAC_SHA1 NATOA=none NATD=none DPD=none}

2.7.5.1. Openswan を使ったホスト間 VPN の検証

IKE 交渉は、UDP ポート 500 で行われます。IPsec パケットは、Encapsulated Security Payload (ESP) パケットとして現れます。VPN 接続が NAT ルーターを通過する必要がある場合は、ESP パケットはポート 4500 上の UDP パケットにカプセル化されます。
パケットが VPN トンネル経由で送信されていることを確認するには、root で以下の形式のコマンドを実行します。
~]# tcpdump -n -i interface esp and udp port 500 and udp port 4500
00:32:32.632165 IP 192.1.2.45 > 192.1.2.23: ESP(spi=0x63ad7e17,seq=0x1a), length 132
00:32:32.632592 IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x4841b647,seq=0x1a), length 132
00:32:32.632592 IP 192.0.2.254 > 192.0.1.254: ICMP echo reply, id 2489, seq 7, length 64
00:32:33.632221 IP 192.1.2.45 > 192.1.2.23: ESP(spi=0x63ad7e17,seq=0x1b), length 132
00:32:33.632731 IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x4841b647,seq=0x1b), length 132
00:32:33.632731 IP 192.0.2.254 > 192.0.1.254: ICMP echo reply, id 2489, seq 8, length 64
00:32:34.632183 IP 192.1.2.45 > 192.1.2.23: ESP(spi=0x63ad7e17,seq=0x1c), length 132
00:32:34.632607 IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x4841b647,seq=0x1c), length 132
00:32:34.632607 IP 192.0.2.254 > 192.0.1.254: ICMP echo reply, id 2489, seq 9, length 64
00:32:35.632233 IP 192.1.2.45 > 192.1.2.23: ESP(spi=0x63ad7e17,seq=0x1d), length 132
00:32:35.632685 IP 192.1.2.23 > 192.1.2.45: ESP(spi=0x4841b647,seq=0x1d), length 132
00:32:35.632685 IP 192.0.2.254 > 192.0.1.254: ICMP echo reply, id 2489, seq 10, length 64
ここでの interface は、監視するインターフェイスになります。tcpdump での表示を終了するには、Ctrl+C を押します。

注記

tcpdump コマンドと IPsec のインタラクションはやや予想外のものになります。見えるのは暗号化された送信パケットのみで、プレーンテキストの送信パケットは見えません。受信パケットは、暗号化および暗号解読された両方を表示します。可能であれば、tcpdump コマンドはどちらかのエンドポイント上ではなく、2 つのマシン間にあるルーター上で実行してください。