Routing

OpenVPN 和單向 ping

  • August 23, 2017

網路配置

我已經建立了一個網路:

網路圖

電腦的適當埠192.168.87.0/24被轉發TP-LINK router到“全世界”。

啟用 IP 轉發OpenVPN server

我能夠從 OfficeB 連接client1OpenVPN serverOfficeA。client1server看到對方——他們回复 ping(在網路192.168.87.0/2410.8.0.0/24網路中)、發送數據、創建連接(即 ssh)。

TP-LINK routera.b.c.d是 WAN IP)上的路由表:

DST             MASK                GATEWAY         IFACE
a.b.c.d         255.255.255.255     0.0.0.0         WAN
192.168.87.0    255.255.255.0       0.0.0.0         LAN & WLAN
10.8.0.0        255.255.255.0       192.168.87.2    LAN & WLAN (route added by hand)
239.0.0.0       255.0.0.0           0.0.0.0         LAN & WLAN
0.0.0.0         0.0.0.0             a.b.c.d         WAN

問題

現在……從任何一台電腦上192.168.87.0/24,我都可以ping通10.8.0.6。不幸的是,10.8.0.6只能 ping 通87.187.2

但是……只有當我首先從這台電腦 ping10.8.0.687.0/2487.104``10.8.0.6

  1. 10.8.0.6: ping 192.168.87.104– 失敗,超時。
  2. 192.168.87.104: ping 10.8.0.6– 好的。
  3. 10.8.0.6: ping 192.168.87.104– 好的。

我檢查過的

我已經檢查過tcpdump192.168.87.104確實總是收到來自 ping 的請求發送回复10.8.0.6。但是這些回复似乎沒有通過網關傳TP-LINK router回——我在兩個介面上都看10.8.0.6不到它們。tcpdump``OpenVPN server

我還檢查過,如果我在以下位置添加了一條路線192.168.87.104

(1) route add 10.8.0.0 netmask 255.255.255.0 gw 192.168.87.2

then10.8.0.6總是會得到一個 ping 回复,即使我之前沒有 ping 過它192.168.87.104

我發現的另一件事是:ping from 192.168.87.104to10.8.0.6向路由記憶體(route -C)添加一個條目(1)。在 ,,first ping’’ 中(在添加條目之前)我得到:

PING 10.8.0.6 (10.8.0.6) 56(84) bytes of data.
64 bytes from 10.8.0.6: icmp_req=1 ttl=127 time=37.0 ms
From 192.168.87.1: icmp_seq=2 Redirect Host(New nexthop: 192.168.87.2)
64 bytes from 10.8.0.6: icmp_req=2 ttl=127 time=93.0 ms

我讀到,這是正常行為,因為網關10.8.0.0位於同一網段。並且icmp redirect host在路由記憶體中創建了一個新條目之後。

Web 配置面板中的TP-LINK router有一個複選框SPI Firewall - Stateful Packet Inspection。禁用它並不能解決問題。

我的問題

我不明白為什麼一個 ping 回复192.168.87.104 > 10.8.0.6沒有通過,TP-LINK router儘管TP-LINK router知道路由到10.8.0.0並且 ping 請求從192.168.87.104to10.8.0.6確實通過了。

所以我的問題是:原因是什麼?我可以做些什麼來解決這種情況(除了(1)在 OfficeA 中的每台電腦上添加路由……)?我個人認為問題出在TP-LINK router.


OpenVPN server配置文件:

port 1194
proto udp
dev tun

ca keys/ca.crt
cert keys/server.crt
key keys/server.key
dh keys/dh1024.pem

server 10.8.0.0 255.255.255.0
push "route 192.168.87.0 255.255.255.0"

client-to-client

keepalive 10 120
comp-lzo

persist-key
persist-tun

我的猜測是,由於有狀態的防火牆規則,TP-LINK 最初會丟棄 ping.87.104回复.0.6。請注意,當.0.6ping時.87.104,TP-LINK 路由器永遠不會看到 ping 請求數據包。從狀態防火牆的角度來看,如果它從未看到原始 ping 請求朝著相反的方向前進,那麼丟棄 ping 回復是完全合理的。稍後,在.87.104向 發送了一些 ping 請求後,防火牆可以允許來自的.0.6ping 回复,因為它最近看到了與 的通信。.84.104``.0.6``.87.104``.0.6

可以修改 TP-LINK 的防火牆規則。但由於它是“預算”品牌路由器,我懷疑您的選擇將僅限於“狀態防火牆開/關”複選框。或者你甚至可能不明白。

一種可能的解決方案是向 Debian OpenVPN 伺服器添加第二個 NIC,並使其成為 Office A 的網際網路網關路由器。這樣一來,Office A 客戶端上的預設網關路由也適用於10.8流量,您不必向所有客戶端的路由表添加額外條目。作為額外的獎勵,您將有機會iptables根據自己的意願定制防火牆規則。

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