コンテンツにスキップ

WireGuard で自宅にアクセス: サーバー、ピア、ファイアウォール、トンネルの確認

このページで確認する内容:

  • OpenWrt に WireGuard サーバーインターフェース wg0 を作成する。
  • クライアントピアを1つ追加する。
  • wg0 を LAN のファイアウォールゾーンに入れる。
  • ハンドシェイク、トンネル IP への ping、トンネル経由の LuCI へのアクセス。

次の内容は確認していません。

  • 公開 WAN の UDP ポート転送/ファイアウォール
  • DDNS/ドメイン
  • スマートフォン/Windows クライアントのローミング
  • LAN 全体への転送/NAT

これらは導入環境に依存します。この LAN 内のテストでは代用できません。

Client 192.168.1.251
│ vmbr5 (lab LAN)
▼
OpenWrt VM 200 192.168.1.2
wg0 10.10.0.1/24, UDP 51820
│
└── tunnel 10.10.0.0/24
client wg0 10.10.0.2/24

実際の自宅アクセスでは、クライアントはインターネット側にいます。OpenWrt の WAN で UDP 51820 の転送/許可が必要です。この検証は LAN 側のみです。

ルーターのシェルカーネルとツールを確認する
ターミナルウィンドウ
apk add wireguard-tools kmod-wireguard
wg --version
cat /proc/modules | grep wireguard

この検証では wireguard-tools v1.0.20260223 で、wireguard モジュールがロードされていました。

期待される結果wg コマンドがあり、wireguard モジュールがロードされている。

ルーターのシェルサーバーの鍵を生成する(チャットやリポジトリには貼り付けない)
ターミナルウィンドウ
umask 077
wg genkey > /tmp/wg-server.key
wg pubkey < /tmp/wg-server.key > /tmp/wg-server.pub
cat /tmp/wg-server.pub # only the public key goes to the client

クライアントも自身の鍵ペアを生成します。クライアントの秘密鍵をサーバーに送らないでください。 サーバーに必要なのはクライアントの公開鍵だけです。

期待される結果秘密鍵はデバイス上に残り、公開鍵だけをクライアントに渡す。

ルーターのシェルwg0 とピアを作成する
ターミナルウィンドウ
uci set network.wg0=interface
uci set network.wg0.proto='wireguard'
uci set network.wg0.private_key='<server-private-key>'
uci set network.wg0.listen_port='51820'
uci set network.wg0.addresses='10.10.0.1/24'
uci set network.wg0.auto='1'
uci set network.wg0_client=wireguard_wg0
uci set network.wg0_client.public_key='<client-public-key>'
uci set network.wg0_client.allowed_ips='10.10.0.2/32'
uci set network.wg0_client.persistent_keepalive='25'
uci commit network
/etc/init.d/network restart

名前の付け方が重要です。

  • インターフェースのセクション名は wg0、ピアのタイプは wireguard_wg0 です。サフィックスは一致させる必要があります。
  • この検証では、インターフェース名を wg にすると netifd が proto: none と報告し、デバイス wg0 が存在しませんでした。wg0 に変更すると解決しました。wg0 を使ってください。

確認:

ターミナルウィンドウ
wg show
ip -4 addr show wg0
ubus call network.interface.wg0 status

期待される結果netifd が proto=wireguard を認識し、wg0 にアドレスが設定される。

ルーターのシェルファイアウォール: wg0 を LAN ゾーンに入れる
ターミナルウィンドウ
uci show firewall | grep -E "zone.*name|zone.*network"
uci add_list firewall.@zone[0].network='wg0'
uci commit firewall
/etc/init.d/firewall reload

この検証では @zone[0] が LAN ゾーンでしたが、環境によってインデックスは異なる場合があります。name='lan' のセクションを探してください。

wg0 を LAN に追加した後、クライアントから 10.10.0.1 に ping でき、LuCI にも到達できました。

期待される結果UDP 51820 に到達でき、トンネル IP 同士が通信できる。

クライアントの設定は 022 にあります。サーバー側で次を実行します。

ターミナルウィンドウ
wg show

クライアントがハンドシェイクした後、サーバーには次のように表示されます。

peer: <client-public-key>
endpoint: 192.168.1.251:44421
allowed ips: 10.10.0.2/32
latest handshake: ...
transfer: ...

この検証のクライアント:

  • 3秒前にハンドシェイク
  • transfer 124 B received, 180 B sent
  • 10.10.0.1 への ping は 4/4 成功
  • HTTP http://10.10.0.1/ で LuCI が返された
  • 公開 IP/ポート転送: WAN の UDP 51820 → OpenWrt
  • WAN の入力ファイアウォールでその UDP を許可する
  • DDNS/固定ホスト名
  • クライアントの Endpoint には 192.168.1.2 ではなく公開アドレスを使う
  • LAN 全体にアクセスするには、サーバー側ピアの allowed_ips とクライアント側の AllowedIPs に LAN のプレフィックスを含め、戻りのルーティングと NAT も必要
  • 「トンネル IP に ping が通る」を「自宅の LAN 全体に到達できる」と同一視しないでください
  • インターフェースのセクション名とピアのタイプのサフィックスが一致していない
  • wireguard-tools/kmod-wireguard がない
  • ネットワークを再起動していない
  • wg show、ubus status、logread を確認する
  • クライアントとサーバーの公開鍵を取り違えている
  • エンドポイント/ポートが間違っている
  • ファイアウォールが UDP を許可していない
  • 秘密鍵のパーミッション/内容が間違っている
  • WireGuard のハンドシェイクは時刻同期に依存しませんが、鍵が間違っていれば失敗します
  • allowed_ips にピアのトンネル IP が含まれていない
  • インターフェースにアドレスがない / down になっている
  • ファイアウォールゾーン
  • クライアントのルートがエンドポイント自体をトンネルに送っている(ループ)

トンネル IP には ping が通るが LAN に到達できない

Section titled “トンネル IP には ping が通るが LAN に到達できない”
  • クライアントの AllowedIPs に LAN のプレフィックスがない
  • サーバー側に転送/NAT/戻りのルートがない
  • ファイアウォールの forward が許可されていない
  • トンネルが動作していることと、LAN が動作していることを同一視しないでください
  • 環境: OpenWrt 25.12.6 x86 VM 200、wg0 は 10.10.0.1/24、UDP 51820。PVE netns クライアントは 10.10.0.2/24。
  • サーバー: wg show にピアが表示され、ハンドシェイクが成功。転送量は 1.47 KiB/1.90 KiB。wg0 は up。
  • クライアント: ハンドシェイク成功、トンネル ping 4/4、HTTP 200(LuCI)。
  • 未検証: WAN のポート転送/ファイアウォール、DDNS、スマートフォン/Windows、LAN への転送、NAT/戻りのルート。
  • レシピ: tests/recipes/wireguard-server-25.12.md。
  • これは E2 の部分的な検証です。LAN 側のサーバーとトンネルは検証しましたが、実際の WAN、モバイルクライアント、LAN への転送は検証していません。
  • 秘密鍵はデバイス上に保管し、リポジトリ、スクリーンショット、チャットには絶対に載せないでください。
  • 独立したレビュアーはいません。結論はこの VM/netns 環境に限られます。

出典

Router.Homes

独立した OpenWrt の実践ノートです。各ページにファームウェア、デバイス、パッケージマネージャー、元に戻す手順を明記しています。

アイコン:Solar by 480 Design, CC BY 4.0