Androidタブレット上のDrogger GPSから、モバイル回線と既存WireGuard経路を使って、自宅LAN内のArduSimple simpleRTK2B基準局へNTRIP接続する手順と検証結果を記録します。Issue #20のTrack #31に対応します。
認証なしのNTRIPポートを一般インターネットへ直接公開せず、Android、VPS、Raspberry Pi、自宅LANの閉じたWireGuard経路だけで利用します。
Androidタブレット
WireGuard: 10.0.0.3/32
NTRIP: 192.168.68.134:2101/RTK2B_BASE
|
| WireGuard
v
VPS
wg0: 10.0.0.1/24
|
| wg0内でAndroid peerからPi peerへ転送
v
Raspberry Pi
wg0: 10.0.0.2/24
wlan0: 192.168.68.130/24
LAN向けmasquerade
|
v
Ubuntu基準局PC
192.168.68.134:2101/RTK2B_BASE
simpleRTK2BのSurvey-inは完了済みです。
基準局PC上のRTKLIB str2strは、次の構成でNTRIP Casterとして動作します。
str2str \
-in serial://tty_Ardusimple:9600 \
-out ntripc://:2101/RTK2B_BASE \
-msg 1005,1074,1084,1094,1230
LAN内のDrogger GPSから192.168.68.134:2101/RTK2B_BASEへ接続し、RTCM3 1005、1074、1084、1094、1230を約1秒周期で受信できました。
DG-PRO1RWSは単独測位からFLOATへ遷移しました。約2分30秒の確認ではFIX未到達でした。
VPS自身からPi 192.168.68.130と基準局PC 192.168.68.134へpingでき、基準局PCのTCP 2101へ接続できます。
VPSのnet.ipv4.ip_forwardは1で、192.168.68.0/24 dev wg0の経路があります。
Pi peerのAllowed IPsは10.0.0.2/32, 192.168.68.0/24、Android peerは10.0.0.3/32です。
WireGuardアプリの既存トンネルDrogger-VRSCを編集し、PeerのAllowed IPsへ基準局PCを追加します。
192.168.4.1/32, 192.168.68.134/32
192.168.4.1/32は既存VRSC用なので削除しません。秘密鍵、公開鍵、Androidアドレス、VPSエンドポイント、Persistent Keepaliveも変更しません。
Drogger GPSのNTRIPクライアント接続先は次のとおりです。
| 項目 | 値 |
|---|---|
| 接続名 | RTK2B_BASE |
| Ntrip Casterタイプ | その他 |
| ホスト | 192.168.68.134 |
| ポート | 2101 |
| マウントポイント | RTK2B_BASE |
| ユーザー名・パスワード | なし |
| GGA送信 | なし |
自宅LANを経由しないことを保証するため、タブレットのWi-FiをOFFにし、スマホのBluetoothテザリングを利用しました。
実測した状態:
AQUOS wish5Redmi Pad SE 8.7bt-pan10.44.67.243/2410.44.67.220Bluetooth Tethering CONNECTED、VALIDATED192.168.68.134/32はAndroidのtun0経路へ追加済みAndroid側の経路追加後も、タブレットから192.168.68.134へのpingとTCP 2101はtimeoutしました。
VPSのwg show、ルーティング、nft list rulesetを確認した結果、WireGuard peerとVPSから基準局までの経路は正常でした。一方、IPv4のFORWARD chainはpolicy dropで、DOCKER-USER chainは空でした。DOCKER-FORWARDにもwg0から同じwg0へ転送する通信を許可する規則がありませんでした。
したがって、Android peerから入ったパケットをPi peerへ同じwg0内で転送する箇所がVPSで破棄されていると判断しました。
VPSのtable ip filterはiptables-nftによって管理されています。警告に従い、nftで直接編集せず、iptablesからDOCKER-USER chainへ規則を追加します。
まず永続化せず、Android peerから基準局NTRIPへのTCP 2101と、その応答だけを許可します。
sudo iptables -I DOCKER-USER 1 \
-i wg0 -o wg0 \
-s 192.168.68.134/32 -d 10.0.0.3/32 \
-m conntrack --ctstate ESTABLISHED,RELATED \
-j ACCEPT
sudo iptables -I DOCKER-USER 1 \
-i wg0 -o wg0 \
-s 10.0.0.3/32 -d 192.168.68.134/32 \
-p tcp --dport 2101 \
-j ACCEPT
この規則は次の通信だけを許可します。
10.0.0.3/32192.168.68.134/32ESTABLISHED,RELATEDwg0全体のpeer間転送、任意ポート、VPS公開インターフェースからのTCP 2101は許可しません。
規則追加後、タブレットのWi-FiがOFFでBluetoothテザリングとWireGuardがONの状態で確認します。
192.168.68.134:2101へTCP接続できる。Runningになる。RTK2B_BASEと表示される。1005、1074、1084、1094、1230の受信周期が更新される。FLOATへ遷移する。2026-07-27に一時規則を適用し、次を確認しました。
192.168.68.134 dev tun0 src 10.0.0.3。192.168.68.134:2101へのTCP接続に成功。Running。3D DGNSS FLOAT(画面表示はFLOAT (-1.0))。タブレットのBluetooth PANとWireGuard VPNはともにAndroid ConnectivityServiceでVALIDATEDでした。このため、自宅Wi-Fiではなく、スマホのBluetoothテザリングからWireGuard/VPS/Piを経由して自前基準局を利用できたと判断します。
一時規則は次で削除します。
sudo iptables -D DOCKER-USER \
-i wg0 -o wg0 \
-s 10.0.0.3/32 -d 192.168.68.134/32 \
-p tcp --dport 2101 \
-j ACCEPT
sudo iptables -D DOCKER-USER \
-i wg0 -o wg0 \
-s 192.168.68.134/32 -d 10.0.0.3/32 \
-m conntrack --ctstate ESTABLISHED,RELATED \
-j ACCEPT
削除後は次を確認します。
sudo iptables -S DOCKER-USER
AndroidのWireGuard設定を戻す場合はAllowed IPsから192.168.68.134/32だけを削除し、既存の192.168.4.1/32は残します。
一時規則でNTRIP接続に成功した後、VPS再起動やDocker再起動後にも必要な規則が復元される方法を選びます。既存のVPSファイアウォール管理方式を確認せず、iptables-persistentの導入や独自systemd unitの追加は行いません。
永続化時も、上記の送信元・宛先・TCP 2101だけという制限を維持します。適用前に構成、影響範囲、検証、ロールバックをIssue #31へ記録します。