Help us understand the problem. What is going on with this article?

WireGuard をつかってみる

話題の 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
4cast
豊かな表現力と確かな技術力でインターネットを通じて豊かな社会づくりを目指す会社
http://www.4cast.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした