WireGuardの設定のメモ

Ubuntu/Debian iptables環境前提

1. インストール #

sudo apt update&&sudo apt install wireguard

2. 鍵の作成 #

WireGuardはサーバーとクライアント両方で公開鍵と秘密鍵のペアが必要です

$ sudo su
# cd /etc/wireguard
# wg genkey > wgserver.key #サーバーの秘密鍵作成
# wg pubkey < wgserver.key > wgserver.pub #サーバーの公開鍵作成
# wg genkey > wgclient.key #クライアントの秘密鍵作成
# wg pubkey < wgclient.key > wgclient.pub #クライアントの公開鍵作成

# chmod 600 wgserver.key
# chmod 600 wgclient.key

3. 設定 #

IPフォワードを有効にする必要がある

# echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
# sysctl -p
net.ipv4.ip_forward = 1

/etc/wireguard/wg0.confを作成する

VPNのインターフェースは192.168.10.1/24
50000番で待ち受け
クライアントは192.168.10.2とする

PostUp PostDownはNATの設定なのでインターフェース名は適宜変更する
クライアントを追加する場合は、Peerを追加する

[Interface]
Address = 192.168.10.1/24 #VPNインターフェースで使うIPアドレス
PrivateKey = #wgserver.keyの内容
ListenPort = 50000
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

[Peer]
PublicKey = #wgclient.pubの内容
AllowedIPs = 192.168.10.2/32 #クライアントに割り当てるIPアドレス

同様にchmod 600 wg0.confで権限を変える


50000番で待ち受けるのでiptablesのは下のように設定(UDPなので注意)

-A INPUT -p udp --dport 50000 -j ACCEPT

WireGuard経由でインターネットに出たり、クライアント同士で通信するには以下の設定が必要

インターフェース名は適宜変更してください

-A FORWARD -i wg0 -o eth0 -j ACCEPT
-A FORWARD -i eth0 -o wg0 -j ACCEPT
-A FORWARD -i wg0 -o wg0 -j ACCEPT

4. 起動 #

$ sudo systemctl enable wg-quick@wg0
$ sudo systemctl start wg-quick@wg0

5. クライアントの設定 #

クライアントにもWireGuardをインストール
/etc/wireguard/wg0.confを作成する

[Interface]
PrivateKey = #wgclient.keyの内容
Address = 192.168.10.2/24 #サーバー側で割り当てたクライアント用IPアドレス
#DNS = 1.1.1.1

[Peer]
PublicKey = #wgserver.pubの内容
AllowedIPs = 192.168.0.0/24, 192.168.10.0/24 #WireGuardを経由するアドレス範囲
EndPoint = #サーバーのIPアドレス:ポート
#PersistentKeepAlive = 25 #NAT背後の場合は設定

PeerのAllowedIPsで0.0.0.0/0を指定するとすべての通信がWireGuard経由になる
サーバーからクライアント、クライアントからクライアントを通すにはAllowedIPsにVPNインターフェースのアドレスを指定する必要がある(ここでは192.168.10.0/24)

sudo wg-quick up wg0で接続
sudo wg-quick down wg0で切断

systemd-resolvedを使っている場合は、openresolvではなくsystemd-resolvconfをインストールしてください。(/etc/resolv.confが上書きされるため)