2010/03/01

NetBSD 5.0.1によるIPsec環境の構築

VMWare Workstation 6.5を使って、NetBSD 5.0.1同士でTeamを作成して、2つのVMの間でIPsec環境を構築することにしました。

これはDebian lennyで同じことをした時にMTUを片側で少し減らした場合、PMTUが発生し、端末がハングしたようにみえる現象がNetBSDと連携した時にどうなるか確認したかったからです。

とりあえずNetBSD 5.0.1同士でのIPsec環境を構築したので、その時の差分の手順をメモしておきます。

はじめに

作業手順は大きく分けて次のような流れになっています。

ipsec.confファイルはipsec-tools.confと読み替えれば、手順もファイルの内容もLinuxの時と同じものがそのまま使えます。 そのため今回はNetBSD固有の部分で、特に気になった設定周りについてだけメモをまとめていきます。

NetBSDカーネルの再ビルド

5.0.1ではIPSECが標準で有効になっていないため、これを有効にしたカーネルを作成します。 手順自体は通常のようにGENERICファイルをコピーして編集しますが、その際に次のオプションを有効にしてください。

名前を変更したGENERICファイル編集個所

...
options IPSEC
options IPSEC_ESP
...
IPsec用のNICの追加

VMWare Workstationの機能でネットワークセグメントを一つ追加しています。 今回はwm1に対して"10.0.0."1と"10.0.0.2"のIPアドレスを割り当て、その2点間でIPsecが有効になるように設定を行ないました。

システムの設定

NetBSD固有の設定は/etc/rc.confに集中しています。

/etc/rc.confファイルの追加内容

sshd=YES
ipsec=YES
racoon=YES

念のためにipsec.confとraccon.confファイルの内容もコピーしておきます。

server2側の/etc/ipsec.confファイル

#!/usr/sbin/setkey -f
#
flush;
spdflush;

## out rule (local -> remote)
## IPv4
spdadd 10.0.0.2 10.0.0.1 any -P out ipsec
           esp/transport//require
           ah/transport//require;

## in rule (remote -> local)
## IPv4
spdadd 10.0.0.1 10.0.0.2 any -P in ipsec
           esp/transport//require
           ah/transport//require;

ipsec.confファイルはもう片側では、IPアドレスを入れ替えています。 実際には"out", "in"を入れ替えた方が楽でしょう。

server2側の/etc/racoon/racoon.confファイル

path certificate "/etc/racoon/certs";

remote 10.0.0.1 {
        exchange_mode main;
        my_identifier asn1dn;
        peers_identifier asn1dn;

        certificate_type x509 "newcert.pem" "newkey.pem";
        peers_certfile x509 "server1.newcert.pem";
        verify_cert on;
        proposal {
                encryption_algorithm aes;
                hash_algorithm sha1;
                authentication_method rsasig;
                dh_group modp1024;
        }
        generate_policy on;
        passive off;
}

sainfo anonymous {
        pfs_group modp768;
        encryption_algorithm rijndael, 3des;
        authentication_algorithm hmac_sha1, hmac_md5;
        compression_algorithm deflate;
}

racoon.confファイルは、もう片側では10.0.0.1を10.0.0.2に、server1.netcert.pemはserver2.newcert.pemに変更しています。

さいごに

システムを再起動すると2つのIPアドレスの間では無事にIPsecによる通信が始まりました。 最初はracoonを有効にせずに再起動し、後からracoonを起動したせいか、linuxの時と同じようにphase2でtimeoutが発生しました。

当初発生したエラー抜粋

Mar  1 13:21:00 server2 racoon: ERROR: phase1 negotiation failed due to time up. e60ee11ca211d3b2:0000000000000000 
Mar  1 13:21:03 server2 racoon: ERROR: phase2 negotiation failed due to time up waiting for phase1. ESP 10.0.0.1[500]->10.0.0.2[500] 

やはり同じように両方で"racoonの停止"→"setkeyのクリア"を行なった後に、"racoonの起動"、"setkey -f ipsec.confによる設定の反映"を行なうと無事に通信が始まりました。

やはりMTUをいじってもちゃんと動きますね。まぁ当然か。 Linuxの新しいkernelでは直ってるのかなぁ…。

0 件のコメント: