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

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

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

この図は、インターネットで区切られた2つのLANを示しています。 この2つのネットワークはIPsecルータを使い、インターネットを通るセキュアトンネルで 接続を認証、開始します。通過中に遮断されたパケットは、 この2つのLANの間のcipher保護パケットをクラックするためにブルートフォース復号化を 要求します。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で pre-shared keyを使用し、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)。

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

IKE_PSK=r3dh4tl1nux

誓要項目重要
 

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

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

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

次に、IPsec接続の/etc/racoon/racoon.conf設定ファイルを 示します。 Ipsecトンネルに現在、接続している場合にのみ、 ファイルの下部に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)