fbpx

ソフトウェアルータVyattaとVyOSを用いてSoftLayerとAmazon VPCをIPsec VPN接続する #softlayer

この記事は1年以上前に投稿されました。情報が古い可能性がありますので、ご注意ください。

以前の記事では、SoftLayer とオフィスをソフトウェアルータ Vyatta と VyOS を用いて IPsec VPN 接続を行いました。

本記事では、ソフトウェアルータの Vyatta および VyOS を用いて SoftLayer と Amazon VPC を IPsec VPN 接続してみます。

前提とする検証環境

SoftLayer と Amazon VPC それぞれの IPsec VPN ゲートウェイは、無償版 Vyatta および VyOS を用いて検証を行います。SoftLayer 側を有償版 Vyatta に置き換え、Amazon VPC 側を VyOS や Vyatta と通信可能なルータに置き換えても動作すると思われます。

Amazon VPC 側は Elastic IP アドレスを用いてインターネットに接続するとします。


amazon-vpc-softlayer-vyos

Amazon VPC 側

VyOS 1.0.4 amd64 rev1 (PV) - ami-cf5b07ce (Community AMI)
Elastic IP アドレス: 54.XXX.XXX.161
パブリックサブネット側: 10.0.0.10 (eth0)
プライベートサブネット側: 10.0.1.10 (eth1)

SoftLayer 側

Vyatta (6.6 Community Edition)
グローバル側: 158.XXX.XXX.100 (eth1)
プライベート側: 10.114.15.4 (eth0)

SoftLayer 側の Vyatta の IPsec VPN 設定

SoftLayer 側の Vyatta の設定を行います。

IPsec を有効にするインターフェイスを Vyatta のパブリック側の eth1 に設定します。


vyatta@vyatta-sl# set vpn ipsec ipsec-interfaces interface eth1
[edit]
vyatta@vyatta-sl#

NAT トラバーサルを有効にします。許可するネットワークは Amazon VPC のプライベート側サブネットの 10.0.1.0/24 です。


vyatta@vyatta-sl# set vpn ipsec nat-traversal enable
[edit]
vyatta@vyatta-sl# set vpn ipsec nat-networks allowed-network 10.0.1.0/24
[edit]
vyatta@vyatta-sl#

IKE と ESP の設定

グループ名以外の設定は、ピアリングする両者で一致していなければいけません。

IKE のグループ名を IKE-1-EAST とします。


vyatta@vyatta-sl# set vpn ipsec ike-group IKE-1-EAST
[edit]
vyatta@vyatta-sl#

1つ目の Proposal は暗号アルゴリズムを aes256、ハッシュアルゴリズムを sha1 とします。


vyatta@vyatta-sl# set vpn ipsec ike-group IKE-1-EAST proposal 1 encryption aes256
[edit]
vyatta@vyatta-sl# set vpn ipsec ike-group IKE-1-EAST proposal 1 hash sha1
[edit]
vyatta@vyatta-sl#

2つ目の Proposal は aes128sha1 とします。


vyatta@vyatta-sl# set vpn ipsec ike-group IKE-1-EAST proposal 2 encryption aes128
[edit]
vyatta@vyatta-sl# set vpn ipsec ike-group IKE-1-EAST proposal 2 hash sha1
[edit]
vyatta@vyatta-sl#

IKE の lifetime は 3600 とします。


vyatta@vyatta-sl# set vpn ipsec ike-group IKE-1-EAST lifetime 3600
[edit]
vyatta@vyatta-sl#

ESP のグループ名を ESP-1-EAST とします。


vyatta@vyatta-sl# set vpn ipsec esp-group ESP-1-EAST
[edit]
vyatta@vyatta-sl#

ESP の Proposal は IKE と同様にします。


vyatta@vyatta-sl# set vpn ipsec esp-group ESP-1-EAST proposal 1 encryption aes256
[edit]
vyatta@vyatta-sl# set vpn ipsec esp-group ESP-1-EAST proposal 1 hash sha1
[edit]
vyatta@vyatta-sl#


vyatta@vyatta-sl# set vpn ipsec esp-group ESP-1-EAST proposal 2 encryption aes128
[edit]
vyatta@vyatta-sl# set vpn ipsec esp-group ESP-1-EAST proposal 2 hash sha1
[edit]
vyatta@vyatta-sl#

ESP の lifetime は 3600 とします。


