2025/7/24 外出先から自宅ネットワーク内の機器にアクセスできないことに気付いたので、設定を見直しました。
我が家で使っているUniFi DreamRouterは、WireGuardというVPNに対応しています。
普段はスマホから自宅ネットワークに接続する用途で使用していますが、先日、外出先からWindows11パソコンで自宅に繋ぎたい用件がありWireGuardを設定したところ、通信ができませんでした。
その解決方法を記事に残しておきます。
事象
WireGuard接続自体はエラーなく確立しているように見えますが、その後一切通信ができなくなります。
(例)
①WireGuard接続前の状態
スマホのテザリングでインターネットに接続している状態。
例としてGoogleのパブリックDNSサーバ8.8.8.8にpingすると、正常に応答が返ってきています。
②WireGuard接続実行
Windows11上のWireGuardクライアントには、DreamRouterで作成したWireGuardのconfファイルを読み込ませてあります。
有効化すると画面上は問題なく「有効」と表示され、転送量のカウントもある程度増加していきます。
③WireGuard接続後の状態
しかし、インターネットに繋がりませんし、VPN先である自宅ネットワーク上の機器にも繋がりません。
例に挙げた8.8.8.8へのpingも通らなくなっています。
原因
コミュニティでこのような記事を見つけました。
どうやら、Windows11の24H2アップデートでネットワークの挙動が変わり、従来のWireGuardの設定では問題が発生するようになったようです。
https://community.ui.com/questions/UDM-Pro-Max-WireGuard-Server-Client-Cannot-Connect-with-WireGuard-0-5-3-and-Windows-24H2/fe501775-3eab-4435-acf4-611ef6870f64
対策としては、WireGuardのトンネル設定にある
AllowedIPs = DreamRouterのVPNIPアドレス※1, クライアントのVPNIPアドレス※2, 0.0.0.0/0
※1 この環境では「172.16.0.1/32」 ※2 この環境では「172.16.0.6/32」
という部分を
AllowedIPs = ローカルネットワークのIPアドレス帯※3, 0.0.0.0/0
※3 この環境では「192.168.1.0/24」
に変更することです。
実際にやってみる
AllowedIPsを修正して保存します。
(後から記事修正した都合でローカルネットワークのIPアドレス帯(192.168.1.0/24)の記述が抜けています。忘れずに記載してください。)
WireGuardを有効化後もインターネットに接続可能であることが確認できました。
(スクリーンショットありませんが)以下2点も確認でき、きちんと自宅ネットワークに接続できました。
- 自宅ネットワーク内の機器にアクセスできること。
- 確認君+のようなサイトで、プロバイダが携帯キャリアではなく自宅ネットワークのプロバイダと判定されていること。
設定の意味
今回設定変更した AllowedIPs パラメータの意味を調べてみます。
WireGuardドキュメントのCryptokey Routingの項でこのように説明されています。
In the client configuration, its single peer (the server) will be able to send packets to the network interface with any source IP (since 0.0.0.0/0 is a wildcard). For example, when a packet is received from peer HIgo9xNz…, if it decrypts and authenticates correctly, with any source IP, then it’s allowed onto the interface; otherwise it’s dropped.
In the client configuration, when the network interface wants to send a packet to its single peer (the server), it will encrypt packets for the single peer with any destination IP address (since 0.0.0.0/0 is a wildcard). For example, if the network interface is asked to send a packet with any destination IP, it will encrypt it using the public key of the single peer HIgo9xNz…, and then send it to the single peer’s most recent Internet endpoint.
In other words, when sending packets, the list of allowed IPs behaves as a sort of routing table, and when receiving packets, the list of allowed IPs behaves as a sort of access control list.
WireGuardクライアントがサーバからパケットを受信する場合、パケットが正しく復号化・認証されれば、かつ、その送信元IPアドレスがAllowedIPsに合致すれば、受信が許可されます。そうでないものはドロップされます。
つまり、クライアントがパケットを受信するとき、AllowedIPsはACL的な役割をします。
WireGuardクライアントがパケットを送信する場合、その宛先IPアドレスがAllowedIPsに合致すれば、暗号化されWireGuardサーバへ送信されます
つまり、クライアントがパケットを送信するとき、AllowedIPsはルーティングテーブル的な役割をします。
ということは
AllowedIPs = 0.0.0.0/0
さえ指定していれば全てのパケットがWireGuardサーバとの送受信対象となるため、
AllowedIPs = DreamRouterのVPNIPアドレス/32, クライアントのVPNIPアドレス/32, 0.0.0.0/0
という指定であっても結果は変わらない(「DreamRouterのVPNIPアドレス/32, クライアントのVPNIPアドレス/32」は「0.0.0.0/0」の範囲に含まれる)ような気がします。
なぜこの設定変更により通信できない現象が改善したのか、納得には至りませんでした。。。



コメント