Vyatta(VyOS) IPsec設定 AWS編

スポンサーリンク

Vyatta(VyOS)で、AWSとのsite-to-site VPN(サイト間のVPN接続)を実装する方法を説明します。多くの場合は、ネットワーク機器がグローバルIPアドレスを持つ場合が紹介されていますが、実はグローバルIPアドレスを持たないLAN内に配置されたネットワーク機器でもsite-to-site VPNは実装できます。

プライベートIPアドレスを使用する場合は、AWSが自動生成するconfigに対して、id, remote-id, 送信元IPアドレス, イニシエータなどの設定に配慮すれば接続可能になります。状況によりけりで画一的な手順を示す事はできませんが、注意点の勘所を抑えて頂ければと思います。

設定まとめ

AWS固有の概念は一切登場しません。具体的な設定値の意味は「Vyatta(VyOS) IPsec設定 基礎編」と「Vyatta(VyOS) IPsec設定 NAT併用編」を参照ください。

動作確認

動作確認の構成

以下の環境で動作確認を行います。NEC IXは1:Nのsource NATを設定しておきます。つまり、LAN内のVyattaからAWSへ通信を実現する事はできますが、AWSからLAN内へのVyattaへの接続はできない状態とします。

+-----------------------+
|          AWS          |
|     172.31.0.0/16     |
|     (default VPC)     |
+-----------+-----------+
            | 
            | 
            | 
+-----------+-----------+
|                       |
|      JCOM Internet    |
|                       |
+-----------+-----------+
            | 
            | 203.165.200.0/22
            | 
       g0.0 | .XXX
+-----------+-----------+
|                       |
|        NEC IX         |
|                       |
+-----------+-----------+
       g1.0 | .1
            | 
            | 192.168.1.1/24
            | 
       eth0 | .30
+-----------+-----------+
|                       |
|         vy030         |
|                       |
+-----------+-----------+
       eth1 | .30
            | 
            | 192.168.30.0/24
            | 

初期設定

NEC IXは1:Nのsource NATを設定しておきます。

NEC IX
interface GigaEthernet0.0
  ip address dhcp receive-default
  no shutdown
!
interface GigaEthernet1.0
  ip address 192.168.1.1/24
  no shutdown
vy030 : VyOS 1.4
set interfaces ethernet eth0 address '192.168.1.30/24'
set interfaces ethernet eth0 hw-id '00:50:56:90:02:84'
set interfaces ethernet eth1 address '192.168.30.30/24'
set interfaces ethernet eth1 hw-id '00:50:56:90:42:5b'
set interfaces loopback lo
set protocols static route 0.0.0.0/0 next-hop 192.168.1.1
set service ssh
set system config-management commit-revisions '100'
set system console device ttyS0 speed '115200'
set system host-name 'vy030'
set system login user vyos authentication encrypted-password '$6$tMjC07ln2rEuCnYQ$NrbFEUQTzGprNHwkxo5skkG5h4rX1G6RQxdpo61p3MF77PluwdJgfP9UlYT7f1Nr.gIFKoQdAsKRBykNU24.I/'
set system login user vyos authentication plaintext-password ''
set system ntp server time1.vyos.net
set system ntp server time2.vyos.net
set system ntp server time3.vyos.net
set system syslog global facility all level 'info'
set system syslog global facility protocols level 'debug'

動作確認 AWSとの接続

サンプル設定のダウンロード

AWSではIPsecを確立するためのサンプル設定を公開しています。有名なネットワーク機器ならばコピペで動作する事もありますが、複雑な環境やマイナー機器ならばサンプル設定のアレンジが必要です。

何もサンプルがない状況から設定を作成するのは非常に手間なので、AWSが提供するサンプル設定を修正する方法で構築しましょう。サンプル設定は以下の画面からダウンロードできます。

AWS側の設定は非常に多くの情報が出回っており苦戦する方も少ないと思います。AWS側の設定は後述の補足説明とします。

AWS サンプル設定のダウンロード

IPsec設定

サンプル設定のIPsecに関わる部分を確認します。すると、いくつかはコピペで動かない設定が散見されます。以下コピペで動かない部分を順に説明します。

インターフェース指定が旧コマンド体系になっているので、これを修正するか削除します。必須の設定ではないので、省略しても差し支えございません。また、明示指定する場合は、eth0ではなく環境に応じてインターフェース番号を変更ください。