vyatta@vyatta-sl# set vpn ipsec esp-group ESP-1-EAST lifetime 3600
[edit]
vyatta@vyatta-sl#

ピアリングの設定

Amazon VPC 側の VyOS と接続するための設定を行います。
接続先は任意の IP アドレスを意味する 0.0.0.0 を指定します。この場合、Amazon VPC 側の VyOS から SoftLayer 側の Vyatta に対して接続を開始する形となります。


vyatta@vyatta-sl# set vpn ipsec site-to-site peer 0.0.0.0
[edit]
vyatta@vyatta-sl#

認証モードに pre-shared-secret 方式を指定し、オフィス側の VyOS で指定したものと同じ文字列を設定します。


vyatta@vyatta-sl# set vpn ipsec site-to-site peer 0.0.0.0 authentication mode pre-shared-secret
[edit]
vyatta@vyatta-sl# set vpn ipsec site-to-site peer 0.0.0.0 authentication pre-shared-secret PRE_SHARED_SECRET
[edit]
vyatta@vyatta-sl#

先に設定した ESP-1-EASTIKE-1-EAST をそれぞれ指定します。


vyatta@vyatta-sl# set vpn ipsec site-to-site peer 0.0.0.0 default-esp-group ESP-1-EAST
[edit]
vyatta@vyatta-sl# set vpn ipsec site-to-site peer 0.0.0.0 ike-group IKE-1-EAST
[edit]
vyatta@vyatta-sl#

SoftLayer の Vyatta のパブリック側の IP アドレス 158.XXX.XXX.100 を指定します。


vyatta@vyatta-sl# set vpn ipsec site-to-site peer 0.0.0.0 local-address 158.XXX.XXX.100
[edit]
vyatta@vyatta-sl#

トンネルのローカル側ネットワークは SoftLayer の Vyatta のプライベート側のネットワークアドレス 10.114.15.1/26 を、リモート側ネットワークは Amazon VPC のプライベート側サブネット 10.0.1.0/24 を指定します。


vyatta@vyatta-sl# set vpn ipsec site-to-site peer 0.0.0.0 tunnel 1 local prefix 10.114.15.1/26
[edit]
vyatta@vyatta-sl# set vpn ipsec site-to-site peer 0.0.0.0 tunnel 1 remote prefix 10.0.1.0/24
[edit]
vyatta@vyatta-sl#

ファイアウォールの設定

お互いのプライベートネットワークと、IPsec のトラフィックのみを許可するよう設定します。


vyatta@vyatta-sl# set firewall name softlayer-fw
[edit]
vyatta@vyatta-sl# set firewall name softlayer-fw default-action drop
[edit]
vyatta@vyatta-sl# set firewall name softlayer-fw enable-default-log
[edit]
vyatta@vyatta-sl# set firewall name softlayer-fw rule 100 action accept
[edit]
vyatta@vyatta-sl# set firewall name softlayer-fw rule 100 source address 10.0.0.0/16
[edit]
vyatta@vyatta-sl# set firewall name softlayer-fw rule 110 action accept
[edit]
vyatta@vyatta-sl# set firewall name softlayer-fw rule 110 source address 10.114.15.1/26
[edit]
vyatta@vyatta-sl# set firewall name softlayer-fw rule 120 action accept
[edit]
vyatta@vyatta-sl# set firewall name softlayer-fw rule 120 destination port 500
[edit]
vyatta@vyatta-sl# set firewall name softlayer-fw rule 120 protocol udp
[edit]
vyatta@vyatta-sl# set firewall name softlayer-fw rule 130 action accept
[edit]
vyatta@vyatta-sl# set firewall name softlayer-fw rule 130 destination port 4500
[edit]
vyatta@vyatta-sl# set firewall name softlayer-fw rule 130 protocol udp
[edit]
vyatta@vyatta-sl# set firewall name softlayer-fw rule 140 action accept
[edit]
vyatta@vyatta-sl# set firewall name softlayer-fw rule 140 protocol esp
[edit]
vyatta@vyatta-sl#

確立したセッションと関係するセッションを許可するよう設定します。


vyatta@vyatta-sl# set firewall state-policy established action accept
[edit]
vyatta@vyatta-sl# set firewall state-policy related action accept
[edit]
vyatta@vyatta-sl#

ファイアウォールのルールを eth1 に適用します。


