6.5. IPsec ネットワーク間 (Network-to-Network) 設定

IPsec は、ネットワーク間接続の方法を用いて、リモートネットワークにネットワーク全体(LANやWAN)を接続するよう設定することもできます。ネットワーク間接続には、ある LAN 上の1ノードからリモート LAN 上の1ノード情報を透過的にプロセス してルーティングするために、接続しているネットワークの両サイドで IPsec ルータの設定が必要です。図6-1でネットワーク間IPsec トンネル接続を示しています。

図 6-1. ネットワーク間IPsecトンネル接続

この図は、インターネットで区切られた2つの LAN を示しています。この2つの LAN は IPsec ルータを使い、インターネットを通るセキュアトンネルで接続を認証、開始します。通過中に遮断されたパケットは、この2つの LAN の間の 暗号 保護パケットをクラックするためにブルートフォース復号化を要求します。192.168.1.0/24 IP 範囲のあるノードから192.168.2.0/24範囲の別ノードへの通信プロセスは完全に暗号化/復号化の処理としてノードに対して透過的で、IPsec パケットのルーティングは完全に IPsec ルータによって処理されます。

ネットワーク間接続に必要な情報には次のようなものがあります。

例えば、LAN A (lana.example.com) と LAN B (lanb.example.com)を IPsec トンネルで接続したいとします。LAN Aのネットワークアドレスは 192.168.1.0/24 の範囲、 一方、LAN B は192.168.2.0/24の範囲を使用しています。ゲートウェイ IP アドレスは、LAN A が192.168.1.254、LAN B が192.168.2.254です。IPsec ルータは各 LAN ゲート ウェイとは別で、2つのネットワークデバイスを使用しています: eth0 は外部アクセス 可能な静的 IP アドレスに割り当てられインターネットにアクセスします。eth1 は ルーティングポイントとして動作し、あるネットワークノードからリモートネットワーク ノードに LAN パケットを処理、転送します。

各ネットワーク間の IPsec 接続は値r3dh4tl1nuxで事前共有鍵を使用し、A と B の管理者は各 IPsec ルータ間の認証キーが racoonにより自動生成と共有されることに同意しています。 LAN Aの管理者は IPsec 接続の名前をipsec0にし、LAN Bの管理者は IPsec 接続の名前をipsec1にしています。

以下の例は、LAN A のネットワーク間 IPsec 接続用のifcfg ファイルです。この例の接続を識別する固有名はipsec1ですので、そのファイルは/etc/sysconfig/network- scripts/ifcfg-ipsec1という名前になります。

TYPE=IPSEC
ONBOOT=yes
IKE_METHOD=PSK
SRCGW=192.168.1.254
DSTGW=192.168.2.254
SRCNET=192.168.1.0/24
DSTNET=192.168.2.0/24
DST=X.X.X.X

起動時に(ONBOOT=yes)接続が開始するよう設定され、 pre-shared key認証方法を使用します(IKE_METHOD=PSK)。 LAN Aの管理者は目的のゲートウェイを入力します。これはLAN Bのゲートウェイ (DSTGW=192.168.2.254)であり、 ソースゲートウェイでもあります。そして、LAN AのゲートウェイIPアドレスです (SRCGW=192.168.1.254)。 目的のネットワークを入力します。これはLAN Bのネットワークレンジ(DSTNET=192.168.2.0/24)であり、ソースネットワーク (SRCNET=192.168.1.0/24)です。 最後に、目的のIPアドレスを入力します。これはLAN Bの外部アクセス可能なIPアドレスです (X.X.X.X)。

次の例は、両方のネットワークが互いに認証するために使用する、事前共有鍵 ファイル(/etc/sysconfig/network-scripts/keys-ipsec Xと呼ばれる。Xは、0を LAN Aに、1をLAN Bに入れる)を示します。このファイルの内容は同一でなければ ならず、また、このファイルを読み取り/書き込みできるのは root ユーザーだけに する必要があります。

IKE_PSK=r3dh4tl1nux

重要重要
 

root ユーザーだけがファイルを読み取り、編集できるようにkeys-ipsecXファイルを変更するには、 ファイルを作成した後に次のコマンドを実行します:

chmod 600 /etc/sysconfig/network-scripts/keys-ipsec1

認証キーを変更するには、両方の IPsec ルータ上でkeys-ipsecXファイルを編集します。 両方のキーが同一でなければ正しい接続はできません

次の例は、IPsec 接続用の/etc/racoon/racoon.conf設定 ファイルを示します。ファイルの下部にinclude 行は自動的に生成されますが、IPsec トンネルが実行中の場合のみ、現れることに 注意して下さい。

# Racoon IKE daemon configuration file.
# See 'man racoon.conf' for a description of the format and entries.

path include "/etc/racoon";
path pre_shared_key "/etc/racoon/psk.txt";
path certificate "/etc/racoon/certs";

sainfo anonymous
{
	pfs_group 2;
	lifetime time 1 hour ;
	encryption_algorithm 3des, blowfish 448, rijndael ;
	authentication_algorithm hmac_sha1, hmac_md5 ;
	compression_algorithm deflate ;
}
include "/etc/racoon/X.X.X.X.conf"

以下は、リモートネットワークへ接続のための特殊設定です。 ファイル名はX.X.X.X.confになります(X.X.X.Xには、 リモートIPsecルータのIPアドレスを入れます)。このファイルは、 IPsecトンネルが起動されると自動的に生成されるため、直接には変更しないよう 注意してください。

;
remote X.X.X.X
{
        exchange_mode aggressive, main;
        my_identifier address;
        proposal {
                encryption_algorithm 3des;
                hash_algorithm sha1;
                authentication_method pre_shared_key;
                dh_group 2 ;
        }
}

Ipsec接続を開始する前に、IPフォワーディングをカーネルで有効にしてください。 rootとして、シェルプロンプトでIPフォワーディングを有効にします。

  1. /etc/sysctl.confを編集して、net.ipv4.ip_forward1に設定します。

  2. 次のコマンドを実行して変更を反映します。

    sysctl -p /etc/sysctl.conf

IPsec接続を開始するには、IPsecルータを再起動するか、 rootとして各ルータで次のコマンドを実行します。

/sbin/ifup ipsec0

接続が開かれ、LAN AとBが互いに通信できるようになります。 IPsec 接続でifupを実行して呼び出された初期化スクリプトを通じて ルートが自動的に作成されます。ネットワークのルート一覧を表示するには、 次のコマンドを実行します:

/sbin/ip route list

Ipsec接続をテストするには、外部ルート可能なデバイスで tcpdump ユーティリティを実行して(この例では eth0)、ホスト(またはネットワーク)間で転送されているネットワークパケットを表示させ、IPsec で暗号化されているか確認します。例えば、LAN A の IPsec 接続性を確認するには、次を入力します。

tcpdump -n -i eth0 host lana.example.com

パケットには AH ヘッダが含まれ、ESP パケットとして表示されていなければなり ません。ESP とは、暗号化されているということです。例えば(バックスラッシュは 1行続くと言う意味):

12:24:26.155529 lanb.example.com > lana.example.com: AH(spi=0x021c9834,seq=0x358): \
	  lanb.example.com > lana.example.com: ESP(spi=0x00c887ad,seq=0x358) (DF) \
	  (ipip-proto-4)