K3sクラスタの安全なネットワーク構築:WireGuardを用いたVPN設定手順
2024-10-14

k3sをマスターノード(Master node)とワーカーノード(Worker node)の複数サーバーインストールする際、サーバー同士で行われる通信を秘匿化(VPN接続)するために、WireGuardを導入したいと思います。
本記事は、WireGuardをインストールする手順をまとめた記録です。

WireGuardのインストール

  • マスターノード(Master node)とワーカーノード(Worker node) の両方にWireGuardをインストールする。
sudo apt update
sudo apt install wireguard
  • マスターノード(Master node)にて、IPv4 フォワーディングを有効にする カーネルパラメーターの設定(/etc/sysctl.conf
sudo nano /etc/sysctl.conf

# を消してコメントを解除する。

- #net.ipv4.ip_forward=1
+ net.ipv4.ip_forward=1

変更を反映する。

sudo sysctl -p

ファイアウォールの設定

  • マスターノード(Master node)
sudo ufw allow from (Worker node's IP) to any port (51821) proto udp
sudo ufw reload
  • ワーカーノード(Worker node)
sudo ufw allow from (Master node's IP) to any port (51821) proto udp
sudo ufw reload

鍵の生成

秘密鍵と公開鍵の生成

  • マスターノード(Master node) にて、生成した鍵を格納するディレクトリを作成する。
sudo mkdir /etc/wireguard/wg0

マスターノード側の持つ公開鍵と認証鍵を生成する。

sudo wg genkey | sudo tee /etc/wireguard/wg0/server.key
sudo cat /etc/wireguard/wg0/server.key | sudo wg pubkey | sudo tee /etc/wireguard/wg0/server.pub

ワーカーノード(1台目)側の持つ公開鍵と認証鍵を生成する。

sudo wg genkey | sudo tee /etc/wireguard/wg0/client0.key
sudo cat /etc/wireguard/wg0/client0.key | sudo wg pubkey | sudo tee /etc/wireguard/wg0/client0.pub

ワーカーノード(2台目)側の持つ公開鍵と認証鍵を生成する。

sudo wg genkey | sudo tee /etc/wireguard/wg0/client1.key
sudo cat /etc/wireguard/wg0/client1.key | sudo wg pubkey | sudo tee /etc/wireguard/wg0/client1.pub

事前共有鍵の生成

  • ワーカーノード(1台目)
sudo wg genkey | sudo tee /etc/wireguard/wg0/client0-preshared.key
  • ワーカーノード(2台目)
sudo wg genkey | sudo tee /etc/wireguard/wg0/client1-preshared.key

※keyやpubの内容をメモするのを忘れた場合の例
以下で再出力できる

sudo cat  /etc/wireguard/wg0/client0-preshared.key

マスターノード(Master node) の設定ファイルの作成

  • マスターノード(Master node) にて
    設定ファイル(/etc/wireguard/wg0.conf
    ※もし、追加で設定する場合は、sudo wg-quick down wg0を実行し、wireguardを停止しないと設定の更新ができないので注意
sudo nano /etc/wireguard/wg0.conf

設定ファイルの内容

[Interface]
Address = 10.59.19.1/24
MTU = 1350
SaveConfig = true
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
ListenPort = 51830
PrivateKey = [server.key]

[Peer]
PublicKey = [client0.pub]
PresharedKey = [client0-preshared.key]
AllowedIPs = 10.59.19.2/32
Endpoint = (Worker node's IP):51830

[Peer]
PublicKey = [client1.pub]
PresharedKey = [client1-preshared.key]
AllowedIPs = 10.59.19.3/32
Endpoint = (Worker node's IP):51830

ワーカーノード側の設定ファイルの作成

  • ワーカーノード(Worker node) にて
    設定ファイル(/etc/wireguard/wg0.conf
sudo nano /etc/wireguard/wg0.conf

設定ファイルの内容

  • ワーカーノード(1台目)
[Interface]
Address = 10.59.19.2/24
ListenPort = 51830
DNS = 10.59.19.2
PrivateKey = [client0.key]
MTU = 1350

[Peer]
PublicKey = [server.pub]
PresharedKey = [client0-preshared.key]
AllowedIPs = 10.59.19.0/24
PersistentKeepalive = 25
Endpoint =  (Master node's IP):51830
  • ワーカーノード(2台目)
[Interface]
Address = 10.59.19.3/24
ListenPort = 51830
DNS = 10.59.19.3
PrivateKey = [client1.key]
MTU = 1350

[Peer]
PublicKey = [server.pub]
PresharedKey = [client1-preshared.key]
AllowedIPs = 10.59.19.0/24
PersistentKeepalive = 25
Endpoint =  (Master node's IP):51830

WireGuardの起動と永続化

マスターノード(Master node)とワーカーノード(Worker node) の両方にて

sudo wg-quick up wg0
sudo systemctl enable wg-quick@wg0
  • /usr/bin/wg-quick: line 32: resolvconf: command not foundというエラーが発生した場合
    resolvconfが存在しないためインストールする。
sudo apt install openresolv
sudo apt install resolvconf

WireGuardの停止と無効化

sudo wg-quick down wg0
sudo systemctl disable wg-quick@wg0

接続確認

  • マスターノード(Master node) にて
ping 10.59.19.2
ping 10.59.19.3
  • ワーカーノード(Worker node) にて
ping 10.59.19.1
K3sクラスタの安全なネットワーク構築:WireGuardを用いたVPN設定手順
https://notes.midnightstops.com/posts/9/
作者
Author
公開日
2024-10-14