网络配置
我已经建立了一个网络:
计算机的适当端口192.168.87.0/24
被转发TP-LINK router
以便“全世界”都能看到。
已启用 IP 转发OpenVPN server
。
我能够从 OfficeB 连接client1
到OpenVPN server
OfficeA,client1
并且server
互相看到对方 - 他们回复 ping(内部192.168.87.0/24
和10.8.0.0/24
网络)、发送数据、创建连接(即 ssh)。
路由表TP-LINK router
(a.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.1
。87.2
但是...仅当我首先从这台计算机 ping 到以下计算机时,10.8.0.6
才会开始 ping 计算机87.0/24
(例如) :87.104
10.8.0.6
10.8.0.6
:ping 192.168.87.104
——失败,超出时间。192.168.87.104
:ping 10.8.0.6
- 好的。10.8.0.6
:ping 192.168.87.104
- 好的。
我检查过的内容
我已检查过tcpdump
,确实192.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
然后10.8.0.6
就总会得到 ping 回复,即使我之前没有 ping 过它192.168.87.104
。
我还发现了另一件事:从 到 执行 ping 操作192.168.87.104
会10.8.0.6
向路由缓存 ( route -C
) 添加一个条目(1)
。在“第一次 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
通过了,但 ping 回复却没有通过。TP-LINK router
TP-LINK router
10.8.0.0
192.168.87.104
10.8.0.6
所以我的问题是:原因是什么?我能做些什么来解决这种情况吗(除了在 OfficeA 中的每台计算机上添加路由(1)
...)?我个人认为问题出在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
答案1
我的猜测是,TP-LINK 最初会因为状态防火墙规则而丢弃从.87.104
到 的ping 回复。请注意,当ping时,TP-LINK 路由器永远不会看到 ping 请求数据包。从状态防火墙的角度来看,如果它从未看到原始 ping 请求朝相反方向发送,则丢弃 ping 回复是完全合理的。稍后,在向发送了一些 ping 请求后,防火墙可以允许从到 的ping 回复,因为它最近看到发起了与 的通信。.0.6
.0.6
.87.104
.87.104
.0.6
.84.104
.0.6
.87.104
.0.6
也许可以修改 TP-LINK 的防火墙规则。但由于它是一款“廉价”品牌路由器,我怀疑您的选项将仅限于“状态防火墙开启/关闭”复选框之类的选项。或者您甚至可能没有这个选项。
一种可能的解决方案是向 Debian OpenVPN 服务器添加第二个 NIC,并将其设为办公室 A 的互联网网关路由器。这样,办公室 A 客户端上的默认网关路由也将适用于10.8
流量,您无需在所有客户端的路由表中添加额外的条目。另外,您将有机会iptables
根据自己的意愿定制防火墙规则。