Pocket

NATされたVyattaからAmazon VPCに接続する方法

  • add this entry to hatena bookmark

PPPoE接続しているルータの配下にある、プライベートIPアドレスを持ったVyattaから、Amazon VPCへVPN接続してみました。

簡単な構成図は以下のようになります。

Vyatta_VPC_201402

その設定内容を記載しています。運用していく為には、細かな微修正は必要になると思いますが、取りあえずの接続の部分となります。

利用した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に該当します。

VPC_PrivateSubnetOnly

次の画面にいきます。

「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が作成されるのを待ちます。

Creating_your_VPC

VPCが作成されたら、対向側のVPN装置(今回のVyatta側)で設定するConfigがダウンロードできる状態になります。

Download_Configuration

「Download Configuration」ボタンをクリックすると、「Download Configuration」画面が表示されます。

Download_Configuration_select

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」画面では、このように表示されます。

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」などで状況を見ていると、色々情報が出てきていましたので、調査が必要な時は、ログを見るとヒントが見つかるかと思います。

Pocket

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です


*

チェックサイト RSS Feed読者登録はいかがでしょうか?RSS配信中です。