vyatta@vyatta-sl# set interfaces ethernet eth1 firewall in name softlayer-fw
[edit]
vyatta@vyatta-sl# set interfaces ethernet eth1 firewall local name softlayer-fw
[edit]
vyatta@vyatta-sl#

eth0 側に NAT を設定します。


vyatta@vyatta-sl# set nat source rule 10 outbound-interface eth0
[edit]
vyatta@vyatta-sl# set nat source rule 10 source address 10.114.15.1/26
[edit]
vyatta@vyatta-sl# set nat source rule 10 translation address masquerade
[edit]
vyatta@vyatta-sl#

設定を反映して保存します。


vyatta@vyatta-sl# commit
[edit]
vyatta@vyatta-sl# save
Saving configuration to '/config/config.boot'...
Done
[edit]
vyatta@vyatta-sl#

Amazon VPC の設定

ここでは Amazon VPC がない状態から新しく作成するものとします。必要に応じて値の読み替えや適宜手順のスキップを行ってください。

VPC の作成

VPC Dashboard から [Start VPC Wizard] ボタンを押してください。


01-00-vpc-dashboard

VPC with a Single Public Subnet を選択し [Select] ボタンを押してください。
各 VPC の違いは Amazon VPC のシナリオ を参照してください。


01-01-select-a-vpc-configuration

IP CIDR block を 10.0.0.0/16、Public subnet を 10.0.0.0/24 として [Create VPC] ボタンを押してください。


01-02-vpc-with-a-single-public-subnet

VPC の作成に成功したら、サイドメニューの Your VPCs から作成した VPC を確認してください。


01-04-your-vpcs

サイドメニューの Subnets から作成したサブネットを確認してください。


01-05-subnets-summary

このサブネット 10.0.0.0/24 はパブリック側として用います。

さらに、[Create Subnet] ボタンからサブネットを追加します。


05-02-create-subnet

CIDR block を 10.0.1.0/24 とし、[Yes, Create] ボタンを押します。このサブネットはプライベート側として用います。

VyOS インスタンスの作成

EC2 Dashboard から AMI を用いてインスタンスを作成します。
ここでは Community AMI の VyOS 1.0.4 amd64 rev1 (PV) - ami-cf5b07ce を用います。


02-01-choose-an-amazon-machine-image

ネットワークインターフェイスには、先に作成した VPC サブネットを結びつけます。eth0 はパブリック側サブネットで IP アドレスを 10.0.0.10 に、eth1 はプライベート側サブネットで IP アドレスを 10.0.1.10 としてください。


02-03-configure-instance-details

Elastic IP アドレスの割り当て

EC2 Dashboard の Elastic IPs から Elastic IP アドレスを確保します。この際、VPC を選択してください。


03-01-allocate-new-address

確保した Elastic IP アドレスを、先に作成した VyOS インスタンスのパブリック側 IP アドレスに割り当てます。


03-04-associate-address

Amazon VPC 側 VyOS の IPsec VPN 設定

まずネットワークの設定を行います。
ただし、configure からの設定が行えないので、/etc/network/interfaces を直接編集します。


vyos@vyos:~$ sudo vi /etc/network/interfaces
# Used by ifup(8) and ifdown(8). See the interfaces(5) manpage or
# /usr/share/doc/ifupdown/examples for more information.

# The loopback network interface
auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 10.0.0.10
netmask 255.255.255.0
gateway 10.0.0.1


auto eth1
iface eth1 inet static
address 10.0.1.10
netmask 255.255.255.0
vyos@vyos:~$

一旦インスタンスを再起動します。

IPsec を有効にするインターフェイスを VyOS のパブリック側の eth0 に設定します。


vyos@vyos# set vpn ipsec ipsec-interfaces interface eth0
[edit]
vyos@vyos#

NAT トラバーサルを有効にします。許可するネットワークは SoftLayer のプライベートネットワークの 10.114.15.1/26 です。


vyos@vyos# set vpn ipsec nat-traversal enable
[edit]
vyos@vyos# set vpn ipsec nat-networks allowed-network 10.114.15.1/26
[edit]
vyos@vyos#

IKE と ESP の設定

グループ名以外の設定は、ピアリングする両者で一致していなければいけません。

IKE のグループ名を IKE-1-WEST とします。


