OpenWRTでVPN(Wireguard)

この記事は約5分で読めます。

 これまでQNAP NASでWireguardで接続していましたが、セキュリティ上24時間稼働していなかったため、OpenWRTを導入してからは常時稼働しているOpenWRTでで実装することにしました。その際の覚書です。OpenWRTで色々試しているので順次OpenWRTネタをアップしていこうかと思います。

Wireguardのインストール

Luciのメニューにある「Software」より、Wireguard関係のソフトをインストールします。

  • wireguard-tools
  • kmod-wireguard
  • luci-proto-wireguard

インストールすると、メニューバーの「Status」を開くと一番下にWireguradという項目が追加されています。ここでWiregardでの通信を簡単にモニタリングできます。

Interfaceの作成(こちらをサーバーとして扱います)

 次にWireguard用のインターフェースを作成します。メニューバーのNetworkを開き、Interfaceを選択します。Add new Interfaceを選択し、名前には適当な名前(wg1など)を作成し、ProtocolをWireguard VPNとします。

あとは、追加したWiregurad Interface(wg1(サーバー))の設定と、Peer(接続先(クライアント))の設定を行います。
※サーバー(wg1)を設定したあと、クライアント端末側でもキーペア(Public KeyとPrivateキーを生成する必要があります)。そのPublic Keyを使ってサーバ側にもPeer(クライアント)の情報を登録します。

Wireguard Interfaceの設定

  • キーペア(Public keyとPrivate key)を生成します。(Generate new key pair)
  • Wireguard Interface側の待受けポート(デフォルトは51820)を設定します。
  • (wg1の)IPアドレスを設定します。

Peerの設定

  • Discription(Peer(クライアント)を識別する名前)を設定します。(わかりやすくする)
  • Public keyの登録(Peer(クライアント)側で生成したPublic key)
  • (必要に応じて)Preshared keyの生成
  • Allowed IPsの設定(接続するPeer(クライアント)のIPアドレス)

Wireguardで接続するクライアントの設定

 先程設定したOpenwrtのWiregurd InterfaceでPeer(クライアント)の設定をすると同時に、Peer(クライアント)端末側でWireguardの設定をします。

クライアント端末は、Android、Linux、Windowsなどどれでも可能ですが、それぞれWireguardのソフトウェアをインストールする必要があります。クライアントの設定については、サーバーがQNAP NASの場合と同じなので、以前の記事を参照とします。

はまったポイントなど

 上記により、wireguradがインストール、設定できた後、きちんと意図した通信ができるかどうかですが、はまったポイントはインターフェースの再起動、ファイアウォールとDNSの設定です。

ここをきちんと設定できないとwireguardからインターネットへ抜けれなかったり、家庭内LANの他のサーバーにアクセスできなかったりします。

インターフェースの再起動

 意外と忘れがちで、絶対に設定があっているはずなのに動かなかったことがあり、最終的にインターフェースを再起動することで設定が反映され、接続できたことがありました。

「Status」→「Wireguard」を確認し、一覧に設定したPeerが表示されていない場合、設定が反映されていないので再起動が有効です。

ここで表示される一覧になければ恐らく設定したPeerが反映されていません。

ファイアウォールの設定

 ひとまず、新しくファイアウォールのZoneを作成しました。ネットを見ていると、LANのZoneへ含めている人やWANのZoneへ入れている人がいました。このあたりは後日、検討しようかと思います。

  • wg1の属するfirewall-Zoneを設定(作成)

以下では、Firewallタブにて、新しくwg1というZoneを作成し、wg1インターフェースをアサインしている。

Network→Interfaceより、インターフェースwg1を編集(Edit)

 ホームルータの配下にブリッジLANとしてOpenwrtを配置しているので、Firewallの設定は以下のようにしています。

Network→Firewallより以下の「Zones」の行をEditで編集

DNSの設定

 DNSサーバーは、dnsmasqからunboundへとfowardingしています。
そのため、dnsmasqの「Listen Interfaces」を設定しないと、うまく動きません。

Network→DHCP and DNSのDevices & Portsタブ
※画面はバージョンによって異なります。

 wireguardのクライアント側にもDNSを設定する必要があります。
インターフェースの設定ファイル(例:/etc/wireguard/wg1.conf)のInterfaceセクションに、DNSサーバーを追加します。

[Interface]
DNS = 192.168.0.2      ←LAN内のDNSサーバを指定

最後に

 色々できるようになってきましたが、やればやるほどやりたいことも増えてくるし知識も必要となってきます。セキュリティなどのことも検討する必要があるため、継続的に知識を増やしていく必要があります。継続的に時間が取れるかはわかりませんが、落ち着いたらまた記録を増やしていこうかと思っています。