LoginSignup
27
35

More than 3 years have passed since last update.

WireGuard をつかってみる

Last updated at Posted at 2018-08-04

話題の Wireguard を使ってみます。
詳しい中身はFadis さんの発表「作って理解するWireGuard」を見るのがいいんじゃないでしょうか。

構成

今回構築してみる構成は物凄く雑ですが以下のような感じ。

Setup

Server-side

サーバ側は RaspberryPi で OS は Raspbian (stretch) で動作しているものとして仮定します。
Raspbian では Wireguard のパッケージがないので、Debian のものを利用します。

$ curl https://ftp-master.debian.org/keys/archive-key-9.asc | sudo apt-key add -

まず、Debian のパッケージ署名に利用されている鍵を追加します。

$ sudo apt update
$ sudo apt install wireguard

鍵の生成

$ wg genkey | tee privatekey | wg pubkey > publickey
$ cat publickey
MI0xoT46YvrlpudVEMC0zNTSvhFydLZsTTB+a64WPHA=
$ cat privatekey
4HtcVyAy2sk7jiTcFI7hmFkbEmEd99XK7TKbQrMUiHQ=

Add wireguard device

$ sudo ip link add dev wg0 type wireguard

Create wireguard configuration

$ cat <<EOF > /etc/wireguard/wg0
[Interface]
ListenPort = 51823
PrivateKey = 4HtcVyAy2sk7jiTcFI7hmFkbEmEd99XK7TKbQrMUiHQ=

[Peer]
PublicKey = L/lfwlWKAATzPXf8ZAarLEtq/g0bqh2jXTxbJpVmCg4=
AllowedIPs = 172.16.0.0/31, 192.168.0.0/24
EOF

ここで指定している、PrivateKey はServer sideのもので、PublicKey は Client side のものです。
後程記述しますが、Client sideでも同様に鍵の生成を行います。

AllowedIPs は、ここで指定したレンジが Wireguard で通信できる IP アドレスレンジになります。

Set wireguard config

$ sudo wg setconf wg0 /etc/wireguard/wg0

Linkup

$ sudo ip addr add 172.16.0.0/31 dev wg0
$ sudo ip link set up wg0

172.16.0.0/31 は Point-to-point な接続でのみで利用します。

(Optional) NATの設定

$ sudo iptables -t nat -A POSTROUTING -o eth0 -s 172.16.0.0/31 -j MASQUERADE

必要に応じて、内部ネットワークへ接続するときはNATするとか行います。
設定をしている機器がルータであれば、特に必要ないかなと思います。

これでサーバ側のセットアップは完了です。

Client-side

Client は Gentoo Linux で動作しているものとします。
Gentoo には net-vpn/wireguard というパッケージが用意されていますので、emerge コマンドでコマンドラインツールや、カーネルモジュールをインストールすることができます。

$ sudo emerge net-vpn/wireguard

鍵の生成

$ wg genkey | tee privatekey | wg pubkey > publickey
$ cat publickey
MI0xoT46YvrlpudVEMC0zNTSvhFydLZsTTB+a64WPHA=
$ cat privatekey
IPHWHdwUx3wYwUJAOUtKLZEE/XmCFPmdXPVRTStf20E=

Add wireguard device

$ sudo ip link add dev wg0 type wireguard

Create wireguard configuration

$ cat <<EOF > /etc/wireguard/wg0
[Interface]
ListenPort = 51823
PrivateKey = IPHWHdwUx3wYwUJAOUtKLZEE/XmCFPmdXPVRTStf20E=

[Peer]
PublicKey = MI0xoT46YvrlpudVEMC0zNTSvhFydLZsTTB+a64WPHA=
AllowedIPs = 172.16.0.0/31, 192.168.0.0/24
Endpoint = 192.0.2.1
PersistentKeepalive = 25
EOF

Endpoint で指定するアドレスはサーバのグローバルIPアドレスです。

Set wireguard config

$ sudo wg setconf wg0 /etc/wireguard/wg0

Link up

$ sudo ip addr add 172.16.0.1/31 dev wg0
$ sudo ip link set up wg0

Add route
内部ネットワークである 192.168.0.0/24 は wg0 経由で通信することになります。
そのために必要なルートをルートテーブルに追加します。

$ sudo ip route add 192.168.0.0/24 via 172.16.0.0

Test connectivity

Client to Server

$ ping -c 4 172.16.0.0
PING 172.16.0.0 (172.16.0.0) 56(84) bytes of data.
64 bytes from 172.16.0.0: icmp_seq=1 ttl=64 time=122 ms
64 bytes from 172.16.0.0: icmp_seq=2 ttl=64 time=138 ms
64 bytes from 172.16.0.0: icmp_seq=3 ttl=64 time=137 ms
64 bytes from 172.16.0.0: icmp_seq=4 ttl=64 time=126 ms

--- 172.16.0.0 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3003ms
rtt min/avg/max/mdev = 122.268/131.354/138.562/7.090 ms

Client to Internal Network

$ ping -c 4 192.168.0.1
PING 192.168.0.1 (192.168.0.1) 56(84) bytes of data.
64 bytes from 192.168.0.1: icmp_seq=1 ttl=63 time=186 ms
64 bytes from 192.168.0.1: icmp_seq=2 ttl=63 time=134 ms
64 bytes from 192.168.0.1: icmp_seq=3 ttl=63 time=124 ms
64 bytes from 192.168.0.1: icmp_seq=4 ttl=63 time=123 ms

--- 192.168.0.1 ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 123.024/142.028/186.595/26.095 ms
27
35
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
27
35