WireguardというVPNソフトをUbuntu上に構築した際のメモです。
Wireguardとは
Wireguardは、OSSのVPN(Virtual Private network)ソフトウェアとなっており、インターネットを使ってプライベートネットワークを構築することが可能。
従来のVPNソフトウェアに比べて処理速度が非常に高速で、非常にセキュアとのことです。また、軽量な設計により、様々なOSに対応しています。
Wireguardのメリット
Wireguardは、他のVPNソフトウェアに比べて以下のようなメリットがあります。
- 高速な処理速度
- セキュアな通信
- 軽量な設計
- 様々な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
イメージ図
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の構築についてのメモでした。