VPN 網路上的某些客戶端無法訪問
該模型的問題是無法訪問某些(僅某些)客戶端。有關下一節中描述的模型的更多資訊,請參閱下面的連結。
問題描述
兩個客戶端(1.1 和 1.2.3)都可以連接到 VPN 伺服器 (1)。伺服器 (1) 未在 OpenVPN conf 文件中使用客戶端到客戶端聲明。
伺服器 (1) 可以 ping 兩個客戶端(1.1 和 1.2.3),兩個客戶端(1.1 和 1.2.3)可以互相 ping 並且可以 ping 伺服器(1)。NAT 後面的路由器 (1.1) 後面的本地客戶端(1.1.1 和 1.1.2)可以互相 ping 通,也可以 ping 通路由器 (1.1)。另一個網路(1.2 之後)也是如此,其中所有客戶端(1.2.1、1.2.2 和 1.2.3)可以相互 ping 通,也可以 ping 路由器(1.2)。到目前為止沒有任何問題。
兩個路由器(1.1 和 1.2)都正確設置了它們的靜態路由。第一個網路(1.1)中的路由器沒有設置靜態路由,它們是從 VPN 伺服器推送的。第二個網路(1.2)中的路由器不是 VPN 網關,因此他的路由如下:
網路 192.168.1.0/24 網關 192.168.2.103
網路 192.168.10.0/24 網關 192.168.2.103
然後第二個網路 (1.2.3) 上的 VPN 客戶端再次將路由從伺服器推送到他身上。
回到到達的客戶端站——現在這些 NAT 後面的客戶端無法從一個網路到達另一個網路;有些可以,有些不能。舉一些例子:
- 登錄到伺服器 (1),我可以 ping 1.1.1 但無法 ping 1.1.2。
- 登錄到客戶端 (1.1.1),我可以 ping 1.2.1 但可能不 ping 1.2.2。
臨時修復
對於一些客戶,我可以在添加他們的 statis 路由時看到一個臨時修復,這可以通過 Linux 機器完成。它們的路由表(例如機器 1.1.2)可能只包含網路 1.1 的資訊。為其他網路(1.2)添加靜態路由確實可以使它工作,但這不能對所有客戶端完成。
另一個非常臨時的修復方法是嘗試從 1.2.2 到 1.1.2 的 traceroute 命令,這實際上可以很好地到達機器,然後我可以 ping 它幾分鐘。然而,過了一會兒,路線就消失了。
不過,這些都不是永久的解決方案。
出現的一些問題
我需要注意我剛剛更換了路由器 1.2,但所有路由都設置為與前一台機器相同。
還有一些其他問題出現:
- 是DNS問題嗎?如果是這樣,為什麼 ping 命令不適用於 IP,而不是域名?
- traceroute 怎麼能工作而 ping 不通?沒有防火牆可以阻止它,即使是,trceroute 怎麼能強制 ping 命令工作一小會兒呢?
- 為什麼有些客戶端不需要設置靜態路由而其他客戶端需要它才能在網路上 ping 通?
- 可能與網路上設備的啟動順序有關嗎?我也嘗試重新啟動/關閉所有這些,但它不會做任何事情。這個想法是,記憶體中的路由將在重新啟動時被清除,新的路由將從路由器中“獲取”。
目標
目的是解決此問題,使所有網路上的所有客戶端都可以訪問,並且除了路由器之外沒有放置任何靜態路由。
我自己找到了解決方案,它是由路由器中設置的 iptables 規則引起的。我的新路由器恰好是 ASUS RT-N12,它包含丟棄無效數據包的 FORWARD 規則。此規則對靜態路由有問題。
解決方案是創建一個腳本,在啟動時自動刪除 FORWARD 規則:
iptables -D FORWARD -m state --state INVALID -j DROP
要了解有關此問題的更多資訊,請隨時閱讀論壇主題。