Vyatta on EC2からVPC にVPN接続をする
東京リージョンのVyatta on EC2とUS EASTのVPCとの間でVPN接続を実現する。最近ではよく試されていることだと思うが、VyattaもAWSもほとんど触ったことが無いので、仕事用の検証と練習を兼ねて。
参考にした、ここ( Amazon EC2(Vyatta)からAmazon VPCに接続してみた - log4moto )に書かれていることそのものです。Twitterでも質問に答えて下さり、本当にお世話になりました。
というわけで、設定に入っていく。
EIPの準備
VPCで利用できるVPN接続は、site-to-siteで固定IPが必要なため、予め東京リージョン側でElastic IPを準備しておく。(この時点ではEC2インスタンスを準備してある必要はない)
VPCを作成
- 先ほどの Elastic IP の IP アドレスを Customer Gateway として設定する。
- サブネットは好みのものを指定(Customer Gatewayの内部セグメントと被らないように)。AZは特に指定しない。
- VPCの作成が始まる。
- 作成が完了すると、ルータに投入する設定をダウンロードできる。
- 通常は、自分の利用するベンダーの機器を指定するのだが、今回は Vyatta を利用するので、Generic を指定する。ここでダウンロードしたファイルから、 http://gen-vyatta-conf.fluxflex.com/ を利用して Vyatta の設定ファイルを生成する。
- "Yes, Download" を選択すると、VPN connection IDが名前となったテキストファイルがダウンロードされる。
Vyatta用の設定を生成
- http://gen-vyatta-conf.fluxflex.com/ にアクセスし、必要な情報を入力する。
- "作成" を押すと、Vyattaに流し込むための設定ファイルとVPN経由のルーティング設定用スクリプトが生成される。
一部修正が必要な点があるので、それはその際に説明をする。EIPもリリースしたし、特に伏せる情報ではないと思うが、なんとなく伏せておいた。
Vyatta インスタンスの起動と初期設定
- AMI ID ami-0204b003 の Vyatta Core 6.3 rev.11のAMIを用いてインスタンスを作成する。
ほとんどデフォルト設定のmicro-instanceで。Name を vyatta-vpc としておく。Key-Pair新規作成か既存の最新のものを利用する(AMI中の設定で利用しているkey-pairが最新のものをさしているため)。
Security Groupはまずは、SSHのみをAnyから許可した設定で新規作成。
- インスタンスが出来上がったら、早速Elastic IPを割り当てて、ログインをする。
$ ssh -i path/to/private_key vyatta@EIP
- とりあえず、Time ZoneをJSTに変更して保存する。
$ configure [edit]# set system time-zone Asia/Tokyo [edit]# commit [edit]# save [edit]# exit
- 上で生成した設定ファイルを微修正する。
- http://d.hatena.ne.jp/j3tm0t0/20110502/1304328905 こちらのエントリを参考に、自分の環境に合わせて修正をする。
- interface loopback lo に内部セグメント用のIPアドレスを追加で設定。
- vpn ipsec site-to-site peer * local-ip にEIPのグローバルIPが設定されているので、インスタンスの Private IP (eth0 の IP)を設定する(ここは起動のたびに変更されるため、自動化したい場合は更に手を加える必要あり)。今回は 10.152.94.170 。
- vpn ipsec site-to-site peer (2つめのpeer) ike group IKE2
- vpn ipsec site-to-site peer (2つめのpeer) tunnel 1 esp-group ESP2
- vpn ipsec site-to-site peer (2つめのpeer) tunnel 2 esp-group ESP2
- 3~5はIKE2とESP2が使用されていないので、このように変更したが、意味のある変更かどうかは未検証(接続は問題なくできる)
- http://d.hatena.ne.jp/j3tm0t0/20110502/1304328905 こちらのエントリを参考に、自分の環境に合わせて修正をする。
- 設定を流し込む。
$ configure [edit]# merge /home/vyatta/vpc2vpn.txt Warning: file does NOT appear to be a valid config file. Do you want to continue? [no] Y Loading configuration from '/home/vyatta/vpn2vpc.txt'... Merge complete. Use 'commit' to make changes active. [edit]# commit [edit]# exit (起動のたびに設定が変わるので、saveは実行しない)
- ルーティングの設定スクリプトを実行する。
# sh ./connect.sh
これで、Management Console の VPC タブにある VPN Connections の 設定した VPN ID で Tunnel 1 と Tunnel 2 が UP になっていればOK。
- Pingで IPSec のIPで疎通が出来るかどうかを確認する。
$ ping 169.254.255.1 OK! $ ping 169.254.255.5 OK!
VPC内のサブネットとの通信を確認する
Private Subnetにインスタンスを作成
Private Subnetにインスタンスを作成して、Vyattaの内部IPと通信が出来るかどうか確認する。IPアドレスは手動で設定する(今回は 172.16.1.11)。Secrity GroupはICMPとSSHをAnyから許可。
Private Subnetの Security Group と Route Table を設定
- Security Group
- Vyatta 内部セグメントからのAll Traficを許可(inbound)
- Route Table
- Vyatta 内部セグメントへは vgw を経由するよう設定(MainがYesのほう)
- 172.16.1.0/24 を Associate
Private Subnetの疎通確認
- PingでICMPの確認
$ ping 172.16.1.11 OK!
- SSHでのログイン確認
- 秘密鍵を Vyatta に配置
$ vi .ssh/priv-key.pem $ chmod 600 .ssh/priv-key.pem
- ログイン確認
vyatta$ ssh -i .ssh/priv-key.pem ec2-user@172.16.1.11 ip-172-16-1-11$ OK!
Public Subnetにインスタンスの作成
インスタンスを作成して、Vyattaの内部IPと通信が出来るかどうかの確認と、EIPを割り当ててインターネットとの通信を確認する。プライベートIPは手動で設定する(今回は 172.16.0.11)。Secrity GroupはVyattaの内部セグメントからの All Traffic を許可。
Public SubnetにElastic IPの割り当て
VPC内部から外部と通信するためには、EIPが必須。
Public SubnetのSecurity Group と Route Table を設定
- Security Group
- Vyatta 内部セグメントからのAll Traficを許可(inbound)
- Route Table
- Vyatta 内部セグメントへは vgw を経由するよう設定(MainがNoのほう)
Public Subnetの疎通確認
- PingでICMPの確認
$ ping 172.16.0.11 OK!
- SSHでのログイン確認(秘密鍵はprivateと共通)
- ログイン確認
vyatta$ ssh -i .ssh/priv-key.pem ec2-user@172.16.0.11 ip-172-16-0-11$ OK!
- インターネットへのアクセス
$ ping www.google.co.jp OK!
NATインスタンスの作成
Private Subnetからインターネットにアクセスするためには、Public Subnetに配置された EIP を持った NAT インスタンスにNATしてもらう必要がある。
NATインスタンスはAMIが提供されているので、それを利用する。(Amazon Images から NATで検索)
もちろん、Public Subnetに配置されるようにする。プライベートIPは 172.16.0.10 を割り当てる。Security GroupはNAT用に新たに生成(Privateからの通信を許可するようにする)。
NATインスタンスに EIP の割り当て
これ必要。
Private Subnetの Route Table変更
デフォルト(0.0.0.0/0)のルーティングをNATインスタンスに向けるようにする。
設定完了!
これであとは、Public <-> Private 間のSecurity Group設定と、Public Subnetに対する外部からのアクセスを設定すれば、問題なし!
最初に試したときに、Vyattaの内部セグメントを 10.2.0.0/16 とかにしたら、戻りパケットが来なかったので、多分AWS内部のSubnetとかぶってしまったのではないかと予測。今回のサブネット設定であれば、特に何の問題もなく設定できた。最初から通しても2~3時間くらいでできた!
こんな簡単にこんなに素敵な環境が手に入るなんて、AWSってやっぱすげーや。
ほぼ初めて触っても、簡単に環境構築ができるって素晴らしい。
参考にさせていただいたページ
- Amazon EC2(Vyatta)からAmazon VPCに接続してみた - log4moto
- さくらのVPSにVyattaを入れて、Amazon VPCにVPN接続 - kikumotoのメモ帳
- vyatta で Amazon VPC に接続 - shercoの日記
- Amazon VPCに接続するためのVyatta向け設定ファイルを作成するWebツールを作ってみました - kikumotoのメモ帳
その他にも、Twitterでアドバイスしてくださった @j3tm0t0 さん、@ar1 さん、@shot6 さん、@oko_chang さん、ありがとうございました!!
(Twitter IDにリンクできない。。。)