Wireguard（その２）＆久しぶりにGNS3（その41）

# NAT環境下でWireguardを確認
「[その１](https://qiita.com/infinite1oop/items/7cea6339e186cead993e)」の続き。WireguardはUDPパケットである。なので、NAT環境下でも問題なく動作するはず。その確認。

## 環境
下記のようなもの。

![TopologyNAT12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/f34857fd-66de-244e-565a-401c8c871f10.png)

中央にNAT（ルーター）があり、上がNAT内側、下がNAT外側である。上下のRouter1およびRouter2でWireguardを確立させ、末端のPC1とPC2との通信を暗号化（トンネル化）する。

## 設定
### Router1およびRouter2でのルーティング設定

```shell:/etc/sysctl.conf
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
こちらは常に固定。

```shell:/etc/network/interface
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側のインターフェースは常に固定。

```shell:/etc/network/interface
auto ens5
iface ens5 inet static
	address 192.168.10.1
	netmask 255.255.255.0
```
##### Wireguard未使用
後ほど、パケットを比較するため、Wireguard適用前のインターフェースを記載。

```shell:/etc/network/interface
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使用
```shell:/etc/network/interface
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
#### 鍵作成
詳細は、「[その１](https://qiita.com/infinite1oop/items/7cea6339e186cead993e)」参照。

##### Router1
```shell
$ wg genkey | sudo tee /etc/wireguard/wg1.secret | wg pubkey | sudo tee /etc/wireguard/wg1.public
```
##### Router2
```shell
$ wg genkey | sudo tee /etc/wireguard/wg2.secret | wg pubkey | sudo tee /etc/wireguard/wg2.public
```

#### 設定ファイル
こちらも、詳細は「[その１](https://qiita.com/infinite1oop/items/7cea6339e186cead993e)」参照。

##### 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
```shell
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
```shell
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
![NAT-R2_nonWのコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/7017f1bb-0079-2568-ce6b-d95f61be3511.png)

Wireguard設定前は、プロトコルICMPとNAT外側のIPアドレスおよび末端PC2のIPアドレスが見える。

#### Router2-PC2
![R2-PC2_nonWのコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/e609761d-9242-8c07-8f87-d10164abe9b9.png)

こちらも同様。

### Wireguard使用時
#### NAT-Router2
![NAT-R2_Wのコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/296cf122-3ee5-297f-a193-85c9ae048625.png)

Wireguardパケットが見えるとともに、NAT外側のIPアドレスおよびRouter2のIPアドレスが見える。

#### Router2-PC2
![R2-PC2_Wのコピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/634816/43b78b1e-2340-409e-8baf-7fb361cc3cdf.png)

ここは暗号化されていないため、ICMPおよび末端PCのIPアドレスが見える。

EOF