スポンサーリンク

RaspberryPi で WireGuard VPN サーバー

RaspberryPi

色々とワケ有って環境戻してみたところ、Kernel 5.6.0以降のカーネルに標準搭載されました。

Raspbian でもaptから普通に使えるようになっていたので、かんたんにメモ書きしておきます。

インストール

検索すると、testingらしいですが普通に使えます。

# search
$ apt search wireguard
ソート中... 完了
全文検索... 完了
wireguard/testing,now 1.0.20200827-1~bpo10+1 all
  fast, modern, secure kernel VPN tunnel (metapackage)
​
wireguard-dkms/testing 1.0.20210124-1~bpo10+1 all
  fast, modern, secure kernel VPN tunnel (DKMS version)
​
wireguard-tools/testing,now 1.0.20200827-1~bpo10+1 armhf
  fast, modern, secure kernel VPN tunnel (userland utilities)
​
wireguard-tools-dbgsym/testing 1.0.20200827-1~bpo10+1 armhf
  debug symbols for wireguard-tools
​
# install
$ sudo apt install -y wireguard wireguard-tools

dkmsは動かないようで入れてもバグるだけでした。

設定

まず適当な場所でVPN用のキーを作ります。

秘密鍵の作成

$ wg genkey > privateky

公開鍵の作成

$ wg pubkey < privatekey > publickey

サーバー側とクライアント側それぞれ作る必要があります。

サーバー側の設定

接続できるように設定を雛形に基づいて手書きです。

基本的に /etc/wireguard/ に設定ファイルを作成します。

# /etc/wireguard/wg0.conf
[Interface]
PrivateKey = QIPhUGyVt8pQeL0pNpIafDExVD6F+SvO0R3A6BLjmHs= # Server Privatekey
Address = 192.168.10.1, fd01::1
MTU = 1420 #推奨値らしい
ListenPort = 51820
​
PostUp = iptables -A FORWARD -i %i -j ACCEPT;iptables -A FORWARD -o %i -j ACCEPT;iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE;ip6tables -A FORWARD -i %i -j ACCEPT; ip6tables -A FORWARD -o %i -j ACCEPT; ip6tables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
​
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE;ip6tables -D FORWARD -i %i -j ACCEPT; ip6tables -D FORWARD -o %i -j ACCEPT; ip6tables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
​
[Peer]
PublicKey = 4JElIMvZfpFZ4Fe2nejWtQ9P8vak58bbGgEPx7fSzSg= # Client Publickey
AllowedIPs = 192.168.10.2/32, 192.168.2.0/24, fd01::2/128

サーバー起動時終了時に、iptablesでnat設定をしています。 設定がないとインターネットに出れません。 IPv6でもnat6を利用しています。IPv6でインターネットに出れる環境であれば、ipv6.google.comでページ表示を確認できています。

サーバーの起動

wg-quickを利用します。

# wg-quick up wg0
# wg-quick down wg0

systemdでの起動登録

# systemctl start wg-quick@wg0
# systemctl enable wg-quick@wg0

ピアの設定例

クライアント側設定例

[Interface]
PrivateKey = [Client Privatekey]
Address = 192.168.10.1, fd01::1
MTU = 1420
ListenPort = 51820
​
[Peer]
PublicKey = [Server Publickey]
AllowedIPs = 0.0.0.0/0, ::/0 # 192.168.10.0/24, 192.168.1.0/24 全部通さない場合は範囲を指定する。
Endpoint = [server address]
PersistentKeepalive = 25 # Keep alive 接続のチェック間隔

キーは交換

スマホのアプリの場合各項目埋めていく必要が有ります(結構たいへん)

書いた設定をQRで読ませることもできますが、結構設定抜けるので現状手書きするほうがたぶんいいと思います。。

一応qrencodeでQR生成例

qrencode -o QR.png -t ansiutf8 < foo.conf

終わり

クライアント側から接続して、受信送信それぞれパケットが確認できれば設定完了です。

受信が0の場合設定ミスやポートが開いてない等のため見直しです。

参考というかたぶん一番読みやすいarchlinuxさん

WireGuard - ArchWiki

コメント

タイトルとURLをコピーしました