kernelの再構築や、IPsec Toolsのインストールは略。
まずは/usr/local/etc/racoon/racoon.conf の内容。
# $Id: racoon.conf,v 1.3 2012/08/25 04:47:32 root Exp root $
#
# $KAME: racoon.conf.in,v 1.18 2001/08/16 06:33:40 itojun Exp $
# "path" must be placed before it should be used.
# You can overwrite which you defined, but it should not use due to confusing.
path include "/usr/local/etc/racoon" ;
#include "remote.conf" ;
# search this file for pre_shared_key with various ID key.
path pre_shared_key "/usr/local/etc/racoon/psk.txt" ;
# racoon will look for certificate file in the directory,
# if the certificate/certificate request payload is received.
path certificate "/usr/local/etc/cert" ;
# "log" specifies logging level. It is followed by either "notify", "debug"
# or "debug2".
log info;
# "padding" defines some parameter of padding. You should not touch these.
padding
{
maximum_length 20; # maximum padding length.
randomize off; # enable randomize length.
strict_check off; # enable strict check.
exclusive_tail off; # extract last one octet.
}
# if no listen directive is specified, racoon will listen to all
# available interface addresses.
listen
{
#isakmp ::1 [7000];
#isakmp 202.249.11.124 [500];
#admin [7002]; # administrative's port by kmpstat.
#strict_address; # required all addresses must be bound.
# isakmp IPv4アドレス [500];
isakmp IPv6アドレス [500];
}
# Specification of default various timer.
timer
{
# These value can be changed per remote node.
counter 10; # maximum trying count to send.
interval 3 sec; # maximum interval to resend.
persend 1; # the number of packets per a send.
# timer for waiting to complete each phase.
phase1 30 sec;
phase2 30 sec;
}
remote anonymous
{
exchange_mode aggressive, main;
doi ipsec_doi;
situation identity_only;
generate_policy on;
proposal_check obey;
dpd_delay 20;
passive on;
support_proxy on;
ike_frag on;
verify_identifier off;
proposal {
authentication_method rsasig;
encryption_algorithm 3des;
hash_algorithm sha1;
dh_group 2;
}
proposal {
encryption_algorithm aes;
hash_algorithm sha256;
authentication_method pre_shared_key;
dh_group modp1024;
}
proposal {
encryption_algorithm 3des;
hash_algorithm sha256;
authentication_method pre_shared_key;
dh_group modp1024;
}
proposal {
authentication_method pre_shared_key;
hash_algorithm sha1;
encryption_algorithm aes 256;
lifetime time 3600 sec;
dh_group 2;
}
proposal {
authentication_method pre_shared_key;
hash_algorithm sha1;
encryption_algorithm aes;
lifetime time 3600 sec;
dh_group 2;
}
proposal_check strict;
}
# Phase 2 proposal (for IPsec SA)
sainfo anonymous
{
pfs_group 2;
lifetime time 10 minutes;
encryption_algorithm aes, rijndael, 3des;
authentication_algorithm hmac_sha1;
compression_algorithm deflate;
}
client側のIPアドレスは固定ではないため、anonymousで定義する必要がある。remote {} も sainfo{} も、client側とパラメータをそろえること。proposalは一致するものがあればよい。次。共有キー。psk.txtは
メールアドレス 共有キー
とする。メールアドレスは、client側のconfファイルのremote{}で指定したメールアドレスとする。aggressive modeで接続してくるため、IDとしてIPアドレス以外のものも使用できるのだ。クライアント側でmy_identifier user_fqdnとしているので、同じメールアドレスを使う。
最後に、どの通信を暗号化対象にするかを /usr/local/etc/racoon/setkey.conf に指定する。
# $Id: setkey.conf,v 1.2 2012/08/25 11:53:25 root Exp $
flush;
spdflush;
spdadd ::1 ::1 any -P in none;
spdadd ::1 ::1 any -P out none;
spdadd NASのあるネットワーク/マスク[0] NASのアドレス/0[548] any -P in none;
spdadd NASのアドレス/0[548] NASのあるネットワーク/マスク/マスク[0] any -P out none;
spdadd ::/0[0] NASのアドレス/0[548] any -P in ipsec esp/transport//require;
spdadd NASのアドレス/0[548] ::/0[0] any -P out ipsec esp/transport//require;
noneで終わっている行は、暗号化を行わない指定。自分自身と通信する場合、自分と同じネットワーク内と通信する場合は、暗号化を行わないようにする。暗号化を行う条件は、ちょうどクライアント側とin/outを逆にした関係になる。
これでOK。動作確認。Wiresharkなどでパケットをキャプチャしながら、クライアント側で
telnet NASのアドレス 548
とする。IKASMPのパケットの後ESPのパケットになり、かつ、telnetが接続できていればOK。racoon.conf でlogをdebugにすると、内容が膨大で接続の確認には向かない。tcpdumpやwiresharkでパケットをキャプチャして、どこまで進んでいるかを確認しながら設定を見直すのが現実的。
Phase1が確立していなければ、remote {} の部分とpsk.txtを確認。Phase2であればsainfo。また、暗号化されずにtcp/548に接続しに行っているようであれば、setkeyに喰わせるファイルを確認。firewallでrejectされていることもあるので、設定を見直すことも必要。UDP 500/4500とプロトコル番号50/51。
ログやtcpdumpの出力は意外と見かけないのが、また切り分けを難しくしていると思う。
- Mac OS XでIPsec
- Cryptosystems: Debugging IPSec - O'Reilly Media
- OSX Lion ServerでVPN接続が上手く出来ない: Apple サポートコミュニティ
また、他に参考にしたページがいくつか。