OpenVPNからWireguardに乗り換え

技術ネタ

こないだLinuxカーネルメインラインにWireguardのコードがマージされたってニュースが有りました。

2020年2月4日 オープンソースのVPNプロトコル「WireGuard」がLinux 5.6で実装へ | gihyo.jp
Linus Torvaldsは1月29日、開発中のLinuxカーネル「Linux 5.6」のソースツリーに、主要メンテナーDavid Millerのプルリクエストを大量にマージした。
Linuxカーネルの開発ツリーに次世代VPN・WireGuardがマージ
Linuxカーネルの開発者であり、現在もLinuxカーネルの開発に深く関わっているLinus Torvalds氏が参加しているLinuxカーネルの開発ツリーに、オープンソースのVPNプロトコルであるWireGuardが、1月29日(現地時間)に正式に加わった。

どんなプロトコルなんだろうってちょっと調べてみたら

  • コードベースが小さい
  • 強度の高い暗号化アルゴリズムを使用している
  • OpenSSLに依存しない(重要)

なんですって。

301 Moved Permanently

これは良いんじゃないですか?今後も期待できるし、今うちで使ってるDD-WRTルータのVPNを切り替えできたら最高じゃない?と思ったら、もうすでに実装済みでした。

Wireguard - DD-WRT Wiki

じゃあやるしか無いでしょう!

DD-WRT側の設定

注意点は2つ。

  • LAN側と重複しないアドレスをWireguardトンネル用に確保する
  • 期待した通信ができない場合は「CVE-2019-14899 Mitigation」の設定を変えてみる

Administration>Commands

LAN側にトンネル経由で接続できるようにするには、Firewall定義に以下のコマンドを追加する。

iptables -t nat -I POSTROUTING -o br0 -j SNAT --to $(nvram get lan_ipaddr)

Services>Services

DnsmasqのAdditional Dnsmasq Optionsに以下の内容を設定。
これをしないとトンネル接続後に、DD-WRTのDnsmasqを使った名前解決ができない。

interface=oet1
no-dhcp-interface=oet1

Setup > Tunnels

  • Tunnel:Disable → Enable
  • Protocol Type:Wireguard
  • Local Port:お好みで(443とかしたほうがいいのかな)
  • IP Address:任意の範囲(LAN側と重複しないアドレス。例では10.0.0.1)
  • Subnet Mask:任意の範囲(そんなにたくさんじゃなければ255.255.255.0で良いかな)

あと、忘れず「Generate Key」しとく。

Peer(クライアント)の登録

「Add Peer」をクリックして、クライアントの設定を1対向ずつやっていく。

  • Peer Tunnel IP:先に設定した「IP Address/Subnet Mask」の範囲から割り当てる。例では10.0.0.2を設定。
  • Peer Tunnel DNS:ルータ自身にDNSのリゾルバをやらせるので、先に設定したIP Addressを設定する。例では10.0.0.1を設定。
  • Endpoint:Disableのまま
  • Allowed IPs:Wireguard経由で通信可能な範囲。すべてのトラフィックをVPN経由にするなら「0.0.0.0/0」のままでよい どうもこれだとうまく動かないようで、再起動するとNGでした。「Peer Tunnel IP」を32ビットで指定した形式(例だと 10.0.0.2/32)にするとOKでした。

で、この状態で「QR-code」をクリックすると、設定情報が入ったQRコードが生成される。これをクライアント側のアプリで読み込ませると自動的に設定が入る。

なお、単純に設定ファイルのテキストをQRコードにしているだけなので、PCで使いたい場合はQRコードをデコードして出てきた内容をそのまま設定ファイルに書き込めばOK。

クライアント側の設定

手元にあるのがMacbookAir(macOS Catalina)、iPad Pro、Android 9.0(Galaxy S9)なのでそれぞれでやってみました。

macOS

Mac App Storeから「Wireguard」をインストールします。

‎WireGuard
‎WireGuard is a fast, modern, and secure VPN tunnel. This app allows users to manage and use WireGuard tunnels. The app can import new tunnels from archives and...

起動するとまっさらな状態なので、トンネル設定を入れます。左下の「+」をクリックして「Add Empty Tunnel」をクリックします。

  • Name:この設定に付ける名前です。「DD-WRT」とか適当につけます
  • On-Demand:自動的にトンネルを接続させたい場合は、その接続種別にチェックを入れます。

下の部分には勝手に設定が入っていますが、前述のQRコードからデコードした設定で上書きします。設定を入れたら「Save」をクリックします。このとき、VPN設定を行う許可を求められるので「許可」します。

設定が登録されました。「Activate」ボタンをクリックするとトンネルが確立します。(切断する際は「Deactivate」をクリックします)。

接続中

iPad Pro(iOS系)

AppStoreから「Wireguard」をインストールします。

‎WireGuard
‎WireGuard is a fast, modern, and secure VPN tunnel. This app allows users to manage and use WireGuard tunnels. The app can import new tunnels from archives and...

起動するとまっさらな状態なので「Add Tunnel」をタップします。

QRコードを読み込んで設定するので「Create from QR code」をタップします。

QRコードを読み込むと設定名を入れるダイアログが出るので、お好きな名前を入れます(私はHome-routerと入れました)。このあとVPN構成の追加の確認画面が表示されるので「許可」をタップします。

これで設定が追加されます。設定名をタップすると詳細な設定が確認できます。

「Active」スイッチを入れるとトンネルが確立します。

Galaxy S9(Android)

Playストアから「Wireguard」をインストールします。

WireGuard - Google Play のアプリ
VPNトンネルをセキュアWireGuard

起動するとまっさらな状態なので、右下の「+」をタップします。

QRコードから設定するので「Create from QR code」をタップします。

カメラが起動するのでQRコードを読み込ませます。正常に読み込むと設定名を入れるダイアログが出るので、お好きな名前を入れます(私はHome-routerと入れました)。

これで設定が登録されます。

設定名の右のスイッチを入れるとトンネルが確立します。

まとめ

OpenVPNを使うよりもトンネル確立が速く、データ送受信も速いのでOpenVPNは使わないことにしました。設定もややこしいですしね。

コメント

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