要約
WireGuard サーバとして使っている Raspberry Pi Zero 2W が Wi-Fi(2.4GHz)接続のためスループットが 16 Mbps に張り付いていた。
USB OTG 経由で有線 LAN アダプターを追加したところ、84.9 Mbps まで改善した。
背景
前回の記事で Beryl 7 を WireGuard クライアント兼ルーターにして複数端末を自宅 LAN に接続できるようにした。
動作はしたものの、VPN 経由のスピードテストが 7〜8 Mbps 止まり。Pi 自体を speedtest-cli で計測すると 37 Mbps 出ていたので、VPN トンネルのオーバーヘッドや CPU がボトルネックではなく、Wi-Fi(2.4GHz)の二重ホップが原因だと判明した。
クライアント → Beryl 7(Wi-Fi)→ Pi Zero 2W(Wi-Fi)→ 自宅 LAN
↑ ここが 2.4GHz で上限 30Mbps 程度
LAN 内で iperf 相当のテストをしたところ 16 Mbps が天井。
環境
| 項目 | 内容 |
|---|---|
| マシン | Raspberry Pi Zero 2W |
| OS | Raspberry Pi OS Lite 64bit |
| 接続 | USB OTG(microUSB)→ 有線 LAN |
| LAN アダプター | TIMELY microUSB 有線 LAN アダプター(RTL8152 チップ) |
| LAN ケーブル | Ankuly Cat6A 0.15m |
Pi Zero 2W に有線 LAN を追加する手順
1. アダプターを挿すだけ
Pi Zero 2W の microUSB OTG ポートに LAN アダプターを接続する。
RTL8152 チップのアダプターであれば、Raspberry Pi OS は標準でドライバーを持っているため追加インストール不要。
# 認識確認
lsusb
# → Bus 001 Device 002: ID 0bda:8152 Realtek Semiconductor Corp. ...
dmesg | grep r8152
# → r8152 ... registered network device
2. IP アドレスと優先度を確認
ip addr show
# eth0: 192.168.68.xx ← 新しい有線 LAN
# wlan0: 192.168.68.xx ← 既存 Wi-Fi
ip route show
# eth0 metric 100 ← 数値が小さい方が優先
# wlan0 metric 600
有線(eth0)がデフォルトルートとして使われていれば OK。
3. WireGuard の PostUp / PostDown を更新
有線 LAN 追加前は wlan0 にだけ MASQUERADE を設定していた。eth0 も追加する。
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE; iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE; iptables -t nat -D POSTROUTING -o wlan0 -j MASQUERADE
wlan0 も残しておくのは、有線が外れたときのフォールバック用。
4. IP フォワーディングを永続化
Raspberry Pi OS Lite はデフォルトで IP フォワーディングが無効(0)になっている。/etc/sysctl.conf に書く方法もあるが、/etc/sysctl.d/ 配下に置く方が確実に再起動後も反映される。
# 永続化
echo "net.ipv4.ip_forward=1" | sudo tee /etc/sysctl.d/90-ip-forward.conf
# 即時適用
sudo sysctl -w net.ipv4.ip_forward=1
# 確認
cat /proc/sys/net/ipv4/ip_forward
# → 1
これを忘れると再起動後に VPN 経由のインターネットが繋がらなくなる。/etc/sysctl.conf への追記だけでは Raspberry Pi OS Lite で反映されないことがあるため、/etc/sysctl.d/ を使うこと。
結果
| 測定条件 | スループット |
|---|---|
| WireGuard 経由(Wi-Fi 時) | 約 16 Mbps |
| WireGuard 経由(有線 LAN 後) | 84.9 / 85.1 Mbps |
5倍以上に改善。Pi Zero 2W の CPU 使用率も余裕があり、帯域が広がっても CPU がボトルネックになる気配はなかった。
注意点:microUSB アダプターの選び方
Pi Zero 2W の OTG ポートに挿せる LAN アダプターは「microUSB オス → RJ45」タイプ。
| チップ | Pi OS での動作 |
|---|---|
| RTL8152 / RTL8153 | ドライバー標準搭載、挿すだけで OK |
| AX88772 系 | Android 向けドライバーが主流、Pi では認識しないことがある |
購入前にチップ型番を確認するか、レビューに「Raspberry Pi で動いた」とある商品を選ぶのが確実。
まとめ
- Pi Zero 2W の Wi-Fi(2.4GHz)は WireGuard サーバとしてスループットのボトルネックになる
- RTL8152 チップの microUSB LAN アダプターを挿すだけで有線化できる
- PostUp の MASQUERADE に eth0 を追加する
- IP フォワーディングは
/etc/sysctl.d/90-ip-forward.confに書いて永続化する