グリーン免許エンジニアのNotepad

エンジニアの免許を取得したてのほやほやエンジニアが作るNotepadです。Notepad(メモ帳)以上のことは書けません。

WireguardにてVPNを構築する 〜自分しかアクセスできないWebサーバを作ろう〜

WireguardというVPNソフトをUbuntu上に構築した際のメモです。

Wireguardとは

Wireguardは、OSSVPN(Virtual Private network)ソフトウェアとなっており、インターネットを使ってプライベートネットワークを構築することが可能。

従来のVPNソフトウェアに比べて処理速度が非常に高速で、非常にセキュアとのことです。また、軽量な設計により、様々なOSに対応しています。

Wireguardのメリット

Wireguardは、他のVPNソフトウェアに比べて以下のようなメリットがあります。

  1. 高速な処理速度
  2. セキュアな通信
  3. 軽量な設計
  4. 様々なOSに対応

シンプルイズベストということですね。

前提

以下の環境でWireGuardを構築します。

  • サーバ:ConoHaのVPS
  • サーバOS:Ubuntu 22.04.2 LTS
  • ConoHaの接続許可ポート:全て許可
  • ネットワーク:10.0.0.0/24
  • サーバIPアドレス:10.0.0.1
  • クライアント1のIPアドレス:10.0.0.2
  • クライアント2のIPアドレス:10.0.0.3

イメージ図

WireGuard構築 イメージ図

UFWの設定

最初にufwのポリシーを設定します。 ここでは、すべての通信をデフォルト拒否し、ロギング設定をしています。

$ sudo ufw default deny
$ sudo ufw logging on
$ sudo ufw logging medium

許可する通信の設定

$ sudo ufw allow 51820/udp
$ sudo ufw allow from 10.0.0.0/24 to any port 80 ←今回はWebにアクセスしたいのでこちらも追加
$ sudo ufw enable
$ sudo ufw status ←確認
Status: active

To                         Action      From
--                         ------      ----
OpenSSH                    ALLOW       Anywhere
51820/udp                  ALLOW       Anywhere
80                         ALLOW       10.0.0.0/24
51820/udp (v6)             ALLOW       Anywhere (v6)

IPフォワーディングの設定

VPNネットワークから別のネットワークへの通信をフォワーディングさせる設定

sudo vim /etc/sysctl.conf

28行めの行をコメントアウトする 変更前

27 # Uncomment the next line to enable packet forwarding for IPv4
28 # net.ipv4.ip_forward=1

変更後

27 # Uncomment the next line to enable packet forwarding for IPv4
28 net.ipv4.ip_forward=1

変更を反映

sudo sysctl -p

Wireguardインストール&鍵生成

インストール

$ sudo apt update
$ sudo apt install wireguard

サーバ用鍵の発行

$ wg genkey | sudo tee /etc/wireguard/privatekey | wg pubkey | sudo tee /etc/wireguard/publickey
$ sudo chmod 600 /etc/wireguard/privatekey /etc/wireguard/publickey

クライアント用鍵の発行

$ sudo mkdir /etc/wireguard/client ←クライアント用ディレクトリ

クライアント1
$ wg genkey | sudo tee /etc/wireguard/client/user01_privatekey | wg pubkey | sudo tee /etc/wireguard/client/user01_publickey
$ wg genpsk | sudo tee /etc/wireguard/client/user01_preshared
$ sudo sh -c "chmod 600 /etc/wireguard/client/user01_*"

クライアント2
$ wg genkey | sudo tee /etc/wireguard/client/user02_privatekey | wg pubkey | sudo tee /etc/wireguard/client/user02_publickey
$ wg genpsk | sudo tee /etc/wireguard/client/user02_preshared
$ sudo sh -c "chmod 600 /etc/wireguard/client/user02_*"

サーバの設定ファイル作成

$ sudo vim /etc/wireguard/wg0.conf
[Interface]
# server
Address = 10.0.0.1/24
ListenPort = 51820
PrivateKey = {sudo cat /etc/wireguard/privatekey の値}

PostUp = ufw route allow in on wg0 out on eth0
PostUp = iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE
PreDown = ufw route delete allow in on wg0 out on eth0
PreDown = iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

# user01
[Peer]
publicKey = {$ sudo cat /etc/wireguard/client/user01_publickey の値}
PresharedKey = {$ sudo cat /etc/wireguard/client/user01_preshared の値}
AllowedIPs = 10.0.0.2/32

# user02
[Peer]
publicKey = {$ sudo cat /etc/wireguard/client/user02_publickey の値}
PresharedKey = {$ sudo cat /etc/wireguard/client/user02_preshared の値}
AllowedIPs = 10.0.0.3/32

クライアントの設定ファイル作成

クライアント1

sudo vim /etc/wireguard/client/user01.conf
[Interface]
# client
PrivateKey = {sudo cat /etc/wireguard/client/user01_privatekey の値}
Address = 10.0.0.2
DNS = 1.1.1.1, 8.8.8.8

[Peer]
# server
PublicKey = {sudo cat /etc/wireguard/publickey の値}
PresharedKey = {sudo cat /etc/wireguard/client/user01_preshared の値}
AllowedIPs = 10.0.0.0/24
Endpoint = example.com:51820 WireGuardサーバのドメイン:ポート番号(GIP:ポート番号 でもOK)

クライアント2

sudo vim /etc/wireguard/client/user02.conf
[Interface]
# client
PrivateKey = {sudo cat /etc/wireguard/client/user02_privatekey の値}
Address = 10.0.0.3
DNS = 1.1.1.1, 8.8.8.8

[Peer]
# server
PublicKey = {sudo cat /etc/wireguard/publickey の値}
PresharedKey = {sudo cat /etc/wireguard/client/user02_preshared の値}
AllowedIPs = 10.0.0.0/24
Endpoint = example.com:51820 WireGuardサーバのドメイン:ポート番号(GIP:ポート番号 でもOK)

動作確認

WireGuardサーバの起動

$ sudo wg-quick up /etc/wireguard/wg0.conf

自動起動設定

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

以上でWireGuardの構築は完了です。

あとは、クライアント端末にWireGuardのクライアントソフトをインストール。

その後、今回作成したクライアントの設定ファイルuser○○.confをインポートの上、有効化するとVPNが接続されます。

参考

[ConoHa VPS] WireGuardでVPNサーバー構築 [Ubuntu 22.04 LTS] | Mulong.me

【Ubuntu】WireGuardで簡単VPN環境を構築 | VPS Life

おまけ

VPN繋いだ後にちゃんとwebが見れるかの確認としてPythonのHTTPServerが便利です。

使い方は任意のディレクトリにて以下のコマンドを実行すると、実行した場所をルートディレクトリとしたWebサーバが立ち上がります。

$ sudo python3 -m http.server 80

また、これを使用することで、confファイルのダウンロードも容易に行うことができますのでぜひ。

以上、Wireguardの構築についてのメモでした。

© 2018-2023 tt. All Rights Reserved.