🚸
【WireGuard】拠点間でVPN接続をしてみた
はじめに
みなさんは、自身でVPNサーバをお持ちでしょうか。私の環境では、自宅で鯖が動いていますが、その鯖達はNATされていたり、物理的な問題もあって、さくらのVPS
上にWireGuardを用いてVPN環境を構築しています。しかし、このような環境であると、自宅のネットワークにはルーティングできず、自宅内のホスト全てにWireGuardをインストールするという手間が発生してしまいます。従って、WireGuard鯖と自宅内にある代表の鯖一台同士を拠点間で接続することにしました。
構成図
構築
VPNサーバ(WireGuard)の構築
今回はWireGuardを管理しやすくするために、wireguard-ui
を用いました。
- サーバ(
192.168.0.253/24
)側にインストール
sudo apt update && sudo apt upgrade -y && sudo apt install -y wireguard openresolv
- サーバ側(
192.168.0.253/24
)のコンフィグ作成
Address
にはVPNサーバ自体のIPアドレスをお好きなもので割り当ててください。
sudo vim /etc/wireguard/wg0.conf
/etc/wireguard/wg0.conf
[Interface]
Address = 192.168.0.253/24
ListenPort = 51820
- サーバ側(
192.168.0.253/24
)で自動起動に設定しつつ起動開始
sudo systemctl enable wg-quick@wg0 --now
- クライアント側(
192.168.150.253/24
)にもインストール
sudo apt update && sudo apt upgrade -y && sudo apt install -y wireguard openresolv
- ルーティングをできるようにする
cat <<EOF | sudo tee -a /etc/sysctl.conf
net.ipv4.ipv4_forward=1
EOF
sudo sysctl -p
wireguard-ui
の設定
-
wireguard-ui
用のディレクトリ作成
sudo mkdir /opt/wireguard
cd /opt/wireguard
-
wireguard-ui
のインストール
sudo curl -fsSLO https://github.com/ngoduykhanh/wireguard-ui/releases/download/v0.5.2/wireguard-ui-v0.5.2-linux-arm64.tar.gz
sudo tar xvf wireguard-ui-v0.5.2-linux-arm64.tar.gz wireguard-ui
- Systemdのファイル作成(自動更新のために)
- wgui.service
/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
- 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
- wgui-worker.service
/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
- 3で作成したsystemdの起動
sudo systemctl enable wgui.{path,service,-worker} --now
-
http://<129.x.y.z>:5000
にアクセス
- Username: admin
- Password: admin
-
Global Settings
を編集
Endpoint Address
をVPNサーバ(今回だと129.x.y.z
に値する)のIPアドレスを設定。また、Wireguard Config File Path
ではサーバ側のコンフィグファイルを保存した場所が指定されているかを確認してください。
-
Wireguard Server Settings
を編集
Post Up Script
iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE; ip6tables -A FORWARD -i %i -j ACCEPT; ip6tables -t nat -A POSTROUTING -o ens3 -j MASQUERADE
Post Down Script
iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE; ip6tables -D FORWARD -i %i -j ACCEPT; ip6tables -t nat -D POSTROUTING -o ens3-j MASQUERADE
Wireguard Server Settings
ではClientサイドがwg0インターフェイスをリンクアップする際に、iptablesでパケットをルーティングしないといけないため、上記の設定を投入するようにしてください。
- Wireguard ClientsよりNewClientでWireguard用のコンフィグを作成する。
- Name:好きなもの
- Email:不要
- IPAllocation: いじらない(WireguardのClientごとに被らないようにする)
- AllowedIPs: 0.0.0.0/0(ルーティングが必要なためおそらくデフォルトゲートウェイとする必要がありそう)
- ExtraAllowedIPs: 192.168.150.0/24(自宅内のネットワークをすべてここに追加)
自宅内の代表鯖にて...
- 上記の8番で作成したコンフィグをダウンロードして保存する
vim /etc/wireguard/wg0.conf
- サーバ側(
192.168.150.252/24
)で自動起動に設定しつつ起動開始
sudo systemctl enable wg-quick@wg0 --now
終わりに
これにて、自宅のNATされた環境内にVPNでアクセスできるようになりました。VPN鯖に直接GIPを触れないような環境の方とかに役立てればと思います。一方で、構築時の不明点や文章の誤字脱字等あればコメントいただけると幸いです。よろしくお願いいたします。
Discussion