OpenVPN路由案例

OpenVPN路由案例

问题如下:服务器在 LAN A 上,客户端在 LAN B 上。客户端可以 ping 服务器,包括 LAN A 上的主机,但 LAN B 上的主机无法 ping LAN A 上的地址。 Tracoroute 显示从 LAN B 主机 ping LAN A 主机,实际上会到达客户端的网关,而不是服务器。服务器和客户端都是其 LAN 的网关。

客户:

client
dev tun
proto udp
remote x.y.z.q 1194
resolv-retry infinite
nobind
user nobody
group nogroup
persist-key
persist-tun
ca /etc/openvpn/ca.crt
cert /etc/openvpn/client.crt
key /etc/openvpn/client.key

服务器:

port 1194
proto udp
dev tun
ca /etc/openvpn/easy-rsa/2.0/keys/ca.crt
cert /etc/openvpn/easy-rsa/2.0/keys/server.crt
key /etc/openvpn/easy-rsa/2.0/keys/server.key
dh /etc/openvpn/easy-rsa/2.0/keys/dh1024.pem
server 10.8.0.0 255.255.255.0
ifconfig-pool-persist ipp.txt
push "route 192.168.1.0 255.255.255.0"
client-config-dir ccd
route 192.168.2.0 255.255.255.0
keepalive 10 120
user nobody
group nogroup
persist-key
persist-tun

ccd/客户端:

iroute 192.168.2.0 255.255.255.0

服务器路由:

10.8.0.2 dev tun0 proto kernel scope link src 10.8.0.1
10.8.0.0/24 via 10.8.0.2 dev tun0
192.168.2.0/24 via 10.8.0.2 dev tun0
x.y.z.0/24 dev eth0 proto kernel scope link src x.y.z.q
192.168.1.0/24 dev eth1 proto kernel scope link src 192.168.1.1
default via x.y.z.1 dev eth0

客户端路线:

10.8.0.5 dev tun0 proto kernel scope link src 10.8.0.6
10.8.0.0/24 via 10.8.0.5 dev tun0
192.168.2.0/24 dev eth1 proto kernel scope link src 192.168.2.1
a.b.c.d/24 dev eth0 proto kernel scope link src a.b.c.d.5
192.168.1.0/24 via 10.8.0.5 dev tun0
default via a.b.c.1 dev eth0 metric 100

当我从 192.168.2.x(LAN B)跟踪路由 192.168.1.y(LAN A)地址时,第一个希望是 abc1 ?! 这是怎么发生的? IP 转发已打开。 eth0 是客户端上具有公共 IP 的接口,我执行了 iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

从同一主机 ping 8.8.8.8 成功。这是 win 7。

答案1

这是因为 LAN B 上的主机不知道如何将流量路由到 LAN A,因此它们将数据包发送到其默认网关。默认网关显然对 LAN A 也一无所知,因此会丢弃数据包。

为了解决这个问题,您需要通过隧道路由 LAN A 的流量。有两种方法可以做到这一点:

  1. 在 LAN B 中的默认网关上的路由表中添加 LAN 的永久路由。
  2. 在 LAN B 中的 DHCP 服务器中添加路由选项,以便所有客户端在获取其 IP 地址时都能获得此附加路由。这将需要重新启动所有客户端上的网络(并销毁当前租约,以确保客户端不会只是刷新现有租约,这不会将新路由推送给他们)。

您需要的路线是

route add <LAN A><netmask LAN A> gw <tunnel IP>

确切的语法取决于主机是 Windows 还是 Linux 机器。

相关内容