K3sクラスタの安全なネットワーク構築:WireGuardを用いたVPN設定手順
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