NAT環境下でWireguardを確認
「その1」の続き。WireguardはUDPパケットである。なので、NAT環境下でも問題なく動作するはず。その確認。
環境
下記のようなもの。
中央にNAT(ルーター)があり、上がNAT内側、下がNAT外側である。上下のRouter1およびRouter2でWireguardを確立させ、末端のPC1とPC2との通信を暗号化(トンネル化)する。
設定
Router1およびRouter2でのルーティング設定
net.ipv4.ip_forward=1
NATの設定(GNS3)
関連する部分のみ記載。
hostname NAT
interface FastEthernet1/0
ip address 172.16.1.1 255.255.255.0
ip nat inside
interface FastEthernet1/1
ip address 172.16.2.1 255.255.255.0
ip nat outside
!ip route 192.168.10.0 255.255.255.0 172.16.1.2
!ip route 192.168.20.0 255.255.255.0 172.16.2.2
ip nat inside source list 10 interface FastEthernet1/1 overload
!
access-list 10 permit any
- インターフェースにIPアドレスアサイン
- NAT内側および外側の設定
- NAT対象ネットワークの指定
なお、上記でコメントとなっているスタティックルート設定(ip route)はNATルーターから末端ネットワーへのルートである。よって、Wireguard時には不要であるが、Wireguard適用前の通信時に利用した。
Router1およびRouter2のネットワークインターフェース
Router2
こちらは常に固定。
auto ens4
iface ens4 inet static
address 172.16.2.2
netmask 255.255.255.0
auto ens5
iface ens5 inet static
address 192.168.20.1
netmask 255.255.255.0
NAT外側となるため、対向ルーターであるRouter1側のネットワーク指定は不要。
Router 1
PC側のインターフェースは常に固定。
auto ens5
iface ens5 inet static
address 192.168.10.1
netmask 255.255.255.0
Wireguard未使用
後ほど、パケットを比較するため、Wireguard適用前のインターフェースを記載。
auto ens4
iface ens4 inet static
address 172.16.1.2
netmask 255.255.255.0
post-up route add -net 172.16.2.0/24 gw 172.16.1.1
post-up route add -net 192.168.20.0/24 gw 172.16.1.1
Wireguard使用
auto ens4
iface ens4 inet static
address 172.16.1.2
netmask 255.255.255.0
post-up route add -net 172.16.2.0/24 gw 172.16.1.1
# post-up route add -net 192.168.20.0/24 gw 172.16.1.1
Wireguardでトンネル化されるため、対向ルーターであるRouter2のLAN側のネットワークへのルート指定は不要となる。
Wireguard
鍵作成
詳細は、「その1」参照。
Router1
$ wg genkey | sudo tee /etc/wireguard/wg1.secret | wg pubkey | sudo tee /etc/wireguard/wg1.public
Router2
$ wg genkey | sudo tee /etc/wireguard/wg2.secret | wg pubkey | sudo tee /etc/wireguard/wg2.public
設定ファイル
こちらも、詳細は「その1」参照。
Router1
debian@Router1:~$ sudo cat /etc/wireguard/wg1.conf
[Interface]
PrivateKey = 2Cd38b+7RDpOG7MjDNaWQ1Hi9n7/pgqohxtcQDsbZ1M=
Address = 10.1.1.1/30
ListenPort = 41000
[Peer]
PublicKey = uPvlAwRi5m1XJ7sZMnyOfDTqUKWI5IPYQEXK+pK6k1Q=
AllowedIPs = 10.1.1.2/32,192.168.20.0/24
Endpoint = 172.16.2.2:41000
- PrivateKey:自分の秘密鍵
- PublicKey:相手の公開鍵
Router2
debian@Router2:~$ sudo cat /etc/wireguard/wg2.conf
[Interface]
PrivateKey = WIKC6bsd3qobFlfrSOehZG1BAlzQ8E8HxSGTuKximHU=
Address = 10.1.1.2/30
ListenPort = 41000
[Peer]
PublicKey = RtUPcHXImU/IP+BZdlOO74E4kYgqoRsBDNozPWvIJko=
AllowedIPs = 10.1.1.1/32,192.168.10.0/24
#Endpoint = 172.16.1.2:41000
起動
Router1
debian@Router1:~$ sudo wg-quick up wg1
[#] ip link add wg1 type wireguard
[ 1370.539781] wireguard: WireGuard 1.0.0 loaded. See www.wireguard.com for information.
[ 1370.546313] wireguard: Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
[#] wg setconf wg1 /dev/fd/63
[#] ip -4 address add 10.1.1.1/30 dev wg1
[#] ip link set mtu 1420 up dev wg1
[#] ip -4 route add 192.168.20.0/24 dev wg1
Router2
debian@Router2:~$ sudo wg-quick up wg2
[#] ip link add wg2 type wireguard
[ 155.372788] wireguard: WireGuard 1.0.0 loaded. See www.wireguard.com for information.
[ 155.374400] wireguard: Copyright (C) 2015-2019 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.
[#] wg setconf wg2 /dev/fd/63
[#] ip -4 address add 10.1.1.2/30 dev wg2
[#] ip link set mtu 1420 up dev wg2
[#] ip -4 route add 192.168.10.0/24 dev wg2
検証
NAT内側にある末端のPC1からNAT外側の末端PC2へのpingの実行。
PC1> ping 192.168.20.2
84 bytes from 192.168.20.2 icmp_seq=1 ttl=62 time=61.306 ms
84 bytes from 192.168.20.2 icmp_seq=2 ttl=62 time=26.725 ms
84 bytes from 192.168.20.2 icmp_seq=3 ttl=62 time=28.452 ms
84 bytes from 192.168.20.2 icmp_seq=4 ttl=62 time=29.290 ms
84 bytes from 192.168.20.2 icmp_seq=5 ttl=62 time=32.599 ms
Wireguard設定前
NAT-Router2
Wireguard設定前は、プロトコルICMPとNAT外側のIPアドレスおよび末端PC2のIPアドレスが見える。
Router2-PC2
こちらも同様。
Wireguard使用時
NAT-Router2
Wireguardパケットが見えるとともに、NAT外側のIPアドレスおよびRouter2のIPアドレスが見える。
Router2-PC2
ここは暗号化されていないため、ICMPおよび末端PCのIPアドレスが見える。
EOF