3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Qiita全国学生対抗戦Advent Calendar 2023

Day 8

WireGuardは良き 〜インストールから導入まで〜

Last updated at Posted at 2023-12-13

はじめに

 この記事では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
/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
/etc/default/ufw
- IPV6=yes
+ IPV6=no

 51820ポートをudpで通信するためにufwコマンドを用いてそのポートを許可します。もちろん、セキュリティー対策のために適当なポートに変更しても構いません。

sudo ufw allow 51820/udp

鍵の生成

 WireGuardでは公開鍵認証を用いて認証します。なので、手動で鍵を生成する必要があります。本来、WireGuardはPeer to Peer(P2P)なのでサーバーとクライアントという概念はないのですが、わかりやすく鍵の名前はserver.keyclient0.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
/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
/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側の設定をする場合

 「トンネルの追加」ボタンで、作成したクライアント側の設定ファイルを読み込ませた後にしておくと便利な設定があります。それは、右下にある「編集」ボタンで編集ウィンドウ開き、一番下の「トンネルを通らないトラフィックのブロック(キルスイッチ)」のチェックを外すことです。
1.png
 このチェックをそのままにすると、例えば、LAN上にある共有ドライブにアクセスできなくなったりします。

おわりに

 グローバルIPアドレスを持つサーバーが一台必要になりますが、WireGuardを利用すると外出先から自宅のデスクトップパソコンをアクセスして重い処理するみたいなこともできるようになりますね。

参考文献

3
5
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?