色々とワケ有って環境戻してみたところ、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
コメント