[サンプル設定]
set vpn ipsec ipsec-interfaces interface 'eth0'

[サンプル修正例]
set vpn ipsec interface 'eth0'

NAT環境下でグローバルIPアドレスを持たないネットワーク機器ならば、送信元IPアドレスやid, remote-idの修正が必要です。修正例を以下に示します。

[サンプル設定]
set vpn ipsec site-to-site peer 34.208.51.148 local-address '203.165.200.XXX'

[サンプル修正例]
set vpn ipsec site-to-site peer 34.208.51.148 authentication id '203.165.200.XXX'
set vpn ipsec site-to-site peer 34.208.51.148 authentication remote-id '34.208.51.148'
set vpn ipsec site-to-site peer 34.208.51.148 local-address '192.168.1.30'

最終的には以下のようなconfigを投入します。

AWSとは2本のIPsecを確立します。以下は1本のみの設定例です。

set interfaces vti vti0 address '169.254.60.98/30'
set interfaces vti vti0 description 'VPC tunnel 1'
set interfaces vti vti0 mtu '1436'

set vpn ipsec esp-group AWS compression 'disable'
set vpn ipsec esp-group AWS lifetime '3600'
set vpn ipsec esp-group AWS mode 'tunnel'
set vpn ipsec esp-group AWS pfs 'enable'
set vpn ipsec esp-group AWS proposal 1 encryption 'aes128'
set vpn ipsec esp-group AWS proposal 1 hash 'sha1'
set vpn ipsec ike-group AWS dead-peer-detection action 'restart'
set vpn ipsec ike-group AWS dead-peer-detection interval '15'
set vpn ipsec ike-group AWS dead-peer-detection timeout '30'
set vpn ipsec ike-group AWS lifetime '28800'
set vpn ipsec ike-group AWS proposal 1 dh-group '2'
set vpn ipsec ike-group AWS proposal 1 encryption 'aes128'
set vpn ipsec ike-group AWS proposal 1 hash 'sha1'
set vpn ipsec site-to-site peer 34.208.51.148 authentication id '203.165.200.XXX'
set vpn ipsec site-to-site peer 34.208.51.148 authentication mode 'pre-shared-secret'
set vpn ipsec site-to-site peer 34.208.51.148 authentication pre-shared-secret 'PGIenMtTm_hiLoR.i0OanVus86pq7nG7'
set vpn ipsec site-to-site peer 34.208.51.148 authentication remote-id '34.208.51.148'
set vpn ipsec site-to-site peer 34.208.51.148 description 'VPC tunnel 1'
set vpn ipsec site-to-site peer 34.208.51.148 ike-group 'AWS'
set vpn ipsec site-to-site peer 34.208.51.148 local-address '192.168.1.30'
set vpn ipsec site-to-site peer 34.208.51.148 vti bind 'vti0'
set vpn ipsec site-to-site peer 34.208.51.148 vti esp-group 'AWS'

ikeおよびipsecが確立している事を確認します。

vyos@vy030:~$ show vpn ike sa 
Peer ID / IP                            Local ID / IP               
------------                            -------------
34.208.51.148 34.208.51.148             192.168.1.30 203.165.200.XXX           

    State  IKEVer  Encrypt      Hash          D-H Group      NAT-T  A-Time  L-Time
    -----  ------  -------      ----          ---------      -----  ------  ------
    up     IKEv2   AES_CBC_128  HMAC_SHA1_96  MODP_1024      yes    128     0      

vyos@vy030:~$ 
vyos@vy030:~$ 
vyos@vy030:~$ show vpn ipsec sa
Connection              State    Uptime    Bytes In/Out    Packets In/Out    Remote address    Remote ID    Proposal
----------------------  -------  --------  --------------  ----------------  ----------------  -----------  ------------------------
peer_34-208-51-148_vti  up       2m15s     12K/13K         178/141           34.208.51.148     N/A          AES_CBC_128/HMAC_SHA1_96
vyos@vy030:~$ 

VTIは/30のIPアドレスが付与されています。必然と対向AWS側のIPアドレスは推定できますので、AWS側のVTIに対してping応答があるかを確認します。

vyos@vy030:~$ show interfaces 
Codes: S - State, L - Link, u - Up, D - Down, A - Admin Down
Interface        IP Address                        S/L  Description
---------        ----------                        ---  -----------
eth0             192.168.1.30/24                   u/u  
eth1             192.168.30.30/24                  u/u  
lo               127.0.0.1/8                       u/u  
                 ::1/128                                
