はじめに
この記事ではWireGuardの導入方法を解説しています。私も日頃から利用していますが、リモートデスクトップ接続しても概ね安定して利用できています。
環境
Ubuntu 20.04 LTS
インストール
sudo apt -y update&&sudo apt -y upgrade&&sudo apt -y autoremove
sudo apt -y install wireguard
apt
コマンドを用いてパッケージの更新をしてから、WireGuardのパッケージをインストールします。
カーネルパラメーターの設定
この設定を行わないと、インターネットに接続できなくなってしまいます。
sudo nano /etc/sysctl.conf
- #net.ipv4.ip_forward=1
+ net.ipv4.ip_forward=1
設定ファイルを書き換えた後は、以下のコマンドで変更を反映します。
sudo sysctl -p
ファイアウォールの設定
ufwを有効化していない場合は、以下のコマンドで有効化します。
sudo ufw enable
私の環境では、IPv6を利用しないのでIPv6を無効化するために設定ファイルを書き換えます。
sudo nano /etc/default/ufw
- IPV6=yes
+ IPV6=no
51820ポートをudpで通信するためにufw
コマンドを用いてそのポートを許可します。もちろん、セキュリティー対策のために適当なポートに変更しても構いません。
sudo ufw allow 51820/udp
鍵の生成
WireGuardでは公開鍵認証を用いて認証します。なので、手動で鍵を生成する必要があります。本来、WireGuardはPeer to Peer(P2P)なのでサーバーとクライアントという概念はないのですが、わかりやすく鍵の名前はserver.key
やclient0.pub
にしています。
秘密鍵と公開鍵の生成
# 分かりやすいように生成した鍵は、以下のディレクトリに入れていくことにします。
sudo mkdir /etc/wireguard/wg0
# サーバー側の持つ公開鍵と認証鍵を生成します。
sudo wg genkey | sudo tee /etc/wireguard/wg0/server.key
sudo cat /etc/wireguard/wg0/server.key | sudo wg pubkey | sudo tee /etc/wireguard/wg0/server.pub
# クライアント側が持つ公開鍵と秘密鍵を生成します。
sudo wg genkey | sudo tee /etc/wireguard/wg0/client0.key
sudo cat /etc/wireguard/wg0/client0.key | sudo wg pubkey | sudo tee /etc/wireguard/wg0/client0.pub
事前共有鍵の生成
この鍵を利用するかどうかはオプションになっているみたいです。利用するとより安全になるみたいです。
sudo wg genkey | sudo tee /etc/wireguard/wg0/client0-preshared.key
サーバー側の設定ファイルの作成
先程生成した鍵を利用して設定ファイルを作成します。設定ファイルの名前は、「wg0.conf」にしてください。
sudo nano /etc/wireguard/wg0.conf
[Interface]
Address = 192.168.5.1/24
SaveConfig = true
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
ListenPort = 51820
PrivateKey = [server.keyの内容]
[Peer]
PublicKey = [client0.pubの内容]
PresharedKey = [client0-preshared.keyの内容]
AllowedIPs = 192.168.5.2/32
クライアント側の設定ファイルの作成
同じく、先程生成した鍵を利用して設定ファイルを作成します。
sudo nano /etc/wireguard/client0.conf
[Interface]
Address = 192.168.5.2/24
DNS = [DNSサーバーのIPアドレス]
PrivateKey = [client0.keyの内容]
[Peer]
PublicKey = [server.pubの内容]
PresharedKey = [client0-preshared.keyの内容]
AllowedIPs = 0.0.0.0/0
Endpoint = [サーバーのIPアドレス]:51820
PersistentKeepalive = 25
WireGuardの起動と永続化
sudo wg-quick up wg0
sudo systemctl enable wg-quick@wg0
WireGuardの停止と無効化
sudo wg-quick down wg0
sudo systemctl disable wg-quick@wg0
Windows側の設定をする場合
「トンネルの追加」ボタンで、作成したクライアント側の設定ファイルを読み込ませた後にしておくと便利な設定があります。それは、右下にある「編集」ボタンで編集ウィンドウ開き、一番下の「トンネルを通らないトラフィックのブロック(キルスイッチ)」のチェックを外すことです。
このチェックをそのままにすると、例えば、LAN上にある共有ドライブにアクセスできなくなったりします。
おわりに
グローバルIPアドレスを持つサーバーが一台必要になりますが、WireGuardを利用すると外出先から自宅のデスクトップパソコンをアクセスして重い処理するみたいなこともできるようになりますね。
参考文献