vyos@vyos# set vpn ipsec ike-group IKE-1-WEST
[edit]
vyos@vyos# set vpn ipsec ike-group IKE-1-WEST proposal 1 encryption aes256
[edit]
vyos@vyos# set vpn ipsec ike-group IKE-1-WEST proposal 1 hash sha1
[edit]
vyos@vyos# set vpn ipsec ike-group IKE-1-WEST proposal 2 encryption aes128
[edit]
vyos@vyos# set vpn ipsec ike-group IKE-1-WEST proposal 2 hash sha1
[edit]
vyos@vyos# set vpn ipsec ike-group IKE-1-WEST lifetime 3600
[edit]
vyos@vyos#

ESP のグループ名を ESP-1-WEST とします。


vyos@vyos# set vpn ipsec esp-group ESP-1-WEST proposal 1 encryption aes256
[edit]
vyos@vyos# set vpn ipsec esp-group ESP-1-WEST proposal 1 hash sha1
[edit]
vyos@vyos# set vpn ipsec esp-group ESP-1-WEST proposal 2 encryption aes128
[edit]
vyos@vyos# set vpn ipsec esp-group ESP-1-WEST proposal 2 hash sha1
[edit]
vyos@vyos# set vpn ipsec esp-group ESP-1-WEST lifetime 3600
[edit]
vyos@vyos#

ピアリングの設定

SoftLayer 側の Vyatta と接続するための設定を行います。
接続先は SoftLayer 側の Vyatta のパブリック IP アドレスの 158.XXX.XXX.100 とします。


vyos@vyos# set vpn ipsec site-to-site peer 158.XXX.XXX.100
[edit]
vyos@vyos# set vpn ipsec site-to-site peer 158.XXX.XXX.100 authentication mode pre-shared-secret
[edit]
vyos@vyos# set vpn ipsec site-to-site peer 158.XXX.XXX.100 authentication pre-shared-secret PRE_SHARED_SECRET
[edit]
vyos@vyos# set vpn ipsec site-to-site peer 158.XXX.XXX.100 default-esp-group ESP-1-WEST
[edit]
vyos@vyos# set vpn ipsec site-to-site peer 158.XXX.XXX.100 ike-group IKE-1-WEST
[edit]
vyos@vyos#

Amazon VPC 側の VyOS のパブリック側サブネットの IP アドレス 10.0.0.10 を指定します。


vyos@vyos# set vpn ipsec site-to-site peer 158.XXX.XXX.100 local-address 10.0.0.10
[edit]
vyos@vyos#

トンネルのローカル側ネットワークは Amazon VPC のプライベート側サブネット 10.0.1.0/24 を、リモート側ネットワークは SoftLayer のプライベート側ネットワーク 10.114.15.1/26 を指定します。


vyos@vyos# set vpn ipsec site-to-site peer 158.XXX.XXX.100 tunnel 1 local prefix 10.0.1.0/24
[edit]
vyos@vyos# set vpn ipsec site-to-site peer 158.XXX.XXX.100 tunnel 1 remote prefix 10.114.15.1/26
[edit]
vyos@vyos#

ファイアウォールの設定

お互いのプライベートネットワークと、IPsec のトラフィックのみ、さらに SSH を許可するように設定します。


vyos@vyos# set firewall name amazon-fw
[edit]
vyos@vyos# set firewall name amazon-fw default-action drop
[edit]
vyos@vyos# set firewall name amazon-fw enable-default-log
[edit]
vyos@vyos# set firewall name amazon-fw rule 100 action accept
[edit]
vyos@vyos# set firewall name amazon-fw rule 100 source address 10.0.0.0/16
[edit]
vyos@vyos# set firewall name amazon-fw rule 110 action accept
[edit]
vyos@vyos# set firewall name amazon-fw rule 110 source address 10.114.15.1/26
[edit]
vyos@vyos# set firewall name amazon-fw rule 120 action accept
[edit]
vyos@vyos# set firewall name amazon-fw rule 120 destination port 500
[edit]
vyos@vyos# set firewall name amazon-fw rule 120 protocol udp
[edit]
vyos@vyos# set firewall name amazon-fw rule 130 action accept
[edit]
vyos@vyos# set firewall name amazon-fw rule 130 destination port 4500
[edit]
vyos@vyos# set firewall name amazon-fw rule 130 protocol udp
[edit]
vyos@vyos# set firewall name amazon-fw rule 140 action accept
[edit]
vyos@vyos# set firewall name amazon-fw rule 140 protocol esp
[edit]
vyos@vyos# set firewall name amazon-fw rule 150 action accept
[edit]
vyos@vyos# set firewall name amazon-fw rule 150 destination port 22
[edit]
vyos@vyos# set firewall name amazon-fw rule 150 protocol tcp
[edit]
vyos@vyos#

