VPNサーバWireGuardの設定です。
空港やカフェなどの公衆WiFiを使用する際に、セキュアに接続できるVPNサービスとして利用できるように、VPN接続でインターネットへルーティングする設定を説明します。
あまりインターネット側へルーティングする説明がネット上に無いので、本記事で説明します。
なお、クライアントの設定にも注意が必要ですが、クライアントの設定については、次回以降に説明します。
ここで構築するVPN
・VPNサーバのVPN側アドレスは 10.8.0.1
・VPNクライアントのアドレスは 10.8.0.0/24(各クライアント側でアドレスを指定します)
・VPN接続後、クライアントの全ての通信は VPNサーバ経由で行われます。
必要パッケージのインストール
CentOS
yum install elrepo-release epel-release
yum install kmod-wireguard wireguard-tools
Ubuntu
apt install wireguard-tools
設定
鍵の作成
サーバ用秘密鍵、サーバ用公開鍵、クライアント用秘密鍵、クライアント用公開鍵を作成します。
次のコマンドを実行します。各コマンド実行で表示されるものが秘密鍵、公開鍵です。
なお、Ubuntuでは先だって umask 077 と実行します。これをしておかないと、以下の実行で、
Warning: writing to world accessible file.
Consider setting the umask to 077 and trying again.
と出ます。
$ wg genkey | tee /etc/wireguard/server.key
kLGJYDGzAnIzh8HvX9+K26IaFMcc9KZoLrZyVhkwuW4=
$ cat /etc/wireguard/server.key | wg pubkey | tee /etc/wireguard/server.pub
8QMumFHOxRtgIvW3aqgjcGT7fhdJkcpJMLGnih9+7gc=
$ wg genkey | tee /etc/wireguard/client.key
yIODA7puoGq/qIAjfCXJsuL59EPhoPOhFbwqBjWqnkg=
$ cat /etc/wireguard/client.key | wg pubkey | tee /etc/wireguard/client.pub
zz2npxDRWAoN+8Y+OpQaWmKNp6qX5ZsjGIyhDR+QR2o=
作成した秘密鍵は、所有者のみアクセスできるようにアクセス権を設定しておきます。
chmod 600 /etc/wireguard/*.key
設定ファイル wg0.conf の設定
/etc/wireguard/wg0.conf を作成します。このファイル名 wg0 がVPNのネットワークデバイス名になります。
別の名前にした場合は、以降のwg0の箇所を置き換えてください。
サーバ用秘密鍵、クライアント用公開鍵は先の手順「鍵の作成」で表示された内容を記述します。
[Interface]
# サーバ用秘密鍵
PrivateKey = kLGJYDGzAnIzh8HvX9+K26IaFMcc9KZoLrZyVhkwuW4=
# サーバで使用するVPNアドレス
Address = 10.8.0.1
ListenPort = 51820
# WireGuard起動・終了時に実行される内容
# VPN外へルーティングするためのフォワーディングの設定。eth0は各環境に合わせる。
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;iptables -A FORWARD -o wg0 -j ACCEPT
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE;iptables -D FORWARD -o wg0 -j ACCEPT
[Peer]
# クライアント用公開鍵
PublicKey = zz2npxDRWAoN+8Y+OpQaWmKNp6qX5ZsjGIyhDR+QR2o=
# サーバと通信可能なVPNアドレス
AllowedIPs = 10.8.0.0/24
上記でeth0の箇所は、各環境に合わせて記述します。
次のコマンドを実行すると、結果で一番右側にインタフェース名が表示されますので、これを記述します。
例えば下記のようになった場合は、eth0の箇所は enp0s25 を記述します。
$ route | grep default
default gateway 0.0.0.0 UG 100 0 0 enp0s25
PostUp、PostDownの内容は、ここに書かずに別途iptablesの設定として書いてもいいのですが、Ubuntu(ufw)の場合はufwの設定と別ファイルの編集が必要で面倒です。
なので、このように PostUp、PostDown の箇所に記述しています。
ファイアウォール・パケットフォワーディング有効化の設定
システムでパケットのフォワーディングを有効にします。
/etc/sysctl.conf に次の行を追加します。
net.ipv4.ip_forward=1
設定を反映させます。
sysctl -p
ファイアウォールのルールを追加します。
iptablesの場合。
iptables -I INPUT -p udp --dport 51820 -j ACCEPT
iptables -I INPUT -i wg0 -j ACCEPT
iptables-save
ufwの場合。
ufw allow to any port 51820
ufw allow in on wg0
WireGuard自動機能の設定・確認
WireGuard がサーバ起動時に自動起動するようにし、続けて WireGuard を起動させます。
systemctl enable wg-quick@wg0
systemctl start wg-quick@wg0
動作確認します。
次のように ip a と実行します。
実行結果に、wg0 の内容があれば、動作OKです。
# ip a
:
:
3: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000
link/none
inet 10.8.0.1/32 scope global wg0
valid_lft forever preferred_lft forever
注意
wg0.conf の PostUp、PostDownに書いたiptablesのルールは、WireGuardの起動・終了時に実行されます。
WireGuard起動後に iptablesサービスを再起動すると、 wg0.conf の PostUp で設定していたルールは消えてしまいます。
この場合は、 PostUp の内容を手動で実行するか、systemctl restart wg-quick@wg0 実行で WireGuard を再起動してください。
参考
WireGuard サーバー Ubuntu Server 20.04 LTS へのインストールおよび設定方法 – インフラエンジニアのメモ帳
Ubuntu 20.04 LTS : WireGuard : サーバーの設定 : Server World
第614回 WireGuardでVPNサーバーを構築する:Ubuntu Weekly Recipe|gihyo.jp … 技術評論社
コメント