Wireguard-uiを使ってRaspberry Pi 4BにVPNサーバ環境を構築しました。
Wireguard-uiはGUI操作でWireguardのサーバ用設定ファイル(wg0.conf)やクライアント用の設定ファイル/QRコードを生成できます。
また、Wake on LANの機能もあります。
MTUとPost Up/Downスクリプトの指定方法について試行錯誤しました。

環境

  • Raspberry Pi 4B
  • Ubuntu 24.10 (arm64)
  • wireguard 1.0.20210914
  • wireguard-ui v0.6.2
  • インターネット回線はv6プラス

構築

v6プラス接続環境の調査

  1. 公開IPv4アドレスと公開IPv6アドレスを確認
    https://test-ipv6.com/
  2. 公開IPv6 アドレスから公開可能なポート番号を確認
    http://ipv4.web.fc2.com/map-e.html
  3. 公開するポート番号を決定
    例えば60000/udp

Wireguardの使用プロトコルはudpです。

  1. Wireguardを構築するサーバのローカルIPアドレスを確認
ip a

例えば192.168.11.24, NIC eth0
5. ルータでポートフォワード設定
インターネットからの60000/udpアクセスを192.168.11.24の60000/udpに転送

同じポート番号にする必要があります。

Wireguardのインストール

  1. インストール
sudo apt install wireguard

wireguardとwireguard-toolsパッケージがインストールされます。

Wireguard-uiのインストール

  1. インストール
    https://github.com/ngoduykhanh/wireguard-ui/releases
    raspberry pi / Ubuntu arm64 の場合はwireguard-ui-v0.6.2-linux-arm64.tar.gz
VERSION=v0.6.2
wget https://github.com/ngoduykhanh/wireguard-ui/releases/download/${VERSION}/wireguard-ui-${VERSION}-linux-arm64.tar.gz
sudo mkdir /opt/wireguard
sudo tar xvf wireguard-ui-${VERSION}-linux-arm64.tar.gz -C /opt/wireguard/
  1. ユニットファイルの作成
/etc/systemd/system/wgui-worker.service
[Unit]
Description=wireguard web ui
After=network.target

[Service]
Type=simple
WorkingDirectory=/opt/wireguard
ExecStart=/opt/wireguard/wireguard-ui
Restart=always

[Install]
WantedBy=multi-user.target
  1. サービス有効化と起動
sudo systemctl enable wgui-worker.service
sudo systemctl start wgui-worker.service

この時、/etc/wireguard/wg0.confが生成されます。

Wireguardの自動再起動設定

/etc/wireguard/wg0.confを監視してWireguardを自動再起動します。

  1. ユニットファイルの作成
/etc/systemd/system/wgui.service
[Unit]
Description=Restart WireGuard
After=network.target

[Service]
Type=oneshot
ExecStart=/usr/bin/systemctl restart wg-quick@wg0.service

[Install]
RequiredBy=wgui.path
/etc/systemd/system/wgui.path
[Unit]
Description=Watch /etc/wireguard/wg0.conf for changes

[Path]
PathModified=/etc/wireguard/wg0.conf

[Install]
WantedBy=multi-user.target
  1. サービスの有効化と起動
sudo systemctl enable wgui.{path,service}
sudo systemctl start wgui.{path,service}

内部ネットワークへの転送許可

  1. 設定
/etc/sysctl.conf
27
28
29
# Uncomment the next line to enable packet forwarding for IPv4
#net.ipv4.ip_forward=1
net.ipv4.ip_forward=1
  1. 反映
sudo sysctl -p

Wireguardネットワーク設定

  1. Wireguard-uiにアクセス
    http://192.168.11.24:5000
  2. ログイン
    admin / admin

パスワードはUsers Settingsで変更します。

  1. Global Settingsの設定
    MTUの値を削除してSave

私の環境ではデフォルトの1500や一般的な1420を設定すると通信が不安定になったので削除しました。

https://www.speedguide.net/analyzer.php
もし設定するとしたら各接続拠点から上記サイトで調べたMTU値からIPv4なら60、IPv6なら80を引いた値の小さい方を設定します。
自宅PC:MTU 1460、MSS 1420 → MTU 1400
スマートフォン:MTU 1420、MSS 1380 → MTU 1360

  1. Wireguard Serverの設定
    下記を設定してSave
Listen Port60000
Port Up Scriptiptables -t nat -A POSTROUTING -s 10.252.1.0/24 -o eth0 -j MASQUERADE; iptables -A INPUT -p udp -m udp --dport 60000 -j ACCEPT; iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT
Post Down Scriptiptables -t nat -D POSTROUTING -s 10.252.1.0/24 -o eth0 -j MASQUERADE; iptables -D INPUT -p udp -m udp --dport 60000 -j ACCEPT; iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT
  1. Wireguard Clientsの設定

New Clientを押下、Nameを設定してSubmit

  1. 反映

Apply Config

  1. 再起動
    設定を変更した場合は念のため再起動しておいた方がよいみたいです。

クライアント端末の設定

Androidの場合

  1. Wireguardアプリをインストール
  2. Wireguardアプリで+を押下
  3. QRコードをスキャンを選択
  4. Wireguard-uiのクライアント画面でQR codeを押下して画像をスキャン
  5. トンネル名を設定してオンにする
  6. 接続に成功するとwireguard-uiのStatus画面で接続実績が記録される