VyOS を AWS EC2 インスタンスで動作させ、異なる二つの 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)
- mysubnet-1 (10.1.1.0/24)
- 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)
- mysubnet-2 (10.2.1.0/24)
ルーティングテーブル
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 内に仮想的に接続するために利用します。
関連記事
- Ciscoルータの基本操作シスコ社の製品のうち、ルータは Cisco*** という製品名でスイッチは Catalyst*** という製品名です。いずれも *** は機種番号で、数字が小さいほど小規模ネットワーク向けとなっています。例えば資格試験 CCNA Routing and Switching では小規模および中規模ネットワークが対象です。そのため、中小規模のネットワークのルータおよびス
- BIND 9 ゾーンファイル Dynamic Update の設定方法DHCP 環境下などで IP が動的に付与される場合は DNS レコードを動的に更新する必要があります。これを実現する Dynamic Update 機能が BIND 9 には実装されています。使用方法をまとめます。Dynamic Update に対応した DNS を特に Dynamic DNS または DDNS とよぶことがあります。 ゾーンファイルの作成 ローカルホストに example.co...
- VyOS の基本的なルーティング設定本ページでは、複数の LAN をつなぐルータとしての設定方法をまとめます。具体的には、スタティックルーティングおよびダイナミックルーティング (RIP/OSPF/BGP)の設定方法を把握します。 設定方法を検証するための構成 ルーティング設定の検証を行うために VirtualBox で 5 台の VM を用意します。ホスト OS から vyos-0001 へ SSH 接続する部分を除き、「内部ネッ...
- BIND 9.10.2 の公式マニュアルに学ぶ DNS の基本DNS の実装としては Internet Systems Consortium (ISC) の Berkeley Internet Name Domain (BIND) が有名です。本ページは公式サイトの Documentation からダウンロードできる v9.10.2 の PDF マニュアルおよび『DNSの仕組み完全解説』から基本事項を抽出してまとめ
- スタティックルートの設定インターフェイスに IP を設定しただけでは他のデバイスと通信できません。各デバイスにルーティングテーブルを設定する必要があります。ルーティングテーブルの設定方法には動的に自動設定するものと、静的に手動設定するものの二種類があります。ここでは静的に手動設定するスタティックルートの方法を紹介します。 具体的にはまず PC0, PC1, Router0, Router1 それぞれ