vti0             169.254.60.98/30                  u/u  VPC tunnel 1
vyos@vy030:~$ 
vyos@vy030:~$ 
vyos@vy030:~$ ping 169.254.60.97 count 3
PING 169.254.60.97 (169.254.60.97) 56(84) bytes of data.
64 bytes from 169.254.60.97: icmp_seq=1 ttl=254 time=137 ms
64 bytes from 169.254.60.97: icmp_seq=2 ttl=254 time=138 ms
64 bytes from 169.254.60.97: icmp_seq=3 ttl=254 time=135 ms

--- 169.254.60.97 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 134.662/136.457/137.564/1.280 ms
vyos@vy030:~$ 

BGP設定

AWSから提示されたサンプル設定は旧体系のものですので、BGPに関してはほぼ全文の修正が必要です。また、サンプルでは0.0.0.0/0をadvertiseしていますが、何をadvertiseするかは環境に応じて適宜の変更をお願いします。

AWSとは2本のBGP neighborを確立します。以下は1本のみの設定例です。

[サンプル設定]
set protocols bgp 65000 neighbor 169.254.60.97 remote-as '64512'
set protocols bgp 65000 neighbor 169.254.60.97 soft-reconfiguration 'inbound'
set protocols bgp 65000 neighbor 169.254.60.97 timers holdtime '30'
set protocols bgp 65000 neighbor 169.254.60.97 timers keepalive '10'
set protocols bgp 65000 network 0.0.0.0/0

[サンプル修正例]
set protocols bgp local-as '65000'
set protocols bgp neighbor 169.254.60.97 remote-as '64512'
set protocols bgp neighbor 169.254.60.97 address-family ipv4-unicast soft-reconfiguration
set protocols bgp timers holdtime '30'
set protocols bgp timers keepalive '10
set protocols bgp address-family ipv4-unicast network 192.168.30.0/24

設定投入後、BGP neighborが確立された事を確認します。

vyos@vy030:~$ show ip bgp summary 

IPv4 Unicast Summary:
BGP router identifier 192.168.30.30, local AS number 65000 vrf-id 0
BGP table version 6
RIB entries 3, using 576 bytes of memory
Peers 1, using 21 KiB of memory

Neighbor        V         AS   MsgRcvd   MsgSent   TblVer  InQ OutQ  Up/Down State/PfxRcd   PfxSnt
169.254.60.97   4      64512       154       157        0    0    0 00:04:47            1        2

Total number of neighbors 1
vyos@vy030:~$ 

AWSからrecieveしているprefix、AWSへadvertiseしているprefixを確認します。

vyos@vy030:~$ show ip bgp neighbors 169.254.60.97 routes 
BGP table version is 6, local router ID is 192.168.30.30, vrf id 0
Default local pref 100, local AS 65000
Status codes:  s suppressed, d damped, h history, * valid, > best, = multipath,
               i internal, r RIB-failure, S Stale, R Removed
Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self
Origin codes:  i - IGP, e - EGP, ? - incomplete

   Network          Next Hop            Metric LocPrf Weight Path
*> 172.31.0.0/16    169.254.60.97          100             0 64512 i

Displayed  1 routes and 2 total paths
vyos@vy030:~$ 
vyos@vy030:~$ 
vyos@vy030:~$ show ip bgp neighbors 169.254.60.97 advertised-routes 
BGP table version is 6, local router ID is 192.168.30.30, vrf id 0
Default local pref 100, local AS 65000
Status codes:  s suppressed, d damped, h history, * valid, > best, = multipath,
               i internal, r RIB-failure, S Stale, R Removed
Nexthop codes: @NNN nexthop's vrf id, < announce-nh-self
Origin codes:  i - IGP, e - EGP, ? - incomplete

   Network          Next Hop            Metric LocPrf Weight Path
*> 172.31.0.0/16    0.0.0.0                                0 64512 i
*> 192.168.30.0/24  0.0.0.0                  0         32768 i

Total number of prefixes 2
vyos@vy030:~$ 

疎通確認

以上の設定により、AWS private gatewayまで疎通可能になりました。ですが、AWS側のルートテーブルが未設定のため、VPC配下のEC2やECSとは疎通不能の状況です。

