VyattaによるVPC間接続

Vyattaを使ってVPCVPCをつないでみた。
VPCVPCの間は通常直接(プライベートアドレスで)の通信ができませんが、VPNを張れば可能となります。

構成


用意するもの

  • VPC x 2 (10.0.0.0/24と10.1.0.0/24で作成し、10.0.0.0/24 と 10.1.0.0/24のsubnetをそれぞれ切った)
  • Internet gateway (それぞれのVPCにattachしておきます)
  • Vyatta AMI ami-0204b003 で起動したインスタンス (10.0.0.254 , 10.1.0.254で起動した)
  • ElasticIP 2つ (上記のインスタンスにAssociateしておきます/ 1.2.3.4 と 5.6.7.8 とする)

VPCの設定

  1. SecurityGroupの設定
    Vyatta用のSecurityGroup(vyatta)、クライアント用のSecurityGroupI(client)を用意しておく
    vyattaは、sshと相手のEIPからの1194/tcp、clientからのAll Trafficを空けておきます。
    clientはとりあえずssh/pingだけ空けました。
  2. Source/Dest check
    Vyattaのインスタンスは Source/Dest checkをdisableしておく(インスタンス画面で右クリックから設定できます)
  3. Route Tableの設定
    0.0.0.0/0をigwに振る
    相手のサブネットにはサブネット内のVyattaのインスタンスIDを指定する

Vyattaの設定

Vyattaのドキュメント Vyatta_VPN_R6.3_v01.pdfの 338ページあたり "Site‐to‐Site Mode with Pre‐Shared Secret" を参照しつつ作業。
それぞれのVyattaにログインして、以下のコマンドを投入。
Vyatta1

vyatta@vyatta:~$ generate vpn openvpn-key /config/auth/secret (このファイルをvyatta2の同じ場所に設置する必要がある)
vyatta@vyatta:~$ configure
[edit]
vyatta@vyatta# set interfaces openvpn vtun0 local-address 192.168.200.1
vyatta@vyatta# set interfaces openvpn vtun0 mode site-to-site 
vyatta@vyatta# set interfaces openvpn vtun0 remote-address 192.168.200.2
vyatta@vyatta# set interfaces openvpn vtun0 remote-host 5.6.7.8
vyatta@vyatta# set interfaces openvpn vtun0 shared-secret-key-file /config/auth/secret
vyatta@vyatta# set protocols static interface-route 10.1.0.0/24 next-hop-interface vtun0
vyatta@vyatta# commit
vyatta@vyatta# save

Vyatta2

vyatta@vyatta:~$ sudo vi /config/auth/secret (Vyatta1と同じになるように編集)
vyatta@vyatta:~$ sudo chmod 600 /config/auth/secret
vyatta@vyatta:~$ configure
[edit]
vyatta@vyatta# set interfaces openvpn vtun0 local-address 192.168.200.2
vyatta@vyatta# set interfaces openvpn vtun0 mode site-to-site 
vyatta@vyatta# set interfaces openvpn vtun0 remote-address 192.168.200.1
vyatta@vyatta# set interfaces openvpn vtun0 remote-host 1.2.3.4
vyatta@vyatta# set interfaces openvpn vtun0 shared-secret-key-file /config/auth/secret
vyatta@vyatta# set protocols static interface-route 10.0.0.0/24 next‐hop‐interface vtun0
vyatta@vyatta# commit
vyatta@vyatta# save

これで疎通がとれているか確認する

vyatta@vyatta:~$ ping 192.168.200.2
PING 192.168.200.2 (192.168.200.2) 56(84) bytes of data.
64 bytes from 192.168.200.2: icmp_req=1 ttl=64 time=3.49 ms
64 bytes from 192.168.200.2: icmp_req=2 ttl=64 time=3.45 ms
64 bytes from 192.168.200.2: icmp_req=3 ttl=64 time=3.40 ms
64 bytes from 192.168.200.2: icmp_req=4 ttl=64 time=3.72 ms
^C
--- 192.168.200.2 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 3.402/3.518/3.726/0.137 ms
vyatta@vyatta:~$ ping 10.1.0.254   
PING 10.1.0.254 (10.1.0.254) 56(84) bytes of data.
64 bytes from 10.1.0.254: icmp_req=1 ttl=64 time=3.51 ms
64 bytes from 10.1.0.254: icmp_req=2 ttl=64 time=3.42 ms
64 bytes from 10.1.0.254: icmp_req=3 ttl=64 time=3.36 ms
64 bytes from 10.1.0.254: icmp_req=4 ttl=64 time=3.58 ms
^C
--- 10.1.0.254 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 3.365/3.472/3.589/0.111 ms

インスタンス間の疎通確認

10.0.0.4 と 10.1.0.4で Amazon Linux AMIを起動した

[ec2-user@ip-10-0-0-4 ~]$ ping 10.1.0.4
PING 10.1.0.4 (10.1.0.4) 56(84) bytes of data.
64 bytes from 10.1.0.4: icmp_seq=1 ttl=62 time=4.49 ms
64 bytes from 10.1.0.4: icmp_seq=2 ttl=62 time=4.16 ms
64 bytes from 10.1.0.4: icmp_seq=3 ttl=62 time=4.18 ms
64 bytes from 10.1.0.4: icmp_seq=4 ttl=62 time=4.18 ms
^C
--- 10.1.0.4 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3333ms
rtt min/avg/max/mdev = 4.169/4.258/4.499/0.160 ms
[ec2-user@ip-10-0-0-4 ~]$ traceroute 10.1.0.4
traceroute to 10.1.0.4 (10.1.0.4), 30 hops max, 60 byte packets
 1  10.0.0.254 (10.0.0.254)  0.475 ms  0.460 ms  0.439 ms
 2  192.168.200.2 (192.168.200.2)  4.420 ms  4.411 ms  4.444 ms
 3  10.1.0.4 (10.1.0.4)  4.297 ms  4.420 ms  4.554 ms
[ec2-user@ip-10-0-0-4 ~]$ ssh 10.1.0.4
Last login: Tue Dec 13 18:31:56 2011 from 10.0.0.4

       __|  __|_  )
       _|  (     /   Amazon Linux AMI
      ___|\___|___|

See /usr/share/doc/system-release/ for latest release notes.
[ec2-user@ip-10-1-0-4 ~]$ 

ちゃんと繋がりましたね。