LoginSignup
0
0

デフォルトルートにWireguardを使用する

Last updated at Posted at 2023-11-15

目的

デフォルトルートをwireguardのピアに向ける必要性が出てきたので、今回は検証がてら試してみる。

構成

今回はnode1のゲートウェイをnode2に向け、node2とnode3間にwireguardで貼っているピアにトラフィックを流す。

スライド1.PNG

環境

各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で行う事は以下である。

  1. 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で行う設定は以下の通りである。

  1. ネットワークの設定
  2. ルーティングの設定
  3. wireguardの構築
  4. wg gen webの構築
  5. 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

wg gen webにアクセス
serverの設定に移動
image.png

設定する項目は以下の通り

  • 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

設定するとこの様な形になる
image.png

node2用のconfigファイルを生成

ADD NEW CLIENTから新しいコンフィグを設定できる。基本的にFriendly nameを指定するだけで良い。wg0という名前が良い。configを生成できたら、ダウンロードしておく。

image.png

wireguardを再起動

$ sudo systemctl restart wg-quick@wg0




node2の設定

node2の設定は以下の通りである

  1. networkの設定
  2. wireguardの構築
  3. コンフィグファイルのインポート
  4. natの設定
  5. ルーティングの設定
  6. 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
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0