AWSのSite to Site VPNのサービスを使って、VPCと自宅のネットワークを接続してみた時の備忘録です。
自宅のVPNゲートウェイは、古いPCにvyosをインストールしたものを使いました。2022/06/27現在、AWSが出力するカスタマーゲートウェイ用の設定を使うためには1.3系のvyosが必要です。1.4系ではvyosのコマンドが変わっていて、うまく設定できませんでした。
ベースとする環境
仮想プライベートゲートウェイによるSite to Site VPN接続
仮想プライベートゲートウェイを使って自宅のネットワークとSite to Site VPNをしてみます。
下記が最終的な構成です。
[AWS] 仮想プライベートゲートウェイの作成
- AWSマネコンでVPCを選択します
- 仮想プライベートネットワーク -> 仮想プライベートゲートウェイを選択します
- 仮想プライベートゲートウェイを作成します
- アクション -> VPCにアタッチ を選択して、作成した仮想プライベートゲートウェイをVPCにアタッチします
[AWS] カスタマーゲートウェイの作成
- AWSマネコンでVPCを選択します
- 仮想プライベートネットワーク -> カスタマーゲートウェイを選択します
- カスタマーゲートウェイを作成します
- IPアドレスには自宅のグローバルIPアドレスを設定します
[AWS] Site to Site VPNの作成
- AWSマネコンでVPCを選択します
- 仮想プライベートネットワーク -> Site to Site VPNを選択してVPNを作成します
- 仮想プライベートゲートウェイと、カスタマーゲートウェイに、先ほど作成したものを設定します
- ルーティングオプションではBGPを有効にしておきます
[自宅] vyosのインストール
vyosの1.3系をインストールします。
LTS版は有償なので、下記からRC版のisoイメージをダウンロードします。
https://vyos.net/get/snapshots/
RC版にもいくつかありますが、今回はrc6を選択しました。vyos-1.3.0-rc6-amd64.iso (vyos-1.3.0-rc6)
isoイメージからインストール用のブータブルUSBを作成して、古いPC(Let's note CF-N10 SandyBridge世代)にインストールします。
[自宅] vyosのネットワーク設定
AWSの仮想プライベートゲートウェイと通信する側のインターフェス(WAN側インタフェース)と内側のインタフェース(LAN側インタフェース)の設定をします。
IPアドレスはWAN側は上位のルーターからDHCPでもらいます。LAN側は固定IPにします。今回はWiFiをWAN側、有線LANをLAN側のインタフェースとして使いました。
WAN側インタフェースの設定
configure
set interfaces wireless wlan0 type station
set interfaces wireless wlan0 security wpa mode wpa2
set interfaces wireless wlan0 ssid <WiFi接続先のSSID>
set interfaces wireless wlan0 security wpa passphrase <WiFi接続用のパスワード>
set interfaces wireless wlan0 address dhcp
commit
save
LAN側インタフェースの設定
configure
set interfaces ethernet eth0 address 172.16.0.1/16
commit
save
LAN側DHCPサーバーの設定
LAN側に接続されたクライアントにIPを払い出すためにDHCPサーバーの設定をします。
set service dhcp-server shared-network-name dhcp1
set service dhcp-server shared-network-name dhcp1 subnet 172.16.0.0/16 default-router 172.16.0.1
set service dhcp-server shared-network-name dhcp1 subnet 172.16.0.0/16 range 1 start 172.16.0.2
set service dhcp-server shared-network-name dhcp1 subnet 172.16.0.0/16 range 1 stop 172.16.0.9
[自宅] vyosのVPN設定(vyosをカスタマーゲートウェイにする設定)
AWSマネージメントコンソールのSite to Site VPNの画面から、「設定をダウンロード」を選択して、vyos用のVPN設定ファイルをダウンロードします。
設定ファイルの中身は、vyos用のIPSec VPNとBGPを設定するためのコマンドリストです。
IKE設定、IPsec設定、トンネルインタフェース設定、BGP設定に別れているので、内容を確認し、必要に応じて環境に合わせて修正して実行していきます。
VPNトンネルを2本接続して冗長構成にすることが推奨されていますが、お試しなので1本だけの接続にします。設定ファイルの2本目の設定項目は使用しません。
IKE設定
<y.y.y.y>
の部分を元の設定から変更します。NAT配下からNATトラバーサル機能を使って接続するため、local-address部はグローバルIPではなく、vyosのWAN側インタフェースのプライベートIPに変更します。
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 <x.x.x.x> authentication mode 'pre-shared-secret'
set vpn ipsec site-to-site peer <x.x.x.x> authentication pre-shared-secret '<事前共有キー>'
set vpn ipsec site-to-site peer <x.x.x.x> description 'VPC tunnel 1'
set vpn ipsec site-to-site peer <x.x.x.x> ike-group 'AWS'
set vpn ipsec site-to-site peer <x.x.x.x> local-address <y.y.y.y>
set vpn ipsec site-to-site peer <x.x.x.x> vti bind 'vti0'
set vpn ipsec site-to-site peer <x.x.x.x> vti esp-group 'AWS'
IPsec設定
WAN側インタフェースにwlan0を使うので、ipsec-interfaces interface
をwlan0
に変更します。
set vpn ipsec ipsec-interfaces interface 'wlan0'
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'
BGP設定
BGPの設定コマンドの一部の仕様が変わっているため、新しい仕様に合わせて書き換えます。具体的には、address-family ipv4-unicat
を追加します。
set protocols bgp 65000 neighbor 169.254.92.205 remote-as '64512'
set protocols bgp 65000 neighbor 169.254.92.205 address-family ipv4-unicast soft-reconfiguration 'inbound'
set protocols bgp 65000 neighbor 169.254.92.205 timers holdtime '30'
set protocols bgp 65000 neighbor 169.254.92.205 timers keepalive '10'
set protocols bgp 65000 address-family ipv4-unicast network 0.0.0.0/0
[自宅] NAT越えのための設定
vyosでのNAT-Traversal設定
今回はONU + Router配下から接続するので、NAT-Traversalを有効にします。この設定は、AWSからダウンロードする設定ファイルには含まれていません。
set vpn ipsec nat-traversal enable
set vpn ipsec nat-networks allowed-network 0.0.0.0/0
ONU + ルータのポートマッピング設定
ONU + ルータのポートマッピング設定に、UDPの500と4500への通信を、vyosが起動しているPCのIPアドレスに転送するルールを追加します。
[AWS] 仮想プライベートゲートウェイへのルーティング設定
VPCのPrivate Subnetのルーティングテーブルに、自宅側のネットワーク(172.16.0.0/16)向けの通信の宛先を仮想プライベートゲートウェイにするルールを追加します。
[AWS] EC2のセキュリティグループ設定
Private SubnetのEC2インスタンスのセキュリティグループを変更して、自宅のプライベートIPアドレス(172.16.0.0/16)からI通信を許可します。
VPN接続状態の確認
以上でIPsecによるVPN接続ができているはずですので、状態を確認していきます。
AWS上の確認
AWSマネージメントコンソールのSite to Site VPNの設定画面で、トンネルの状態を確認します。vyos側では、2本のうちの1本目の設定しかしていないため、1本目がUpステータスになっていれば、期待通りの動作です。
VPCのPrivate Subnet上のEC2から、自宅のvyos配下のchromebookに向けてPingを打ってみます。
sh-4.2$ ping 172.16.0.2
PING 172.16.0.1 (172.16.0.2) 56(84) bytes of data.
64 bytes from 172.16.0.2: icmp_seq=1 ttl=64 time=133 ms
VPC -> 自宅が疎通しました。
自宅のvyosの状態確認
vyosの下記のコマンドを使って、IKEとIPsecのトンネルが貼られていることを確認します。
vyos@vyos:~$ show vpn ike sa
Peer ID / IP Local ID / IP
------------ -------------
x.x.x.x y.y.y.y
Description: VPC tunnel 1
State IKEVer Encrypt Hash D-H Group NAT-T A-Time L-Time
----- ------ ------- ---- --------- ----- ------ ------
up IKEv1 aes128 sha1_96 2(MODP_1024) no 3600 28800
vyos@vyos:~$ show vpn ipsec sa
Connection State Uptime Bytes In/Out Packets In/Out Remote address Remote ID Proposal
--------------------------- ------- -------- -------------- ---------------- ---------------- ----------- ----------------------------------
peer-x.x.x.x-tunnel-vti up 7m46s 6K/6K 100/101 x.x.x.x N/A AES_CBC_128/HMAC_SHA1_96/MODP_1024
ルーティングテーブルも確認してみます。
vyos@vyos:~$ route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 192.168.0.1 0.0.0.0 UG 20 0 0 wlan0
10.60.0.0 169.254.92.205 255.255.0.0 UG 20 0 0 vti0
169.254.92.204 0.0.0.0 255.255.255.252 U 0 0 0 vti0
172.16.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 wlan0
自宅のvyosのPCの配下に接続したchromebook(172.16.0.2)からEC2のプライベートIPアドレスを指定してPingを打ってみます。
ping 10.60.2.250
64byte from 10.60.2.250: icmp_seq=1 ttl=251 time=139 ms
自宅 -> VPCも疎通しました。