更新履歴

  1. : 公開
  2. : 80 番ポートについて追記

はじめに

個人用サービスのセルフホストに使っているサーバに WireGuard を導入する作業をしたのでメモ。

登場するホストは以下のとおり:

  • サーバ (Ubuntu): 10.10.1.1
  • クライアント 1 (Windows): 10.10.1.2
  • クライアント 2 (Android): 10.10.1.3

後ろの IP アドレスは VPN 内で使用するプライベート IP アドレス。

WireGuard のインストール: サーバ

まずは個人用サービスをホストしている Ubuntu のサーバに WireGuard をインストールする。

$ sudo apt install wireguard

次に、WireGuard で使用する鍵を生成する。

$ wg genkey | sudo tee /etc/wireguard/server.key | wg pubkey | sudo tee /etc/wireguard/server.pub
$ sudo chmod 600 /etc/wireguard/server.{key,pub}

WireGuard のインストール: クライアント

公式サイトから各 OS 向けのクライアントソフトウェアを入手し、インストールする。次に、設定をおこなう。

# クライアント 1 の場合
[Interface]
Address = 10.10.1.2/32
PrivateKey = <クライアント 1 の秘密鍵>

[Peer]
PublicKey = <サーバの公開鍵>
AllowedIPs = <サーバの外部 IP アドレス>/32
Endpoint = <サーバの外部 IP アドレス>:51820
# クライアント 2 の場合
[Interface]
Address = 10.10.1.3/32
PrivateKey = <クライアント 2 の秘密鍵>

[Peer]
PublicKey = <サーバの公開鍵>
AllowedIPs = <サーバの外部 IP アドレス>/32
Endpoint = <サーバの外部 IP アドレス>:51820

PrivateKeyPublicKey は鍵ファイルのパスではなく中身を書くことに注意。

WireGuard の設定

一度サーバへ戻り、WireGuard の設定ファイルを書く。

$ sudo vim /etc/wireguard/wg0.conf
[Interface]
Address = 10.10.1.1/32
SaveConfig = true
PrivateKey = <サーバの秘密鍵>
ListenPort = 51820

[Peer]
PublicKey = <クライアント 1 の公開鍵>
AllowedIPs = 10.10.1.2/32

[Peer]
PublicKey = <クライアント 2 の公開鍵>
AllowedIPs = 10.10.1.3/32

次に、WireGuard のサービスを起動する。

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

ファイアウォールの設定

続けてファイアウォールを設定する。まずは WireGuard が使用する UDP のポートを開き、wg0 を通る通信を許可する。

$ sudo ufw allow 51820/udp
$ sudo ufw allow in on wg0
$ sudo ufw allow out on wg0

次に、80 や 443 などの必要なポートについて、wg0 を経由してのアクセスのみ許可する。

$ sudo ufw allow in on wg0 to any port 80 proto tcp
$ sudo ufw allow in on wg0 to any port 443 proto tcp

最後に、ufw を有効にする。

$ sudo ufw status
$ sudo ufw enable

接続する

これで、各クライアントで VPN を有効にすると、当該サーバの 80 ポートや 443 ポートにアクセスできるようになったはずだ。念のため VPN を切った状態でアクセスできないことも確認しておくとよいだろう。

追記: 80 番ポートについて

Let's Encrypt でサーバの証明書を取得している場合、80 番ポートを空けておく必要がある。気づかないうちに証明書が切れないよう注意。