こちらのページで VirtualBox を用いて利用方法を把握した VyOS を AWS EC2 インスタンスで動作させ、こちらの OpenVPN と同様に、異なる二つの VPC を VPN 接続してみます。簡単な構成であれば、VPC Peering という AWS が提供する機能を用いても実現できますが、AWS 以外のデータセンターとの接続が必要な場合など、VyOS を用いると要求に柔軟に対応できます。
myvpc-1
myvpc-2
以下の接続を許可します。検証用ですので簡単のため 0.0.0.0/0 としています。セキュリティ上は好ましくありません。
以下の二つのインスタンスを VyOS AMI を利用して用意します。インスタンス Launch 時に Community AMIs を選択して "vyos" という文字列で検索すると、リージョンに応じて複数の AMI が見つかります。2017/04/09 現在の Oregon リージョンで見つかった AMI のうち、VyOS (HVM) 1.1.7 (ami-ac23fccc) を利用することにします。
SSH ログイン時に利用するユーザー名は vyos
です。
ssh -o ServerAliveInterval=1 -i /path/to/mykey.pem vyos@xxx.xxx.xxx.xxx
ssh -o ServerAliveInterval=1 -i /path/to/mykey.pem vyos@yyy.yyy.yyy.yyy
他の VPC に転送すべきパケットを受信するために、上記二つのインスタンスについて、AWS コンソールにおいて「Actions」→「Networking」→「Change Source/Dest. Check」を Disable します。
サイト間 VPN 接続には、二拠点間の通信を暗号化する方式によって、主に IPsec-VPN と SSL-VPN があります。IPsec-VPN は IP 層で暗号化などを行うため、例えばプロキシサーバーが存在する場合の NAT 越えが困難になりますが、一般に処理は高速であるとされます。SSL-VPN は VyOS の場合、TCP/UDP 上の OpenVPN が アプリケーションプロセスとして SSL 終端となります。NAT 越えなどが問題になりません。
公式ドキュメントによると VyOS の場合は OpenVPN による SSL-VPN を用いても性能は大きく変わらないとありますので、ここでは設定の簡単な OpenVPN によるサイト間 VPN 接続を行います。
As a software router and firewall, VyOS does not see a performance gain for IPSec, or rather, a performance penalty for SSL VPN solutions such as OpenVPN.
If building a VPN solution using VyOS exclusively, OpenVPN will generally provide the best results in terms of ease-of-use, stability, and performance
https://wiki.vyos.net/wiki/User_Guide#OpenVPN
事前に共有鍵を生成します。生成された鍵は vyos-0002 に scp 等でコピーします。
vyos@vyos-0001:~$ generate openvpn key openvpn-20170409.key
Generating OpenVPN key to /config/auth/openvpn-20170409.key
Your new local OpenVPN key has been generated
vyos@vyos-0001:~$ ls -l /config/auth/
total 4
-rw------- 1 root vyattacfg 636 Apr 9 16:55 openvpn-20170409.key
それぞれ OpenVPN の設定を行います。
vyos-0001
set interfaces openvpn vtun1 mode site-to-site
set interfaces openvpn vtun1 protocol udp
set interfaces openvpn vtun1 persistent-tunnel
set interfaces openvpn vtun1 encryption aes256
set interfaces openvpn vtun1 hash sha256
set interfaces openvpn vtun1 shared-secret-key-file /config/auth/openvpn-20170409.key
set interfaces openvpn vtun1 remote-host yyy.yyy.yyy.yyy ←相手のVPNサーバ
set interfaces openvpn vtun1 remote-port 1194
set interfaces openvpn vtun1 local-address 169.254.255.1 ←OpenVPN 同士で利用する自分と相手のIP
set interfaces openvpn vtun1 remote-address 169.254.255.2
set protocols static interface-route 10.2.0.0/16 next-hop-interface vtun1 ←ルーティングするパケット
commit
save
vyos-0002
set interfaces openvpn vtun1 mode site-to-site
set interfaces openvpn vtun1 protocol udp
set interfaces openvpn vtun1 persistent-tunnel
set interfaces openvpn vtun1 encryption aes256
set interfaces openvpn vtun1 hash sha256
set interfaces openvpn vtun1 shared-secret-key-file /config/auth/openvpn-20170409.key
set interfaces openvpn vtun1 remote-host xxx.xxx.xxx.xxx
set interfaces openvpn vtun1 remote-port 1194
set interfaces openvpn vtun1 local-address 169.254.255.2
set interfaces openvpn vtun1 remote-address 169.254.255.1
set protocols static interface-route 10.1.0.0/16 next-hop-interface vtun1
commit
save
動作検証やログ確認を行います。
run show interfaces openvpn vtun1
run show log openvpn
ping 10.1.1.4
ping 10.2.1.4
VyOS で利用できる VPN 接続には、サイト間 VPN の他にリモートアクセス VPN があります。拠点間の接続ではなく、自宅等の PC を、ある拠点の LAN 内に仮想的に接続するために利用します。