VyOS 1.3 での WireGuard を利用した site間のVPN設定を紹介します。
WireGuardの設定はIPsecに比べて設定項目が少ない比較的に簡単にできます。接続先のIP/ポート番号/公開鍵キーだけで設定することができます。またIPv4とのIPv6の設定の違いも接続先のアドレスが変更するだけでIPv6でのVPNも簡単に設定することができます。今回はVyOSにて2拠点間をIPv4およびIPv6でのVPNを接続する方法を紹介します。
検証環境
- VyOS 1.3.0-epa2
IPv4によるWireGuard VPN拠点 site-to-site設定
構成図
vyos-01 , vyos-02 はそれぞれのsiteとして vyos-99は途中のインターネットのルータの扱いで構成しています。
WireGuardの設定を未設定の状態では、vyos-01からvyos-02のeth1には通信可能ですが、eth0には通信ができません。途中のvyos-99にvyos-01のeth0 , vyos-02 のeth0 経路がなく Unreachableとなります。vyos-01 , vyos-02 間のeth0が通信ができない状態でWireGuardを設定することで vyos-01 の eth0 と vyos-02 の eth0 間が通信できるように設定します。
WireGuardの未設定状態での vyos-01の状況
vyos-01のeth1をsourceで宛先が vyos-02のeth1しかPingに応答がありません。残りはvyos-99に経路がないためPingに応答なくtimeoutもしくはUnreachableとなります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
vyos@vyos-01:~$ show ip route Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP, T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP, F - PBR, f - OpenFabric, > - selected route, * - FIB route, q - queued, r - rejected, b - backup S>* 0.0.0.0/0 [1/0] via 200.1.99.99, eth1, weight 1, 00:17:54 C>* 192.168.1.0/24 is directly connected, eth0, 00:17:55 C>* 200.1.99.0/24 is directly connected, eth1, 00:17:55 vyos@vyos-01:~$ show interfaces Codes: S - State, L - Link, u - Up, D - Down, A - Admin Down Interface IP Address S/L Description --------- ---------- --- ----------- eth0 192.168.1.1/24 u/u LAN eth1 200.1.99.1/24 u/u WAN-to_vyos-99 lo 127.0.0.1/8 u/u ::1/128 vyos@vyos-01:~$ ping 200.2.99.2 PING 200.2.99.2 (200.2.99.2) 56(84) bytes of data. 64 bytes from 200.2.99.2: icmp_seq=1 ttl=63 time=1.05 ms 64 bytes from 200.2.99.2: icmp_seq=2 ttl=63 time=1.17 ms ^C --- 200.2.99.2 ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 2ms rtt min/avg/max/mdev = 1.047/1.107/1.167/0.060 ms vyos@vyos-01:~$ ping 200.2.99.2 source-address 192.168.1.1 PING 200.2.99.2 (200.2.99.2) from 192.168.1.1 : 56(84) bytes of data. ^C --- 200.2.99.2 ping statistics --- 4 packets transmitted, 0 received, 100% packet loss, time 78ms vyos@vyos-01:~$ ping 172.16.2.1 PING 172.16.2.1 (172.16.2.1) 56(84) bytes of data. From 200.1.99.99 icmp_seq=1 Destination Net Unreachable From 200.1.99.99 icmp_seq=2 Destination Net Unreachable ^C --- 172.16.2.1 ping statistics --- 2 packets transmitted, 0 received, +2 errors, 100% packet loss, time 3ms vyos@vyos-01:~$ |
WireGuard 接続用の秘密鍵、公開鍵の作成
vyos-01 , vyos-02 でぞれぞれに下記コマンドを実行して 秘密鍵、公開鍵を作成します。
1 |
generate wireguard default-keypair |
下記コマンドで 公開鍵を確認することできます。 この情報は接続先でそれぞれ必要になります。
1 2 3 |
vyos@vyos-01:~$ show wireguard keypairs pubkey default sTNspi5Du0oEOQWwdd3ltQIvIhbKfMGFAVBE8Z2o9yI= vyos@vyos-01:~$ |
1 2 3 |
vyos@vyos-02:~$ show wireguard keypairs pubkey default QrRB5sh7smSvqsr4DU85jkJB5IuzKRUD+5asykT0nhA= vyos@vyos-02:~$ |
vyos-01 の WireGuard設定Config
1 2 3 4 5 6 7 8 |
set interfaces wireguard wg0 address '10.1.2.1/30' set interfaces wireguard wg0 peer to-vyos02-wg0 address '200.2.99.2' set interfaces wireguard wg0 peer to-vyos02-wg0 allowed-ips '172.16.2.0/24' set interfaces wireguard wg0 peer to-vyos02-wg0 allowed-ips '10.1.2.2/32' set interfaces wireguard wg0 peer to-vyos02-wg0 port '51820' set interfaces wireguard wg0 peer to-vyos02-wg0 pubkey 'QrRB5sh7smSvqsr4DU85jkJB5IuzKRUD+5asykT0nhA=' set interfaces wireguard wg0 port '51820' set protocols static route 172.16.2.0/24 next-hop 10.1.2.2 |
vyos-02 の WireGuard設定Config
1 2 3 4 5 6 7 8 |
set interfaces wireguard wg0 address '10.1.2.2/30' set interfaces wireguard wg0 peer to-vyos01-wg0 address '200.1.99.1' set interfaces wireguard wg0 peer to-vyos01-wg0 allowed-ips '192.168.1.0/24' set interfaces wireguard wg0 peer to-vyos01-wg0 allowed-ips '10.1.2.1/32' set interfaces wireguard wg0 peer to-vyos01-wg0 port '51820' set interfaces wireguard wg0 peer to-vyos01-wg0 pubkey 'sTNspi5Du0oEOQWwdd3ltQIvIhbKfMGFAVBE8Z2o9yI=' set interfaces wireguard wg0 port '51820' set protocols static route 192.168.1.0/24 next-hop 10.1.2.1 |
WireGuard 設定後 vyos-01 の設定状況
pingにて vyos-01 eth0 から vyos-02 の eth0 への 応答があることが確認できました。
1 2 3 4 5 6 7 8 9 10 |
vyos@vyos-01:~$ ping 172.16.2.1 source-address 192.168.1.1 PING 172.16.2.1 (172.16.2.1) from 192.168.1.1 : 56(84) bytes of data. 64 bytes from 172.16.2.1: icmp_seq=1 ttl=64 time=4.35 ms 64 bytes from 172.16.2.1: icmp_seq=2 ttl=64 time=1.39 ms 64 bytes from 172.16.2.1: icmp_seq=3 ttl=64 time=1.50 ms ^C --- 172.16.2.1 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 5ms rtt min/avg/max/mdev = 1.388/2.411/4.347/1.370 ms vyos@vyos-01:~$ |
show interface では wg0 が追加されています。
1 2 3 4 5 6 7 8 9 10 |
vyos@vyos-01:~$ show interfaces Codes: S - State, L - Link, u - Up, D - Down, A - Admin Down Interface IP Address S/L Description --------- ---------- --- ----------- eth0 192.168.1.1/24 u/u LAN eth1 200.1.99.1/24 u/u WAN-to_vyos-99 lo 127.0.0.1/8 u/u ::1/128 wg0 10.1.2.1/30 u/u vyos@vyos-01:~$ |
ルーティングテーブルには wireguardで作成した wg0 interfaceの Conneted 経路 および vyos-2の拠点向けに設定 static 経路が増加しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
vyos@vyos-01:~$ show ip route Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP, T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP, F - PBR, f - OpenFabric, > - selected route, * - FIB route, q - queued, r - rejected, b - backup S>* 0.0.0.0/0 [1/0] via 200.1.99.99, eth1, weight 1, 01:06:36 C>* 10.1.2.0/30 is directly connected, wg0, 00:17:28 S>* 172.16.2.0/24 [1/0] via 10.1.2.2, wg0, weight 1, 00:13:01 C>* 192.168.1.0/24 is directly connected, eth0, 01:06:37 C>* 200.1.99.0/24 is directly connected, eth1, 01:06:37 vyos@vyos-01:~$ |
WireGuard の状況を確認することコマンドは下記にあります。
1 2 3 4 5 6 7 8 9 10 11 12 |
vyos@vyos-01:~$ show interfaces wireguard wg0 summary interface: wg0 public key: sTNspi5Du0oEOQWwdd3ltQIvIhbKfMGFAVBE8Z2o9yI= private key: (hidden) listening port: 51820 peer: QrRB5sh7smSvqsr4DU85jkJB5IuzKRUD+5asykT0nhA= endpoint: 200.2.99.2:51820 allowed ips: 172.16.2.0/24, 10.1.2.2/32 latest handshake: 14 minutes, 3 seconds ago transfer: 568 B received, 5.10 KiB sent vyos@vyos-01:~$ |
利用する機会が少なくコマンドかもしれませんが作成した 秘密鍵は下記コマンドで確認することができます。
1 2 3 |
vyos@vyos-01:~$ show wireguard keypairs privkey default WMkJKTBjGRuy8pH+B1vBwxhDfuyhbV+GrOXE4HDQd2Q= vyos@vyos-01:~$ |
VyOS 1.3 WireGuardでのIPv4 VPNのsite-to-site構成のConfig
IPv6によるWireGuard VPN拠点 site-to-site設定
vyos-01 - vyos-99 - vyos-02 区間をIPv6のみの構成として下記を設定します。 IPv6 にて VPNを構成して vyos-01 eth0 ~ vyos-02 eth0 区間の IPv4が通信できる構成を目指します。
WireGuard 接続用の秘密鍵、公開鍵の作成
vyos-01 , vyos-02 でぞれぞれに下記コマンドを実行して 秘密鍵、公開鍵を作成します。
1 |
generate wireguard default-keypair |
下記コマンドで 公開鍵を確認することできます。 この情報は接続先でそれぞれ必要になります。
1 2 3 |
vyos@vyos-01:~$ show wireguard keypairs pubkey default sTNspi5Du0oEOQWwdd3ltQIvIhbKfMGFAVBE8Z2o9yI= vyos@vyos-01:~$ |
vyos-01 , vyos-02 でぞれぞれに下記コマンドを実行して 秘密鍵、公開鍵を作成します。
1 |
generate wireguard default-keypair |
下記コマンドで 公開鍵を確認することできます。 この情報は接続先でそれぞれ必要になります。
1 2 3 |
vyos@vyos-01:~$ show wireguard keypairs pubkey default sTNspi5Du0oEOQWwdd3ltQIvIhbKfMGFAVBE8Z2o9yI= vyos@vyos-01:~$ |
1 2 3 |
vyos@vyos-02:~$ show wireguard keypairs pubkey default QrRB5sh7smSvqsr4DU85jkJB5IuzKRUD+5asykT0nhA= vyos@vyos-02:~$ |
vyos-01 の WireGuard設定Config
IPv4 との違いは 2行目の peer の address を Ipv6 に変更しています。
1 2 3 4 5 6 7 8 |
set interfaces wireguard wg0 address '10.1.2.1/30' set interfaces wireguard wg0 peer to-vyos02-wg0 address '2001:db8:2::2' set interfaces wireguard wg0 peer to-vyos02-wg0 allowed-ips '172.16.2.0/24' set interfaces wireguard wg0 peer to-vyos02-wg0 allowed-ips '10.1.2.2/32' set interfaces wireguard wg0 peer to-vyos02-wg0 port '51820' set interfaces wireguard wg0 peer to-vyos02-wg0 pubkey 'QrRB5sh7smSvqsr4DU85jkJB5IuzKRUD+5asykT0nhA=' set interfaces wireguard wg0 port '51820' set protocols static route 172.16.2.0/24 next-hop 10.1.2.2 |
vyos-02 の WireGuard設定Config
IPv4 との違いは 2行目の peer の address を Ipv6 に変更しています。
1 2 3 4 5 6 7 8 |
set interfaces wireguard wg0 address '10.1.2.2/30' set interfaces wireguard wg0 peer to-vyos01-wg0 address '2001:db8:1::1' set interfaces wireguard wg0 peer to-vyos01-wg0 allowed-ips '192.168.1.0/24' set interfaces wireguard wg0 peer to-vyos01-wg0 allowed-ips '10.1.2.1/32' set interfaces wireguard wg0 peer to-vyos01-wg0 port '51820' set interfaces wireguard wg0 peer to-vyos01-wg0 pubkey 'sTNspi5Du0oEOQWwdd3ltQIvIhbKfMGFAVBE8Z2o9yI=' set interfaces wireguard wg0 port '51820' set protocols static route 192.168.1.0/24 next-hop 10.1.2.1 |
WireGuard 設定後 vyos-01 の設定状況
ping にて vyos-eth0 から vyos-02 の eth0 への応答があることが確認できました。
1 2 3 4 5 6 7 8 9 10 |
vyos@vyos-01:~$ ping 172.16.2.1 source-address 192.168.1.1 PING 172.16.2.1 (172.16.2.1) from 192.168.1.1 : 56(84) bytes of data. 64 bytes from 172.16.2.1: icmp_seq=1 ttl=64 time=5.13 ms 64 bytes from 172.16.2.1: icmp_seq=2 ttl=64 time=1.39 ms 64 bytes from 172.16.2.1: icmp_seq=3 ttl=64 time=1.41 ms ^C --- 172.16.2.1 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss, time 5ms rtt min/avg/max/mdev = 1.389/2.643/5.131/1.759 ms vyos@vyos-01:~$ |
show interface を確認すると eth1 には ipv6アドレスのみになり wg0 interfaceが追加されています。
1 2 3 4 5 6 7 8 9 10 |
vyos@vyos-01:~$ show interfaces Codes: S - State, L - Link, u - Up, D - Down, A - Admin Down Interface IP Address S/L Description --------- ---------- --- ----------- eth0 192.168.1.1/24 u/u LAN eth1 2001:db8:1::1/64 u/u WAN-to_vyos-99 lo 127.0.0.1/8 u/u ::1/128 wg0 10.1.2.1/30 u/u vyos@vyos-01:~$ |
ipv6 のルーティングテーブルを確認すると デフォルト( ::/0 )経路が vyos-99 に向いていることがわかります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
vyos@vyos-01:~$ show ipv6 route Codes: K - kernel route, C - connected, S - static, R - RIPng, O - OSPFv3, I - IS-IS, B - BGP, N - NHRP, T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP, F - PBR, f - OpenFabric, > - selected route, * - FIB route, q - queued, r - rejected, b - backup S>* ::/0 [1/0] via 2001:db8:1::99, eth1, weight 1, 00:43:47 C>* 2001:db8:1::/64 is directly connected, eth1, 00:43:47 C * fe80::/64 is directly connected, wg0, 01:16:01 C * fe80::/64 is directly connected, eth0, 02:52:42 C * fe80::/64 is directly connected, eth1, 02:52:42 C>* fe80::/64 is directly connected, lo, 02:52:44 vyos@vyos-01:~$ |
IPv4 のルーティングテーブルは 以前の構成には存在していた デフォルト経路 ( 0.0.0.0/0 ) および eth1のConnected経路がありません。 WireGuardを設定してことで wg0 の Connected 経路および vyos-02 eth0 向けのstatic 経路が追加されています。
1 2 3 4 5 6 7 8 9 10 11 |
vyos@vyos-01:~$ show ip route Codes: K - kernel route, C - connected, S - static, R - RIP, O - OSPF, I - IS-IS, B - BGP, E - EIGRP, N - NHRP, T - Table, v - VNC, V - VNC-Direct, A - Babel, D - SHARP, F - PBR, f - OpenFabric, > - selected route, * - FIB route, q - queued, r - rejected, b - backup C>* 10.1.2.0/30 is directly connected, wg0, 01:16:50 S>* 172.16.2.0/24 [1/0] via 10.1.2.2, wg0, weight 1, 01:12:23 C>* 192.168.1.0/24 is directly connected, eth0, 02:05:59 vyos@vyos-01:~$ |
WireGuard の状況を確認するコマンドは下記になります。IPv4構成との違いは endpoint が IPv6 の 2001:db8:2::2 となっています。
1 2 3 4 5 6 7 8 9 10 11 12 |
vyos@vyos-01:~$ show interfaces wireguard wg0 summary interface: wg0 public key: sTNspi5Du0oEOQWwdd3ltQIvIhbKfMGFAVBE8Z2o9yI= private key: (hidden) listening port: 51820 peer: QrRB5sh7smSvqsr4DU85jkJB5IuzKRUD+5asykT0nhA= endpoint: [2001:db8:2::2]:51820 allowed ips: 172.16.2.0/24, 10.1.2.2/32 latest handshake: 5 minutes ago transfer: 1.95 KiB received, 6.75 KiB sent vyos@vyos-01:~$ |
VyOS 1.3 WireGuardでのIPv6 VPNのsite-to-site構成のConfig
関連サイト
WireGuard 記事一覧
Ubuntu 20.04 LTS Server
- WireGuard サーバー Ubuntu Server 20.04 LTS へのインストールおよび設定方法
- WireGuard クライアント Ubuntu Server 20.04 LTS へのインストールおよび設定方法