2012年08月14日

【備忘録】DebianとYAMAHA RTX1100の間でIPsec tunnelがつながった

ふー。だいぶ苦労しましたが、IPsec tunnelがつながりました。
構成は、イニシエータがYAMAHA RTX1100 Rev.8.03.90、レスポンダがDebian 6 amd64(さくらのVPS 2G)。
レスポンダ側のIKEサーバーは、racoonです。
はい、「え、いまさらracoonというかKAME?」「IKEv1しかサポートしてないじゃん!」などという声が上がるのは十分承知しております。
最初、openswanで設定しようとがんばっていたんですが、これがなかなか一筋縄ではいかないんです。何と言っても設定項目が膨大だし、ドキュメントもfreeswan時代のものがほとんどで資料が少ないんです。
どうしたものかなー、と思って検索してみたら、英語ですがこういうブログ記事が見つかったわけです。要は、racoonのほうが簡単に設定できるよ、と。
Debianにはracoonのパッケージもありますし、それに実はRTX1100ではIKEv1しかサポートしてないし、認証はPre-Shared Keyしかサポートしていないという事実がわかったので、なんだそれならracoonでも十分じゃん!となったわけです。あと、私のIPsecの知識が10年前で止まっているのでIKEv1のほうが馴染み深かった、という理由もあります(爆)。
イニシエータ側のIPアドレスが不定なので、Pre-Shared Keyを使うということはつまりアグレッシブモードを使うことになるわけで、これにはセキュリティリスクがあるという話も承知しておりますが、ま、XAUTHを使って二重に認証を行えば問題ないだろうと判断しました。
一応、セキュリティには配慮して、暗号化はAES、ハッシュはSHA-1、DHグループはmodp1024を使う方針で、レスポンダ側のracoon.confは以下のようになりました。

/etc/racoon/racoon.conf:
path pre_shared_key "/etc/racoon/psk.txt";
# path certificate "/etc/racoon/certs";

remote anonymous {
exchange_mode main,aggressive;
my_identifier address XX.XX.XX.XX;
peers_identifier fqdn "fully.qualified.domain";
dpd_delay 20;
ike_frag on;
nat_traversal on;
passive on;
initial_contact off;
generate_policy on;
lifetime time 24 hour;
mode_cfg on;
verify_cert off;
proposal {
encryption_algorithm aes;
hash_algorithm sha1;
authentication_method xauth_psk_server;
dh_group modp1024;
}
}

sainfo anonymous {
lifetime time 12 hour;
encryption_algorithm aes;
authentication_algorithm hmac_sha1;
compression_algorithm deflate;
}

mode_cfg {
network4 192.168.2.0;
netmask4 255.255.255.0;
dns4 XX.XX.XX.XX;
auth_source pam;
}

あとはエラーログを見ながらトライアル&エラーでイニシエータをいじったところ、以下のような設定で無事つながったようです。

YAMAHA RTX1100側の設定(IPsecに関連する部分のみ):
tunnel select 1
ipsec tunnel 101
ipsec sa policy 101 1 esp aes-cbc sha-hmac
ipsec ike encryption 1 aes-cbc
ipsec ike group 1 modp1024
ipsec ike hash 1 sha
ipsec ike keepalive log 1 off
ipsec ike keepalive use 1 on dpd 20 5
ipsec ike local address 1 192.168.0.254
ipsec ike local name 1 fully.qualified.domain fqdn
ipsec ike pre-shared-key 1 *
ipsec ike remote address 1 XXX.XXX.XXX.XXX
ipsec ike xauth myname 1 user passwd
tunnel enable 1

んで最後に、
ipsec auto refresh on
でIKEが起動します。

いやあ、めでたしめでたし。
まだちょっとルーティングとかDNSとかNATトラバーサルの設定が詰めきれてないんですが、それはまあ難易度はたいしたことないので、おいおいやってくということで。

純粋なIPsec tunnel(IPsec/L2TPではなく)を張ったという話はあまり検索しても出てこないようなので、参考になれば幸いです(L2TPはオーバーヘッドが大きいので、個人的には嫌いなのよね…)。

それにしてもXAUTHのInternet DraftがRFCにもならずに消滅していると知ったのは衝撃的だったなあ。
ほとんどのIPsecの実装にはXAUTHが含まれているというのに、これでいいんだろうか?

書き忘れましたが、IKEはudp port 500、NAT traversalはudp port 4500を使うので、サーバー側でIPtablesなどのファイアウォールの設定を忘れないようにしてくださいね!
posted by ぽそこし at 00:40| Comment(3) | TrackBack(0) | 備忘録 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
突然失礼致します。
VPSとYAMAHAのルータで記載の通りのことをしたく、参考にさせていただきました。ありがとうございます。
しかし、IPsec自体は張れましたが、設定が足りず、実際の通信ができません。
サーバ側の設定が足りなそうな感じなのですが、他の情報を読んでも解決せず。。。
サーバ側でiptunnelの設定をされていらっしゃいますでしょうか。
動的IPということで他のサイトとはなかなか状況が違いまして宜しければ参考にさせていただければと思います。
よろしくお願い致します。
Posted by 744 at 2012年08月24日 21:19
744さま:
コメントの承認がたいへん遅くなりまして申し訳ありません。_(..)_
最近、ブログのほうはあまり見に行っていなかったものですから…。

さて、ご質問の件ですが、実は私も動的IPではうまく行っていません。現在私はISPと固定IPを契約して自宅にサーバーを置いています。せっかくVPSを契約したので自宅の固定IPを解除できれば費用の節約になるのですが、動的IPでIPsecトンネルを張ることは、私にとっても今後の課題になっています…。

また、この記事では詳しく書きませんでしたが、サーバー側ではIPsecトンネルへのルーティングを設定する必要があるようです。これにはいろいろな方法があるようなのですが、私は下記のようにダミートンネルを張って、そこにIPsecのトラフィックを流すようにしています。

ip link add lo name ipsec0 type dummy;
ifconfig ipsec0 192.168.2.254 netmask 255.255.255.0;

以上、直接のお答えにはなっていませんが、ご参考になれば幸いです。
Posted by ぽそこし at 2012年10月30日 09:24
ぽそこし様
コメントありがとうございます。
お返事も遅くなってしまい、あれからいろいろ悩んでますが解決には残念ながらいたっていません。時間を見つけTry&Errorしております。
頂いた情報を参考にさせて頂きます。ありがとうございます。
Posted by 744 at 2012年11月26日 21:12
コメントを書く
お名前: [必須入力]

メールアドレス: [必須入力]

ホームページアドレス:

コメント: [必須入力]

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック