Amazon Linux AMIでVPN(IPsec/L2TP)を構成してみた
帰省中にとあるサービスを利用するために、VPN(IPsec/L2TP)を構成してみた。
最初Vyatta Core 6.5を使って構成してみようと色々やってみたが、うまくいかない。どうやらVC6からそれまでのOpenSwan->StrongSwanになってから、双方がNAT配下の場合にうまく繋がらないようだ(参考)。
NATが前提のEC2の場合はあきらめた方が良さそうなので、Amazon Linux AMIにOpenSwanを入れて構成しようとしてみる。
必要なもの
- openswan
- xl2tpd
Amazon Linux AMIのレポジトリにはxl2tpdがないので、epelレポジトリから入れます。
$ sudo yum install --enablerepo=epel openswan xl2tpd
設定
あとはsuz-labさんの記事を見つつ、iOSがdelete notifyを送らずに切る問題を解決するためにDPDの設定を入れたりしながら、IPsecとxl2tpdの設定をします。
IP forwardの有効化と、iptablesでIP Masqueradeも行う必要があります。
またIPsec用に500,4500/udpをSecurityGroupで開けておく必要があります。
自動構成
cloud-initのuser-data scriptで実行する事を前提に、自動化してみました。 https://gist.github.com/4411123
例えばこのファイルを使って、
~ $ ec2-describe-group L2TP GROUP sg-080d6509 407613804811 L2TP L2tp PERMISSION 407613804811 L2TP ALLOWS tcp 22 22 FROM CIDR 0.0.0.0/0 ingress PERMISSION 407613804811 L2TP ALLOWS udp 500 500 FROM CIDR 0.0.0.0/0 ingress PERMISSION 407613804811 L2TP ALLOWS udp 4500 4500 FROM CIDR 0.0.0.0/0 ingress ~ $ ec2-run-instances -t t1.micro -g L2TP -k keypair ami-4e6cd34f -f initvpn.sh
のように起動します。
自分の場合はAutoScalingで起動させつつ、落ちたら自動で上げ直すようにして、DDNSと組み合わせて使っています。
~ $ as-create-launch-config vpn --image-id ami-4e6cd34f --instance-type t1.micro --key keypair --group L2TP --user-data-file initvpn.txt OK-Created launch config $ as-create-auto-scaling-group vpn --launch-configuration vpn --availability-zones ap-northeast-1a,ap-northeast-1b,ap-northeast-1c --min-size 0 --max-size 1 --desired-capacity 1 OK-Created AutoScalingGroup
クライアント設定
iOS設定例 ( http://twitpic.com/bqo000 http://twitpic.com/bqo000 )
TODO
CloudFormationテンプレートにしてユーザ名/パスワード/PSKを指定できるようにするのもいいかなと思います。