これまで自宅内でのVPNの環境をどうしていたかというと、単にOpenVPNクライアントに対応したWi-Fiルーターを購入して、契約しているVPNサービスの情報を登録して接続したデバイスをVPNに経由させていただけでした。しかし最近は、通信速度の面でOpenVPNへの不満がたまりがちになり、高速といわれているWireGuardプロトコルを利用したVPNルーターを作ってみることにしました。

用意するもの

  • OpenWrtに対応したルーター(またはGL.iNetなどの既成品を買う)

SSHでログインし、以下のコマンドでWireGuard関連をインストールする。

opkg update
opkg install ca-bundle curl luci-proto-wireguard

WireGuardの鍵を生成する。

wg genkey | tee privatekey | wg pubkey > publickey

privatekey と publickey という2つのファイルが生成される。 tail privatekey publickey などで内容を確認しておく。

公開鍵を登録するために、VPNサービスごとに定められた手順に従う。Mullvadの場合はcurlでAPIを呼び出す。

curl https://api.mullvad.net/wg/ -d account=ACCOUNTNUMBER --data-urlencode pubkey=PUBLICKEY

(ACCOUNTNUMBER は自分のアカウントの番号、PUBLICKEY は publickey ファイルの内容に置き換える)

内容を確認しておく。

WireGuardインターフェイスの作成

OpenWrtの管理画面 ( http://192.168.1.1/ ) からメニューの「Network」→「Interfaces」に行き「Add new interface…」で新しいインターフェイスを作成する。名前はここでは「WGINTERFACE」とし、プロトコルを「WireGuard VPN」に選択して作成。

  • Private Key: 上で生成した privatekey の内容。
  • IP Addresses: APIサーバーから返答されたIPアドレス。

「Add peer」をクリックしてピアを以下のように追加する。

  • Description: jp1-wireguard.mullvad.net など
  • Public Key: WireGuardサーバーの公開鍵
  • Allowed IPs: 0.0.0.0/0
  • Endpoint Host: WireGuardサーバーのIPアドレスまたはホスト名
  • Endpoint Port: 51820 または指定されたポート

「Advanced Settings」タブの「Force link」をチェックし、保存する。

ファイアウォールの設定

メニューの「Network」→「Firewall」に行き、ゾーン一覧から「Add」で新しいゾーンを作成する。ゾーン名は「WGZONE」とする。「Masquerading」「MSS Clamping」にチェックして保存。
lanゾーンの「Edit」をクリックし「Allow forward to destination zones」の「wan」を外し「WGZONE: WGINTERFACE」に変更する。こうすることでVPNのキルスイッチとなり、VPNの接続が解除された際はインターネットに接続できなくなる。
「Save & Apply」で適用。

DNSの設定

VPNサービスによってDNSサーバーは異なるが、ここでは 10.64.0.1 とする。

「Network」→「DHCP and DNS」に行き、「DNS forwardings」のIPアドレスを上のIPに設定し、「Save」で一旦保存。
「Network」→「Interfaces」からlanインターフェイスの編集で「DHCP Server」→「Advanced Settings」→「DHCP-Options」を「6,(上のIP)」に設定し、「Save & Apply」で適用。

ルーターを再起動し、接続を確認。

速度について、OpenVPNでは5〜10Mbpsだったが、WireGuardにして20〜30Mbpsは平均して出るようになったので、おおむね満足しています。

その他

当然ながらサーバーは自動選択できないため、一定間隔でサーバーを変更したい場合は、WireGuardサーバーのIPアドレスと公開鍵のリストを持っておき、設定変更&再起動するといったスクリプトを動かすなどが考えられる。

OpenWrtのIPアドレスはデフォルトで 192.168.1.1 に設定されているので、他のルーターとの競合を避けるのであれば「192.168.33.1」などにする。自分の場合は管理画面から設定すると失敗するため、SSHから以下のように設定しました。

uci set network.lan.ipaddr='192.168.33.1'
uci commit
reboot; exit

IPアドレスを変更すると管理画面も変更したIPに変わるので注意。

資料

  • WireGuard on a router – Guides | Mullvad VPN
    https://mullvad.net/en/help/running-wireguard-router/

投稿をシェア

ディスカッションに参加

6件のコメント

  1. どんなルーター買われましたか?
    私もルーター探してるんですがどのルーターがいいのかわからないです

  2. vpnルーターって端末→isp→vpn鯖→インターネット→isp→端末なんですか?普通のコマンドラインやGUIアプリで提供されるものではなくVPNルーターを使うのはなぜなのでしょうか

    1. ルーターのVPNクライアント機能は、本来は疑似専用線として使う場合を想定としたものだと思うが
      これを隠匿サービスのVPNに応用するメリットといえば
      ズバリ!家中まるごと隠匿できる事でしょう

      PCやスマホにクライアント入れても、ソレ以外の端末(家電やゲーム機)が通常接続のママになってしまうからだと思うよ

コメントをどうぞ

メールアドレスが公開されることはありません。