Networking

通過 VPN 從本地網路路由出站連接

  • April 2, 2018

我有一個執行 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 上設置了錯誤的網關。

引用自:https://serverfault.com/questions/433405