Ansible
raspbian
Raspberrypi3
wireguard

ラズパイに構築したWireGuardにmacOS、iOSからVPN接続してみた

macOSにWireGuardクライアントアプリが登場したので、raspi3にをサーバにしてmacOS(mojave)、iOSアプリからWireGuardを使用してVPN接続してみた。


結果


  • raspi3のraspbian(stretch)ではWireGuardを問題なく導入できた。

  • iOS、macOSのWireGuardクライアントアプリから問題なく接続できた。

  • でもハマりポイントがあった

以下に検証した結果を書いていきます。


WireGuardとは

詳細はこちら

特徴としては


  • 新しいオープンソースのVPNプロトコル(あくまでプロトコルでありOpenVPN等のソフトウェアではない)であり、実態はカーネルモジュール


  • OpenVPNより高速で通信量が少ないらしい


  • OpenSSLに依存していないため導入がシンプル

  • まだ開発途上で安定していない?

  • 使用できるプロトコルはUDPのみでTCPは使えない

ということらしい。


サーバ側

raspberrypi3(raspbian strech)にansibleでインストールしセットアップ。Playbookを公開しているので詳細はこちらを参照。

ポイントとしては


  • カーネルモジュールとしてインストールしているので最後にrebootする必要がある。

    起動後にlsmodで見えていれば多分大丈夫。

root@raspi3-wireguard:~# lsmod | grep -i wireguard

wireguard 151552 0
ip6_udp_tunnel 16384 1 wireguard
udp_tunnel 16384 1 wireguard
ipv6 425984 25 wireguard


  • Listenポートを53にしてFreeWifiでも接続できるようにしている。


  • templates/wg0.confPublickeyは後述するmacOS、iOSアプリで生成した公開鍵を記述する。


  • peerのAllowdIPsに後述するクライアントIPを指定する必要がある。
    0.0.0.0/0でanyで許可もできるが、今回の検証ではクライアントIPを/32で指定しないとインターネットに出られなかった。
    最初0.0.0.0/0で指定していて結構ハマッた。

ぐらいでしょうか。

OpenVPNみたいにopensslで証明書を作らなくていいのでとても楽。HeartBleedのような重大な脆弱性の影響も受けないし導入、運用はOpenVPNより簡単かなと思った。


クライアント(macOSアプリ)


  • AppStoreからインストール。今回使用したバージョンは0.0.20190207 (3)

  • 鍵ペアを生成し、Publickeyはサーバ側で指定。


  • PeerPublickeyにサーバで生成したPublickeyを指定。


  • PeerEndpointにサーバのグローバルIPとLiatenポートを指定。IPは名前でも問題ないのでDDNSで指定することも可。


  • InterfaceAddressesはサーバ側のインタフェースのIPレンジ内を指定

screenshot 2019-02-24 23.24.12.png

あとはStatus: Inactiveのチェックを入れるとWireGuardサーバに接続できる。


クライアント(iOSアプリ)


  • AppStoreからインストール。今回使用したバージョンは0.0.20190207 (3)


  • Create from scratchから鍵ペアを生成しmacOSアプリと同様にサーバ情報を入力。

IMG_7717.png

IMG_7718.png


おわりに


  • いくつか詰まるところがあったがとりあえずmacOS、iOSでVPNで接続したいという目的を達成することができた。

  • サーバ側でトラブルシューティングが辛かった。(ログが全く出せないので切り分けが非常に大変)
    今回詰まったときに行った調査としては


    • tcpdumpでwg0インタフェースにパケットがきているか


    • wg0にパケットがきているならiptableswg0インタフェースのin,out,natでパケットが処理されているか



ぐらいしか確認できなかった気がする。


  • これでOpenVPNWireguardでVPNできる様になったので、両方を使いながら使用感を見ていきたい。またそのうち速度比較がしたい。