目的
デフォルトルートをwireguardのピアに向ける必要性が出てきたので、今回は検証がてら試してみる。
構成
今回はnode1のゲートウェイをnode2に向け、node2とnode3間にwireguardで貼っているピアにトラフィックを流す。
環境
各VMは172.24.20.0/24の空間に所属しており、172.24.20.254にゲートウェイがある。node2はGWを10.6.6.1に向けないといけないと思うかもしれないが、wireguard側でallow ipを0.0.0.0/0を指定する事によって自動的にwg側にGWが向く
node | ip | GW |
---|---|---|
node1 | 172.24.20.121 | 172.24.20.122 |
node2 | 172.24.20.122 10.6.6.2/24 |
172.24.20.254 |
node3 | 172.24.20.120 10.6.6.1/24 |
172.24.20.254 |
node1の設定
node1で行う事は以下である。
- networkの設定(ipの割り当て、gatewayの設定)
networkの設定
/etc/netplan/00-installer-config.yaml
network:
ethernets:
ens160:
addresses:
- 172.24.20.121/24
gateway4: 172.24.20.122
nameservers:
addresses:
- 172.24.2.51
search: []
version: 2
root@shoma:/
node3の設定
今回は、node3側にwg gen webを構築するため、先にこちらを構築する。node3で行う設定は以下の通りである。
- ネットワークの設定
- ルーティングの設定
- wireguardの構築
- wg gen webの構築
- node2用のconfigの設定
networkの設定
network:
ethernets:
ens160:
addresses:
- 172.24.20.120/24
gateway4: 172.24.20.254
nameservers:
addresses:
- 172.24.2.51
search: []
version: 2
ルーティングの設定
nano /etc/sysctl.conf
下記を編集
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1 ← 行頭の # を消してコメントを解除する
sysctlコマンドを実行し、変更を反映します。
sudo sysctl -p
wireguardの構築
apt -y update
apt -y install resolvconf wireguard docker docker-compose
wireguardの起動
$ sudo systemctl enable wg-quick@wg0
$ sudo systemctl start wg-quick@wg0
wg gen webの構築
docker-compose.yml
version: '3.6'
services:
wg-gen-web:
image: vx3r/wg-gen-web:latest
container_name: wg-gen-web
restart: unless-stopped
environment:
WG_STATS_API: http://172.24.20.120:8182
WG_CONF_DIR: /data
WG_INTERFACE_NAME: wg0.conf
OAUTH2_PROVIDER_NAME: fake
volumes:
- /etc/wireguard:/data
ports:
- 8080:8080
wg-json-api:
image: james/wg-api:latest
container_name: wg-json-api
restart: unless-stopped
cap_add:
- NET_ADMIN
network_mode: host
command: wg-api --device wg0 --listen 172.24.20.120:8182
起動
docker-compose up
設定する項目は以下の通り
- Public endpoint for clients to connect to
- PostUP
- PostDown
endpointの項目には以下の内容を入れる。clientから直接疎通が取れるIPを指定する必要がある。フォワーディング等をしている場合はフォワーディング元を指定する。
172.24.20.120:51820
PostUPの項目には以下の内容を入れる
iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o ens160 -j MASQUERADE;iptables -A FORWARD -o wg0 -j ACCEPT
PostDownの項目には以下の内容を入れる
iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o ens160 -j MASQUERADE;iptables -D FORWARD -o wg0 -j ACCEPT
node2用のconfigファイルを生成
ADD NEW CLIENTから新しいコンフィグを設定できる。基本的にFriendly nameを指定するだけで良い。wg0という名前が良い。configを生成できたら、ダウンロードしておく。
wireguardを再起動
$ sudo systemctl restart wg-quick@wg0
node2の設定
node2の設定は以下の通りである
- networkの設定
- wireguardの構築
- コンフィグファイルのインポート
- natの設定
- ルーティングの設定
- wireguardを起動(ピアを張る)
networkの設定
/etc/netplan/00-installer-config.yaml
network:
ethernets:
ens160:
addresses:
- 172.24.20.122/24
# gateway4: 172.24.20.254
nameservers:
addresses:
- 172.24.2.51
search: []
wireguardをインストールするまではgateway4のコメントアウトは外しておいて良い。
wireguardの構築
apt -y update
apt -y install resolvconf wireguard
コンフィグファイルのインポート
先ほどダウンロードしたファイルをwg0.confと言う名前で、/etc/wireguard/配下に配置する。
ちなみにwg0.confの中身は以下の様である
[Interface]
Address = fd9f:6666::1/128, 10.6.6.2/32
PrivateKey = EB2Ge2TvBVX243wKJ02cR0OZ87frxcXlEP5IHf8E0no=
DNS = fd9f::10:0:0:2
[Peer]
PublicKey = ghAxGSjKBOHGLNchHCZscrjTUghXmWj5sy38lRyNUHo=
PresharedKey = JO8TKp9bURiFKCYBxpjJKADdVb4413wAPkMPXOeI04s=
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = 172.24.20.120:51820
PersistentKeepalive = 16
natの設定
ens160で受け取ったパケットをwg0に流し、wg0でnatをかける設定を入れる。
root@shoma:/etc# sudo iptables -t nat -A POSTROUTING -o wg0 -j MASQUERADE
root@shoma:/etc# sudo iptables -A FORWARD -i ens160 -o wg0 -j ACCEPT
ルーティングの設定
nano /etc/sysctl.conf
下記を編集
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1 ← 行頭の # を消してコメントを解除する
sysctlコマンドを実行し、変更を反映します。
sudo sysctl -p
wireguardの起動
起動
$ sudo systemctl enable wg-quick@wg0
$ sudo systemctl start wg-quick@wg0
ピアを張れているか確認
root@shoma:/home/shoma# wg show
interface: wg0
public key: IeNrzdh+fix5VTj29Aoy0sIgLaiHxeA+8I6LKOnc6nE=
private key: (hidden)
listening port: 55529
fwmark: 0xca6c
peer: ghAxGSjKBOHGLNchHCZscrjTUghXmWj5sy38lRyNUHo=
preshared key: (hidden)
endpoint: 172.24.20.120:51820
allowed ips: 0.0.0.0/0, ::/0
latest handshake: 2 seconds ago
transfer: 92 B received, 180 B sent
persistent keepalive: every 16 seconds
経路の確認
node1から8.8.8.8への経路をmtrコマンドで確認する。gateway(172.24.20.122)から、wireguardを通り10.6.6.1(node3)を到達し、上流へ流れている事が確認出来る。
node1: mtr 8.8.8.8
My traceroute [v0.95]
shoma (172.24.20.121) -> 8.8.8.8 (8.8.8.8) 2023-11-15T15:39:35+0000
Keys: Help Display mode Restart statistics Order of fields quit
Packets Pings
Host Loss% Snt Last Avg Best Wrst StDev
1. _gateway 0.0% 4 0.1 0.1 0.1 0.2 0.0
2. 10.6.6.1 0.0% 4 0.3 0.3 0.3 0.4 0.0
3. 172.24.20.254 0.0% 4 1.2 1.2 1.2 1.3 0.0
4. 150.99.196.193 0.0% 4 1.3 1.4 1.3 1.5 0.1
5. 150.99.10.187 0.0% 4 1.8 1.8 1.7 1.9 0.1
6. 210.171.224.96 0.0% 4 2.0 1.9 1.8 2.0 0.1
7. 108.170.242.193 0.0% 4 3.4 3.8 3.4 5.0 0.8
8. 108.170.227.93 0.0% 4 2.8 3.2 2.8 3.7 0.4
9. dns.google 0.0% 4 2.1 2.6 2.1 4.0 0.9