AWS で VPC を VPN 接続するための VyOS 設定例
[履歴] [最終更新] (2017/04/10 23:03:32)
最近の投稿
注目の記事

概要

こちらのページで VirtualBox を用いて利用方法を把握した VyOS を AWS EC2 インスタンスで動作させ、こちらの OpenVPN と同様に、異なる二つの VPC を VPN 接続してみます。簡単な構成であれば、VPC Peering という AWS が提供する機能を用いても実現できますが、AWS 以外のデータセンターとの接続が必要な場合など、VyOS を用いると要求に柔軟に対応できます。

VPC の設定

  • myvpc-1 (10.1.0.0/16)
    • mysubnet-1 (10.1.1.0/24)
      • vyos-0001 (10.1.1.4, EIP xxx.xxx.xxx.xxx)
  • myvpc-2 (10.2.0.0/16)
    • mysubnet-2 (10.2.1.0/24)
      • vyos-0002 (10.2.1.4, EIP yyy.yyy.yyy.yyy)

ルーティングテーブル

myvpc-1

  • 0.0.0.0/0 → インターネットゲートウェイ
  • 10.0.0.0/8 → vyos-0001
  • 10.1.0.0/16 → local

myvpc-2

  • 0.0.0.0/0 → インターネットゲートウェイ
  • 10.0.0.0/8 → vyos-0002
  • 10.2.0.0/16 → local

セキュリティグループ

以下の接続を許可します。検証用ですので簡単のため 0.0.0.0/0 としています。セキュリティ上は好ましくありません。

  • TCP 22 from 0.0.0.0/0 (SSH)
  • UDP 1194 from 0.0.0.0/0 (OpenVPN)
  • ICMP ALL from 0.0.0.0/0 (ping 等)

VyOS EC2 インスタンスの用意

以下の二つのインスタンスを VyOS AMI を利用して用意します。インスタンス Launch 時に Community AMIs を選択して "vyos" という文字列で検索すると、リージョンに応じて複数の AMI が見つかります。2017/04/09 現在の Oregon リージョンで見つかった AMI のうち、VyOS (HVM) 1.1.7 (ami-ac23fccc) を利用することにします。

  • vyos-0001 (10.1.1.4, EIP xxx.xxx.xxx.xxx)
  • vyos-0002 (10.2.1.4, EIP yyy.yyy.yyy.yyy)

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

自分宛でないパケットも受信するように AWS 設定を変更

他の VPC に転送すべきパケットを受信するために、上記二つのインスタンスについて、AWS コンソールにおいて「Actions」→「Networking」→「Change Source/Dest. Check」を Disable します。

VPC 間 VPN 接続設定

サイト間 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

リモートアクセス VPN 接続設定 (参考情報)

VyOS で利用できる VPN 接続には、サイト間 VPN の他にリモートアクセス VPN があります。拠点間の接続ではなく、自宅等の PC を、ある拠点の LAN 内に仮想的に接続するために利用します。

関連ページ
    概要 AWS VPC と GCP VPC を IPsec-VPN で接続するための設定例を記載します。 Build HA VPN connections between Google Cloud and AWS AWS VPC の作成 VPC 10.2.0.0/16 ap-northeast-1b Subnet
    VPC Subnets for your VPC Subnet の最初の 4 IP と最後の 1 IP は予約されています。以下の IP は例です: 10.0.0.0 → ネットワークアドレス 10.0.0.1 → VPC router (AWS による予約) 10.0.0.2 → DNS サーバ (AWS による予約)