Networking
通過 VPN 從本地網路路由出站連接
我有一個執行 OpenVPN 的伺服器 A、一個 OpenVPN 客戶端 B(碰巧是一個有根的 Android 手機)和一個連接到 B 的第三方 C(筆記型電腦、平板電腦等)。
B可以通過A使用VPN上網;C 可以在沒有 VPN 的情況下使用 tethered 連接通過 B 訪問 Internet。
但是,由於 B 上的 VPN 處於活動狀態,我無法從 C 上的 Internet 載入資訊。
例如,當 B 或 C 嘗試載入網頁時,A 似乎記錄了類似的入站和出站流量,但是當連接源自 C 時,設備 B 上的 VPN 沒有報告入站流量。
我應該在哪裡尋找被丟棄的數據包,我應該使用什麼 ip 規則來確保它們通過 VPN 傳遞回本地網路 B <-> C?
(我顯然會發布任何需要的進一步資訊。)
更多資訊
沒有 VPN:
root@android:/ # ip route default via [B's External Gateway] dev rmnet0 [B's External Subnet] dev rmnet0 proto kernel scope link src [B's External IP] [B's External Gateway] dev rmnet0 scope link 192.168.43.0/24 dev wlan0 proto kernel scope link src 192.168.43.1
使用 VPN:
root@android:/ # ip route 0.0.0.0/1 dev tun0 scope link default via [B's External Gateway] dev rmnet0 [B's External Subnet] dev rmnet0 proto kernel scope link src [B's External IP] [B's External Gateway] dev rmnet0 scope link [External address of A] dev tun0 scope link 128.0.0.0/1 dev tun0 scope link 172.16.0.0/24 dev tun0 scope link 172.16.0.8/30 dev tun0 proto kernel scope link src 172.16.0.10 192.168.43.0/24 dev wlan0 proto kernel scope link src 192.168.43.1 192.168.168.0/24 dev tun0 scope link
啊,通過在 B(電話)上執行以下命令來修復它:
iptables -t nat -A POSTROUTING -s 192.168.43.0/255.255.255.0 -o tun0 -j MASQUERADE iptables -A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -s 192.168.43.0/255.255.255.0 -j ACCEPT iptables -A FORWARD -j REJECT --reject-with icmp-port-unreachable
這幾乎對應於 VPN 伺服器通常的基本設置;我遇到了問題,因為我對哪個網路是哪個,哪個介面是哪個感到困惑,然後當我擁有這些權利時,我意識到我仍然在 C 上設置了錯誤的網關。