要約
GL.iNet Beryl 7(GL-MT3600BE)でWireGuardクライアントをグローバルモードにしたとき、自宅LANには繋がるのにインターネットに出られないという問題にハマった。
原因はWireGuardのPeer設定の AllowedIPs にあった。GL.iNetはこの値を使って独自のポリシールーティングテーブル(table 1001)を構築しており、AllowedIPs に 0.0.0.0/0 が含まれていないとインターネット宛のパケットがblackholeに落ちる。
環境
- クライアントルーター: GL.iNet Beryl 7(GL-MT3600BE)/ GL.iNet 4.8.7(OpenWrt 21.02-SNAPSHOT)
- WireGuardサーバー: Raspberry Pi Zero 2 W(Raspberry Pi OS Lite 64bit)
- 構成: Beryl 7をWireGuardクライアント兼ルーターとして使用、配下の端末をまとめて自宅LAN経由で通信
症状
WireGuardを接続してVPNダッシュボードをグローバルモードにした状態で:
-
192.168.68.x(自宅LAN)にはアクセスできる ✓ -
google.comなどインターネットへのアクセスが全滅 ✗
ChromeのHARファイルを確認したところ、dns: -1、connect: -1、status: 0 という結果で、TCPコネクションを張る前の段階で詰まっていた。
調査手順
Pi側でトラフィックが届いているか確認
sudo iptables -L FORWARD -n -v
結果:
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
FORWARDに0パケット。PiにはVPN経由のトラフィックが一切届いていなかった。PiのIPフォワーディングやMASQUERADEの問題ではなく、Beryl 7からトラフィックが出ていないことが判明。
Beryl 7のルーティングを確認
ip route get 8.8.8.8
8.8.8.8 via 10.22.45.243 dev apcli0 src 10.22.45.30
インターネット宛のパケットがWireGuardトンネル(wgclient1)ではなく、WAN側のapcli0から直接出ていた。
ポリシールーティングテーブルを確認
ip route show table all | grep -v "^unreachable\|^prohibit"
table 1001の中身:
10.0.0.0/24 dev wgclient1 table 1001
192.168.68.0/22 dev wgclient1 table 1001
blackhole default table 1001 metric 254 ← ここで全部落ちる
原因
GL.iNetは独自のポリシールーティングエンジンを持っており、LAN側のトラフィックにfwmark(0x1000)を付けてtable 1001に流す仕組みになっている。
table 1001にはWireGuardクライアントのPeer設定で指定した AllowedIPs を元にしたルートのみが追加される。AllowedIPs = 192.168.68.0/22 のままだと、table 1001には自宅LANのルートしか存在せず、インターネット宛のパケットは blackhole default に当たって捨てられる。
LAN client → fwmark 0x1000 → table 1001
192.168.68.x → wgclient1 ✓
8.8.8.8 → blackhole ✗
グローバルモードに切り替えても table 1001 が更新されないため、WireGuardのPeer設定とGL.iNetのポリシールーティングを別々に理解しないとハマる。
解決方法
WireGuardクライアントのPeer設定で AllowedIPs を 0.0.0.0/0 に変更する。
管理画面(192.168.8.1)→ VPN → WireGuard クライアント → 該当クライアント → Peer設定 → AllowedIPs を 0.0.0.0/0 に変更して保存・再接続。
変更後のtable 1001:
10.0.0.0/24 dev wgclient1 table 1001
192.168.68.0/22 dev wgclient1 table 1001
0.0.0.0/0 dev wgclient1 table 1001 ← 追加される
これでインターネット宛もWireGuardトンネル経由で転送され、Pi側でMASQUERADEされてインターネットに出られるようになる。
速度について
グローバルモードでの実測値(スマホテザリングをWANとして使用):
| モード | ダウンロード | アップロード | レイテンシ |
|---|---|---|---|
| VPN OFF(直接) | 65.6 Mbps | 7.65 Mbps | 41ms |
| VPN ON(グローバル) | 7.58 Mbps | 1.95 Mbps | 69ms |
グローバルモードではすべての通信が自宅Piを経由するため、Pi Zero 2(wg-server)のWireGuard暗号化処理がボトルネックなのかもしれない。
推奨構成
AllowedIPs = 0.0.0.0/0 にしておいたうえで、VPNダッシュボードのポリシーモードで用途に応じて使い分けるのがおすすめ。
| ルール | 宛先 | 用途 |
|---|---|---|
| Primary Tunnel(常時ON) | 192.168.68.0/22 | 自宅LANへの常時アクセス |
| ALL(必要なときON) | 全対象 | カフェなど不特定Wi-Fiで全通信を自宅経由に |
AllowedIPs = 0.0.0.0/0 はルーティングの「能力」を定義するだけで、実際にどのトラフィックをVPN経由にするかはダッシュボードのポリシーで制御できる。