PPPoE接続しているルータの配下にある、プライベートIPアドレスを持ったVyattaから、Amazon VPCへVPN接続してみました。
簡単な構成図は以下のようになります。
その設定内容を記載しています。運用していく為には、細かな微修正は必要になると思いますが、取りあえずの接続の部分となります。
利用したVyattaは「Vyatta Core 6.6 R1」です。
1.PPPoE(NAT)ルータで、VPN接続用の設定
PPPoE(NAT)ルータで、Vyatta(192.168.1.180)までの「UDP/500」(isakmp)、「UDP/4500」(IPsec NAT-Traversal)を解放します。
2.Amazon VPC 作成
VPC を作成します。
今回作成したVPCのタイプは「VPC with a Private Subnet Only and Hardware VPN Access」です。この「Hardware VPN」がVyattaに該当します。
次の画面にいきます。
「Specify the public IP Address of your VPN router」は、PPPoEルータのグローバルIPアドレスを設定します。最初の図でいうと「xxx.xxx.xxx.111」と記載しているグローバルIPアドレスが該当します。
「Specify the routing for the VPN Connection」では「Use static routing」を選択します。
「Specify the IP prefixes for the network on your side of the VPN Connection」のIP Prefixでは最初の図でいうと「192.168.3.0/24」を入力し、Addリンクをクリックして追加します。
あとは、VPCが作成されるのを待ちます。
VPCが作成されたら、対向側のVPN装置(今回のVyatta側)で設定するConfigがダウンロードできる状態になります。
「Download Configuration」ボタンをクリックすると、「Download Configuration」画面が表示されます。
Vendorは「Generic」、Platformも「Generic」、Softwareは「Vendor Agnostic」を選択し、「Yes, Download」ボタンをクリックすると、設定値が記載されたテキストファイルがダウンロードできます。
このファイルを見ながら、VyattaでVPN設定を行う事になります。
3.VyattaでVPN設定
先ほどダウンロードした、設定値が記載されたテキストファイルを見ながら、Vyattaの設定を行います。
VPN Tunnel を2個設定する為の情報がテキストファイルに記載されていますが、今回は一つだけのVPN Tunnelを設定します。
以下、関連する箇所だけ抜粋しています。
まず、VPN部分です。
vpn { ipsec { disable-uniqreqids esp-group AWS-TOKYO-ESP { compression disable lifetime 3600 mode tunnel pfs dh-group2 proposal 1 { encryption aes128 hash sha1 } } ike-group AWS-TOKYO-IKE { dead-peer-detection { action restart interval 60 timeout 30 } lifetime 28800 proposal 1 { dh-group 2 encryption aes128 hash sha1 } } ipsec-interfaces { interface eth0 } nat-networks { allowed-network 0.0.0.0/0 { } } nat-traversal enable site-to-site { peer 27.0.xxx.xxx { authentication { mode pre-shared-secret pre-shared-secret **************** } connection-type initiate ike-group AWS-TOKYO-IKE local-address 192.168.1.180 tunnel 1 { esp-group AWS-TOKYO-ESP local { prefix 192.168.3.0/24 } remote { prefix 10.0.0.0/16 } } } } } }
「site-to-site」の「peer」に記載しているIPアドレスは一部伏せて記載していますが、Amazon側の「Virtual Private Gateway」のIPアドレスです。
「ike-group」と「esp-group」の名称は、適当な名称を付けてください。あと、各設定内容は環境に合わせて適時変更してください。
次は、Interfaces部分で関係のある個所を抜粋します。
interfaces { ethernet eth0 { address 192.168.1.180/24 address 169.254.252.2/32 } }
ここでは「address 169.254.252.2/32」を追加しています。これは、tunnelインターフェース用のIPアドレスで「Inside IP Addresses」の「Customer Gateway」に記載されているIPアドレスです。このIPアドレスは、ダウンロードした設定値が記載されたテキストファイルを見ながら、置き換えてください。
次は、Staticルートの設定です。
protocols { static { route 10.0.0.0/16 { next-hop 169.254.252.1 { } } } }
「next-hop」の値は、tunnelインターフェース用のIPアドレスで「Inside IP Addresses」の「Virtual Private Gateway」に記載されているIPアドレスです。このIPアドレスは、ダウンロードした設定値が記載されたテキストファイルを見ながら、置き換えてください。
以上が設定内容になります。
4.VPN接続確認
VPCの「VPN Connections」画面では、このように表示されます。
一つのトンネルのみがUPしています。
VPCのSubnet内に、EC2インスタンスを作成し、接続確認をします。今回作成したEC2インスタンスにはIPアドレスは「10.0.1.211」が割り当てられました。
192.168.3.0/24にあるLinuxマシンから、EC2インスタンスにPingを打ってみます。(これをやる場合、Security Group の設定で、ICMPを許可してください。)
$ ping 10.0.1.211 PING 10.0.1.211 (10.0.1.211) 56(84) bytes of data. 64 bytes from 10.0.1.211: icmp_seq=1 ttl=61 time=30.7 ms 64 bytes from 10.0.1.211: icmp_seq=2 ttl=61 time=19.6 ms 64 bytes from 10.0.1.211: icmp_seq=3 ttl=61 time=19.9 ms 64 bytes from 10.0.1.211: icmp_seq=4 ttl=61 time=20.6 ms ^C --- 10.0.1.211 ping statistics --- 4 packets transmitted, 4 received, 0% packet loss, time 3606ms rtt min/avg/max/mdev = 19.669/22.767/30.799/4.653 ms $
無事、ICMP通信が出来ています!
次は、SSHで「10.0.1.211」に直接ログインしてみます。
$ ssh -l ec2-user -i ec2.pem 10.0.1.211 __| __|_ ) _| ( / Amazon Linux AMI ___|\___|___| https://aws.amazon.com/amazon-linux-ami/2013.09-release-notes/ [ec2-user@ip-10-0-1-211 ~]$
SSH接続が出来ました!
Vyatta上でIKEとIPSECの状態を見てみます。
vyatta@vyatta:~$ show vpn ike sa Peer ID / IP Local ID / IP ------------ ------------- 27.0.xxx.xxx 192.168.1.180 State Encrypt Hash D-H Grp NAT-T A-Time L-Time ----- ------- ---- ------- ----- ------ ------ up aes128 sha1 2 no 1917 28800 vyatta@vyatta:~$ show vpn ipsec sa Peer ID / IP Local ID / IP ------------ ------------- 27.0.xxx.xxx 192.168.1.180 Tunnel State Bytes Out/In Encrypt Hash NAT-T A-Time L-Time Proto ------ ----- ------------- ------- ---- ----- ------ ------ ----- 1 up 25.2K/24.4K aes128 sha1 no 1974 3600 all vyatta@vyatta:~$
ちゃんと接続できています!
5.あとがき
今回のトンネル設定ですが、2つ設定する方法を調べる余力がなかったので、1つだけにしました。2つ設定する良い情報があれば欲しいです。
あと、しばらく放置していると、VPN接続が切れたり再接続したりという現象も見られました。設定した値が関連しているのだと思いますが、今回は深追いしていません。
Vyattaの「monitor vpn all」などで状況を見ていると、色々情報が出てきていましたので、調査が必要な時は、ログを見るとヒントが見つかるかと思います。