オンプレミス側(この設定例の場合 192.168.30.0/24)をAWS private gatewaに向けるようなルートテーブルの設定をします。

AWS ルートテーブルの定義

疎通確認のため、適当なEC2インスタンスなどを構築し、ping疎通を確認します。

[ec2-user@ip-172-31-23-131 ~]$ ping -c 3 192.168.30.30
PING 192.168.30.30 (192.168.30.30) 56(84) bytes of data.
64 bytes from 192.168.30.30: icmp_seq=1 ttl=64 time=135 ms
64 bytes from 192.168.30.30: icmp_seq=2 ttl=64 time=137 ms
64 bytes from 192.168.30.30: icmp_seq=3 ttl=64 time=135 ms

--- 192.168.30.30 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 135.242/136.185/137.956/1.323 ms
[ec2-user@ip-172-31-23-131 ~]$ 

VyattaからAWSへの疎通を確認します。この時、interfaceを明示指定しなければ疎通不能になる事に注意してください。

interfaceを明示指定しない場合はVTIからicmpが送付されますが、VTIに付与された169.254.0.0/16のIPアドレスはAWSへadvertiseされていませんので、戻りの通信経路が疎通不能になります。

169.254.0.0/16はリンクローカルと呼ばれるアドレス帯でローカルで完結する処理を目的として使用します。従って、169.254.0.0/16をadvertiseするのは技術上は可能ですがマナー違反です。

vyos@vy030:~$ ping 172.31.23.131 count 3
PING 172.31.23.131 (172.31.23.131) 56(84) bytes of data.

--- 172.31.23.131 ping statistics ---
3 packets transmitted, 0 received, 100% packet loss, time 2076ms

vyos@vy030:~$ 
vyos@vy030:~$ 
vyos@vy030:~$ ping 172.31.23.131 interface 192.168.30.30 count 3
PING 172.31.23.131 (172.31.23.131) from 192.168.30.30 : 56(84) bytes of data.
64 bytes from 172.31.23.131: icmp_seq=1 ttl=254 time=147 ms
64 bytes from 172.31.23.131: icmp_seq=2 ttl=254 time=135 ms
64 bytes from 172.31.23.131: icmp_seq=3 ttl=254 time=136 ms

--- 172.31.23.131 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 134.616/139.083/146.644/5.375 ms
vyos@vy030:~$ 

補足 AWS側の操作

グローバルIPアドレスの確認

IPと接続する時のグローバルIPアドレスを確認します。この値はAWS側での操作に必要となります。

グローバルIPアドレスの確認

カスタマーゲートウェイ

「仮想プライベートネットワーク(VPN)」「カスタマーゲートウェイ」の順に画面遷移し、「カスタマーゲートウェイの作成」を押下します。

カスタマーゲートウェイの作成 01

「名前」は何か分かりやすい名称を、「IPアドレス」は先ほど調査したグローバルIPアドレスを入力します。Vyattaに付与されるプライベートIPアドレスではなく、AWS側から見た時のグローバルIPアドレスを入力します。

カスタマーゲートウェイの作成 02

仮想プライベートゲートウェイ

「仮想プライベートネットワーク(VPN)」「仮想プライベートゲートウェイ」の順に画面遷移し、「仮想プライベートゲートウェイの作成」を押下します。

仮想プライベートゲートウェイの作成 01

「名前タグ」は何か分かりやすい名称を入力します

仮想プライベートゲートウェイの作成 02

作成した仮想プライベートゲートウェイの「アクション」で「VPCにアタッチ」を選びます。

仮想プライベートゲートウェイの作成 03

接続したいVPCを選びます。

仮想プライベートゲートウェイの作成 04

サイト間VPN接続

「仮想プライベートネットワーク(VPN)」「サイト間VPN接続」の順に画面遷移し、「VPN接続の作成」を押下します。

サイト間VPNの作成 01

「名前タグ」は何か分かりやすい名称を、「仮想プライベートゲートウェイ」と「カスタマーゲートウェイID」は先ほど作成したものを紐付けます。

サイト間VPNの作成 02

画面を下の方へスクロールし、「VPNの作成」を押下します。

サイト間VPNの作成 03

サンプル設定のダウンロード

対象の「サイト間VPN接続」を選んだ状態で「設定のダウンロード」を押下します。その後、ベンダーを「Vyatta」にして、「ダウンロード」を押下します。

サンプル設定のダウンロード

タイトルとURLをコピーしました