OpenVPN - 不同子网中的客户端之间的路由问题

OpenVPN - 不同子网中的客户端之间的路由问题

我已经花了很多时间尝试解决我面临的问题,但没有成功。

我有一个 OpenVPN (CentOS 7) 设置,由 VPN 服务器和客户端组成,其中一些位于不同的子网中,使用 iptables 控制访问。Windows 服务器也连接到 OpenVPN 服务器,用户需要通过隧道连接到它。我尝试了各种配置文件选项组合,但无法添加正确的客户端路由以使客户端相互通信。客户端到客户端选项在 server.conf 中指定。

IP 寻址如下:

用户 - 10.8.0.0/24

管理员 - 10.8.1.0/24(在 ccd 文件中指定)

Windows Server - 10.8.2.1(在其 ccd 文件中指定)

OpenVPN 配置如下:

port 2000
proto tcp
dev tun0
user nobody
group nobody
persist-key
persist-tun
keepalive 10 120
topology subnet
client-to-client
server 10.8.0.0 255.255.0.0
route 10.8.1.0 255.255.255.0
route 10.8.2.0 255.255.255.0
ifconfig-pool-persist ipp.txt
#push "dhcp-option DNS 1.1.1.1"
#push "dhcp-option DNS 8.8.8.8"
#push "redirect-gateway def1 bypass-dhcp"
dh none
ecdh-curve prime256v1
tls-crypt tls-crypt.key
crl-verify crl.pem
ca ca.crt
cert server.crt
key server.key
auth SHA256
cipher AES-128-GCM
ncp-ciphers AES-128-GCM
tls-server
tls-version-min 1.2
tls-cipher TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256
client-config-dir /etc/openvpn/ccd
status /var/log/openvpn/status.log
log-append /var/log/openvpn/openvpn.log
verb 3

远程Windows服务器的ccd文件如下:

ifconfig-push 10.8.2.1 255.255.255.0
iroute 10.8.2.1 255.255.255.255
push "route 10.8.0.0 255.255.255.0"
push "route 10.8.1.0 255.255.255.0"

远程 Windows 服务器的客户端文件如下所示:

client
proto tcp-client
remote X.X.X.X 2000
dev tun
resolv-retry infinite
nobind
persist-key
persist-tun
remote-cert-tls server
verify-x509-name server name
auth SHA256
auth-nocache
cipher AES-128-GCM
tls-client
tls-version-min 1.2
tls-cipher TLS-ECDHE-ECDSA-WITH-AES-128-GCM-SHA256
ignore-unknown-option block-outside-dns
setenv opt block-outside-dns # Prevent Windows 10 DNS leak
verb 3

令人沮丧的是,我之前曾这样做过,但出于不值得深究的原因,配置丢失了。

我发现,在上面提到的 Windows 服务器上,如果在客户端连接后手动添加通过 10.8.2.2 到 10.8.0.0/24 的路由,它就可以 ping 10.8.0.1,其他客户端也可以连接到它。但是,如果我不添加路由,它会尝试从其默认网关向 10.8.0.0 发送流量,这显然会失败。

目前,我已经通过使用持久静态路由解决了这个问题,但我非常想了解我在这里做错了什么。

我也观察到了 10.8.1.0/24 上的管理员用户的相同行为,但由于他们需要访问许多不同机器上的许多子网,因此持久静态路由不是一种选择(而且这感觉非常黑客,我想避免)。

编辑添加路由表以获取更多上下文

这是来自 Windows 服务器的路由表:

===========================================================================
Active Routes:
Network Destination        Netmask          Gateway       Interface  Metric
          0.0.0.0          0.0.0.0    12.22.122.193    12.22.122.202    271
         10.8.0.0    255.255.255.0         10.8.0.1         10.8.2.1    257
         10.8.0.0    255.255.255.0         10.8.2.2         10.8.2.1      2
         10.8.1.0    255.255.255.0         10.8.0.1         10.8.2.1    257
         10.8.2.0    255.255.255.0         On-link          10.8.2.1    257
         10.8.2.1  255.255.255.255         On-link          10.8.2.1    257
       10.8.2.255  255.255.255.255         On-link          10.8.2.1    257
    12.22.122.192  255.255.255.192         On-link     12.22.122.202    271
    12.22.122.202  255.255.255.255         On-link     12.22.122.202    271
    12.22.122.255  255.255.255.255         On-link     12.22.122.202    271
        127.0.0.0        255.0.0.0         On-link         127.0.0.1    331
        127.0.0.1  255.255.255.255         On-link         127.0.0.1    331
  127.255.255.255  255.255.255.255         On-link         127.0.0.1    331
        224.0.0.0        240.0.0.0         On-link         127.0.0.1    331
        224.0.0.0        240.0.0.0         On-link          10.8.2.1    257
        224.0.0.0        240.0.0.0         On-link     12.22.122.202    271
  255.255.255.255  255.255.255.255         On-link         127.0.0.1    331
  255.255.255.255  255.255.255.255         On-link          10.8.2.1    257
  255.255.255.255  255.255.255.255         On-link     12.22.122.202    271
===========================================================================
Persistent Routes:
  Network Address          Netmask  Gateway Address  Metric
          0.0.0.0          0.0.0.0    12.22.122.193  Default
         10.8.0.0    255.255.255.0         10.8.2.2       1
===========================================================================

请注意,存在一条通过 10.8.2.2 到 10.8.2.0/24 的持久路由,这条路由有效,并且是我静态添加的。您可以看到一条通过 10.8.2.1 到 10.8.1.0/24 的路由 - 这是由客户端添加的,并且无法访问,流量会尝试通过默认网关。

还有一件值得注意的事情是,每次非标准(例如 10.8.0.0/24 之外的)用户连接时,服务器似乎都会记录以下内容:

admin1/1.2.6.4:38593 MULTI ERROR: primary virtual IP for admin1/1.2.6.4:38593 (10.8.1.1) violates tunnel network/netmask constraint (10.8.0.0/255.255.255.0)

我在文档或网上找不到太多关于此内容的信息。

答案1

根据 Tom Yan 的建议,解决此问题的方法是使用route-gateway 10.8.1.1相关用户的 ccd 文件。这会向客户端添加正确的路由,并允许它们路由回远程子网。

相关内容