確立したセッションと関係するセッションを許可するよう設定します。


vyos@vyos# set firewall state-policy established action accept
[edit]
vyos@vyos# set firewall state-policy related action accept
[edit]
vyos@vyos#

ファイアウォールのルールを eth0 に適用します。


vyos@vyos# set interfaces ethernet eth0 firewall in name amazon-fw
[edit]
vyos@vyos# set interfaces ethernet eth0 firewall local name amazon-fw
[edit]
vyos@vyos#

eth1 側に NAT を設定します。


vyos@vyos# set nat source rule 10 outbound-interface eth1
[edit]
vyos@vyos# set nat source rule 10 source address 10.0.1.0/24
[edit]
vyos@vyos# set nat source rule 10 translation address masquerade
[edit]
vyos@vyos#

設定を反映して保存します。


vyos@vyos# commit
[edit]
vyos@vyos# save
Saving configuration to '/config/config.boot'...
Done
[edit]
vyos@vyos#

接続確認

Amazon VPC 側の VyOS、SoftLayer 側の Vyatta のそれぞれで show vpn ike sa を実行してください。


vyos@vyos:~$ show vpn ike sa
Peer ID / IP Local ID / IP
------------ -------------
158.XXX.XXX.100 10.0.0.10

State Encrypt Hash D-H Grp NAT-T A-Time L-Time
----- ------- ---- ------- ----- ------ ------
up aes256 sha1 5 yes 2211 3600


vyos@vyos:~$


vyatta@vyatta-sl:~$ show vpn ike sa
Peer ID / IP Local ID / IP
------------ -------------
54.XXX.XXX.161 158.XXX.XXX.100

State Encrypt Hash D-H Grp NAT-T A-Time L-Time
----- ------- ---- ------- ----- ------ ------
up aes256 sha1 5 yes 1209 3600


vyatta@vyatta-sl:~$

両方の State が up になっていれば、IPsec VPN 接続が確立しています。

今回はネットワークにクライアントは置いていないため、お互いのプライベート側 IP アドレスに ping を実行して確認とします。


vyos@vyos:~$ /bin/ping -c 4 10.114.15.4
PING 10.114.15.4 (10.114.15.4) 56(84) bytes of data.
64 bytes from 10.114.15.4: icmp_req=1 ttl=64 time=164 ms
64 bytes from 10.114.15.4: icmp_req=2 ttl=64 time=164 ms
64 bytes from 10.114.15.4: icmp_req=3 ttl=64 time=164 ms
64 bytes from 10.114.15.4: icmp_req=4 ttl=64 time=164 ms


--- 10.114.15.4 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3003ms
rtt min/avg/max/mdev = 164.704/164.817/164.937/0.414 ms
vyos@vyos:~$


vyatta@vyatta-sl:~$ /bin/ping -c 4 10.0.1.10
PING 10.0.1.10 (10.0.1.10) 56(84) bytes of data.
64 bytes from 10.0.1.10: icmp_req=1 ttl=64 time=164 ms
64 bytes from 10.0.1.10: icmp_req=2 ttl=64 time=164 ms
64 bytes from 10.0.1.10: icmp_req=3 ttl=64 time=164 ms
64 bytes from 10.0.1.10: icmp_req=4 ttl=64 time=164 ms


--- 10.0.1.10 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 164.706/164.800/164.886/0.064 ms
vyatta@vyatta-sl:~$

どちらも応答がありました。

まとめ

ソフトウェアルータの Vyatta および VyOS を用いて SoftLayer と Amazon VPC を IPsec VPN 接続してみました。本記事では単純に VPN ルータ同士を接続しただけですが、パブリッククラウド間であっても安全に接続できることがわかるかと思います。是非活用してみてください。

参考文献

Author

Chef・Docker・Mirantis製品などの技術要素に加えて、会議の進め方・文章の書き方などの業務改善にも取り組んでいます。「Chef活用ガイド」共著のほか、Debian Official Developerもやっています。

Daisuke Higuchiの記事一覧

新規CTA