ユーザ用ツール

文書の過去の版を表示しています。


Wire Guard

概要

様々な実装のあるVPNのなかで比較的後発のもの。 実装サイズは小さく軽量高速であるとされている。 Ubuntuのパッケージもあり、デスクトップにも統合されるので、導入が簡単である。

クライアントとして、Windows, Android, iOSなどもサポートされている。

設定

サーバをLinux(Ubuntu)に乗せて、外部から、Windows, Android, Ubuntuで接続する想定で説明する。 家庭内のLANは 192.168.1.0/24で構成されており、VPNは 192.168.10.0/24で構成されるものとする。 LAN内のDNSは192.168.1.1に、Wire Guardのサーバは192.168.10.1を持ち、192.168.1.2で動作しているものとする。

サーバ

インストール

パッケージがあるのでそれをインストールすればよい。

$ sudo apt install -y wireguard

設定

最初に行うべきは鍵の生成である。 鍵はwgコマンドで生成する。 鍵は画面に表示されるだけだが、ファイルに保存しておいた方が後々便利なのでそのようにする。

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

別にどこに保存してもいいですが、ばらけるとめんどくさいのでとりあえず/etc/wireguard に置きます。 一応中身を見られないように600にしておきます。

次に、設定ファイルを作りますが、これはVPNのインターフェイスごとに作ります。 仮に wg0 がインターフェイスだとしたら、/etc/wireguard/wg0.conf というファイルになります。 これも600で作成します。

wg0.conf
[Interface]
Address = 192.168.10.1/24
SaveConfig = true
PostUp = iptables -A INPUT -i wg0 -j ACCEPT; iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D INPUT -i wg0 -j ACCEPT; iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
ListenPort = 51800
PrivateKey = XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX=
 
[Peer]
PublicKey = YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY=
AllowedIPs = 192.168.10.2/32
 
[Peer]
PublicKey = ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ=
AllowedIPs = 192.168.10.3/32
 
[Peer]
PublicKey = UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU=
AllowedIPs = 192.168.10.4/32
 
[Peer]
PublicKey = WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW=
AllowedIPs = 192.168.10.5/32

Peerは接続してくるクライアントごとに持たせることができる。 DHCP機能はないので、IPはここで設定されたものが渡される。 クライアント側で生成されたPublicKeyに従って割り当てが行われる。

外部に対して、192.168.1.2:51800/UDP を公開して、サービスを起動すればVPN接続を待ち受ける。

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

クライアント

Linux (Ubuntu)

サーバと同じく wireguard パッケージをインストールする。

$ sudo apt install -y wireguard

設定も鍵を作って、/etc/wireguard/wg0.confを作成するところまでは同じである。

$ sudo wg genkey | sudo tee /etc/wireguard/client.key
$ sudo cat /etc/wireguard/client.key | wg pubkey | sudo tee /etc/wireguard/client.pub
$ sudo chmod 600 /etc/wireguard/client.{key,pub}
wg0.conf
[Interface]
PrivateKey = yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy=
Address = 192.168.10.2/24
DNS = 192.168.1.1
 
[Peer]
PublicKey = xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx=
EndPoint = vpn.example.com:51800
AllowedIPs = 192.168.10.0/24, 192.168.1.0/24

上の例では、LAN内へのトラフィックだけをVPNへ流すようにしていますが、AllowedIPs = 0.0.0.0/0 とすればすべてのトラフィックをVPN経由とします。

デスクトップ版を使っている場合はタスクバーに統合されているウィジェットから起動することもできますが、手動で起動する場合には、コマンドラインから以下のようにします。

$ sudo wg-quick up wg0

停止は次のようになります。

$ sudo wg-quick down wg0

Windows

クライアントを公式サイトからダウンロードしてインストールします。

Android

クライアントをGoogle Playからダウンロードしてインストールします。

メモ

鍵の転送

設定ファイルには、鍵を書込む必要があるが、当然鍵をネットワーク越しに渡すのは注意が必要である。 秘密鍵は外部に出さないように注意すること。 公開鍵だけがわかったところで簡単にはクラックされないが両方そろうとそれは問題である。

This website uses cookies. By using the website, you agree with storing cookies on your computer. Also, you acknowledge that you have read and understand our Privacy Policy. If you do not agree, please leave the website.

More information