EdgeRouter XでWireGuardの構築手順

1. はじめに
この記事では、高機能ルーター「EdgeRouter X」に、軽量かつ高速なVPNプロトコル「WireGuard」を導入し、安全なリモートアクセス環境を構築する全手順を解説します。
この記事のゴール
- 外部のネットワークから自宅のEdgeRouter XへWireGuardでVPN接続できる
- VPN経由でルーターの管理画面にアクセスしたり、自宅内ネットワークの機器と通信したりできる
対象読者
- EdgeRouter Xの基本的な設定ができる方
- SSHやCUIでのコマンド操作に慣れている方
- VPNの基本的な概念を理解している方
2. WireGuardとEdgeRouter Xの魅力
WireGuardとは?
OpenVPNやIPsecとの違いを明確にし、その軽量さ(コード行数の少なさ)と設定のシンプルさ、公開鍵認証方式のメリットを解説します。
コードの軽量性:WireGuardのコード行数は約4,000行と非常にコンパクトです。一方、OpenVPNは数万から数十万行、IPSecも数十万行のコードで構成されており、WireGuardの軽量さが際立ちます。この軽量性により、セキュリティ監査が容易になり、バグの発生リスクも低減されています。
設定の簡素化:従来のOpenVPNやIPSecが複雑な設定ファイルや証明書管理を必要とするのに対し、WireGuardは最小限の設定項目で動作します。公開鍵暗号方式を採用することで、面倒な証明書の作成や管理作業が不要になります。
高いパフォーマンス:WireGuardは最新の暗号化技術を使用し、カーネルレベルで動作することで高速な通信を実現します。OpenVPNと比較して、CPU使用率が低く、より高いスループットを期待できます。
EdgeRouter Xとは?
VyOSベースでありながらGUIも利用可能な点、コストパフォーマンスの高さを紹介します。
EdgeRouter XはUbiquiti社製の企業向けルーターです。VyOSをベースにしているOSとなっているため、SSHなどで接続してもVyOSの構造とほとんど同じです。VyOSのコマンドなどが使えるメリットがあります。
VyOS自体にはGUIがありませんが、EdgeRouter XにはGUIがあります。そのためGUIとCUIの両方が使えるメリットもあります。
VyOS自体がソフトウェアルーターなので、自分で使おうと思ったら例えば産業用PCなど複数NICがあるPCを買ってきてインストールする必要があります。EdgeRouter Xの場合は最初からNICが4つあり、OSも埋め込まれているので便利です。
注意点:EdgeRouter X自体1Gルーターのため、最近流行の10Gなどになると使い勝手としては悪いのでおすすめはしません。うちは自宅回線が1GなのでEdgeRouter Xで十分だと思ってやっています。
3. 構築の全体像と前提条件
設定を始める前に、全体の流れと必要なものを確認しましょう。
設定のステップ
サーバー(EdgeRouter X)側:
- WireGuardパッケージのインストール
- サーバー用の鍵ペア(秘密鍵・公開鍵)の生成
- インターフェースとファイアウォールの設定
クライアント(PC/スマホ)側:
- WireGuardアプリのインストール
- クライアント用の鍵ペアの生成
- 接続設定ファイルの作成
相互の鍵登録:サーバーとクライアントにお互いの公開鍵を登録して信頼関係を構築
前提環境
- EdgeRouter X(バージョン: v2.0.x)
- インターネット接続可能な固定グローバルIPアドレス
- 設定作業用のPC
本記事の検証環境
この記事は、以下の環境で構築と動作確認を行いました。ご自身の環境と照らし合わせる際の参考にしてください。
- EdgeRouter X ファームウェア:
v2.0.x - 回線: NTT系
- プロバイダー: インターリンク
- IPアドレス: IPv4 固定IP
- IPv6通信: なし
- ネット接続: EdgeRouter Xからインターネット接続は設定済み
4. EdgeRouter X(サーバー側)の設定
ここから実際にEdgeRouter XにSSHで接続し、設定を進めていきます。
4.1. WireGuardパッケージのインストール
EdgeRouter XにWireGuardをインストールします。まず、PCに必要なパッケージファイルをダウンロードしてください。
パッケージのダウンロード:
PCでWireGuardのGitHubリリースページにアクセスし、お使いのEdgeRouter Xのバージョンに合った .deb ファイルをダウンロードします。(例: e50-v2-v1.0.20200506-v1.0.20200510.deb)
ルーターへのファイル転送:
ダウンロードしたファイルをSCPやWinSCPなどを使ってEdgeRouter Xにアップロードします。
# 例: SCPコマンドでのアップロード
scp e50-v2-v1.0.20200506-v1.0.20200510.deb admin@192.168.1.1:/tmp/
パッケージのインストール:
EdgeRouter XにSSHでログインし、以下のコマンドでインストールを実行します。
sudo dpkg -i /tmp/e50-v2-v1.0.20200506-v1.0.20200510.deb
このように表示されたら成功です:
Unpacking wireguard 1.0.202005062 ...
Setting up wireguard 1.0.202005062 ...
4.2. 鍵ペアの生成とインターフェース設定
VPN通信を暗号化するための鍵を生成し、WireGuard用のネットワークインターフェース(wg0)を設定します。
# 設定モードに移行
configure
# 1. サーバー用の秘密鍵と公開鍵を生成
wg genkey | tee /config/auth/wg.key | wg pubkey > /config/auth/wg.public
# ↑ wg.key (秘密鍵) と wg.public (公開鍵) が生成されます。秘密鍵は絶対に漏洩させないでください。
# 2. WireGuardインターフェース(wg0)の基本設定
set interfaces wireguard wg0 address 10.0.0.1/24
# ↑ VPNクライアントに割り当てるネットワークのIPアドレスとサブネットマスクです。
set interfaces wireguard wg0 listen-port 51820
# ↑ WireGuardが通信を待ち受けるUDPポートです。
set interfaces wireguard wg0 private-key /config/auth/wg.key
# ↑ 先ほど生成したサーバーの「秘密鍵」を指定します。
set interfaces wireguard wg0 route-allowed-ips true
# ↑ VPN経由で内部ネットワークにアクセスする場合に必要
Point: ここで生成した公開鍵(/config/auth/wg.publicの中身)は、後ほどクライアントの設定で使用します。cat /config/auth/wg.public コマンドで表示して控えておきましょう。
4.3. ファイアウォール設定
外部のインターネットからWireGuardの通信(UDP/51820)を受け入れられるように、ファイアウォールに穴を開けます。これを設定しないとVPN接続ができません。
# "WAN_LOCAL" という名前のファイアウォールルールに設定を追加
set firewall name WAN_LOCAL rule 20 action accept
set firewall name WAN_LOCAL rule 20 description 'WireGuard'
set firewall name WAN_LOCAL rule 20 destination port 51820
set firewall name WAN_LOCAL rule 20 protocol udp
5. クライアント側の設定
次に、VPN接続を行うPCやスマートフォンの設定です。ここではWindowsを例に説明します。
アプリのインストール:
公式サイト(https://www.wireguard.com/install/)
からWindows用のインストーラーをダウンロードし、インストールします。
設定ファイルの作成:
WireGuardアプリを起動し、「空のトンネルを追加...」をクリックします。自動的にクライアント用の秘密鍵と公開鍵が生成されます。
表示された設定画面に、以下のように入力します
[Interface]
# PrivateKeyは自動生成されたものが入力されています
PrivateKey = <クライアントの秘密鍵(自動生成)>
# VPN接続時にクライアントに割り当てるIPアドレス
Address = 10.0.0.2/32
# 名前解決に使いたいDNSサーバー (EdgeRouter Xを指定)
DNS = 10.0.0.1
[Peer]
# EdgeRouter X (サーバー) の「公開鍵」をここに貼り付けます
PublicKey = <4.2で控えたサーバーの公開鍋>
# VPN接続時に通信を許可するIPアドレスの範囲
# 10.0.0.0/24 はVPNネットワーク、192.168.1.0/24 は自宅の既存ネットワーク(任意)
AllowedIPs = 10.0.0.0/24, 192.168.1.0/24
# EdgeRouter XのグローバルIPアドレスとポート番号
Endpoint = xxx.xxx.ccc.ccc:51820
重要: クライアントアプリで表示されているクライアントの「公開鍵」をコピーしておきます。次のステップでサーバーに登録します。
画像:こんな感じになります。

6. 相互の公開鍵登録と接続
最後に、クライアントの公開鍵をEdgeRouter Xに登録し、設定を反映させます。これでお互いを信頼し、通信できるようになります。
EdgeRouter Xにクライアントの公開鍵を登録:
EdgeRouter XのSSHセッションに戻り、以下のコマンドを実行します。
# <クライアントの公開鍵> の部分を、先ほどコピーしたものに置き換えてください。
set interfaces wireguard wg0 peer <クライアントの公開鍋> allowed-ips 10.0.0.2/32
設定の保存と反映:
すべての設定をコミット(反映)し、保存します。
commit
save
exit
エラーが出なければ設定完了です。
7. 接続確認
クライアントのWireGuardアプリで「有効化」ボタンを押し、VPN接続を開始します。その後、コマンドプロンプトやターミナルでpingを送信し、応答があれば成功です!
ping 10.0.0.1
成功時の応答例:
PING 10.0.0.1 (10.0.0.1): 56 data bytes
64 bytes from 10.0.0.1: icmp_seq=0 ttl=64 time=75.661 ms
64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=33.187 ms
Windowsの場合は上記コマンドでpingが返ってくるか確認します。
Macの場合は以下のコマンドで確認します:
ping -c3 10.0.0.1
8. うまく接続できない場合のトラブルシューティング
pingが飛ばない場合は以下を確認してみてください:
- ファイアウォール設定:UDPポート51820が開いているか確認
- グローバルIPアドレス:EdgeRouter XのグローバルIPアドレスが正しいか確認
- 公開鍵のコピー&ペースト:公開鍵にコピーミスがないか確認
- クライアント側のファイアウォール:WindowsやmacOSのファイアウォールでWireGuardが許可されているか確認
これでも解決しない場合は、EdgeRouter Xの設定画面からログを確認してみるといいかもしれません。また、sudo wg show コマンドでWireGuardの状態を確認することもできます。
9. まとめ
これでEdgeRouter XをWireGuardサーバーとして設定し、安全なVPN環境を構築できました。WireGuardはそのシンプルさとパフォーマンスの高さから、今後さらに利用が広がるでしょう。ぜひご活用ください。
従来のOpenVPNと比較して、設定がシンプルで高速な通信が可能なWireGuard。一度使ってみると、その使いやすさに驚くと思います。自宅での作業環境がより便利になることを願っています。
この記事に関する技術サポート・ご相談
「手順通りにいかない」「自社環境への構築を代行してほしい」など、
インフラ・サーバー周りでハマった際はお気軽にご相談ください。
※ Googleフォームへ移動します(初回相談無料)
個人支援・寄付について
サイトラボでは個人支援・寄付を受けております。ご協力いただける方はお願いいたします。当サイトではビットコインで受け付けております。
- ビットコイン:3LHnADwZwUbic2L45EnVJEykiG6KfbqrwS