我为子网 10.8.0.0/24 设置了一个 OpenVPN 服务器,该服务器对内部网络的访问权限受到限制。此外,我想为选定的客户端手动配置 10.8.1.0/24 的静态 IP,以赋予它们额外的权限(例如 SSH 访问权限)。
访问控制通过 iptables 完成并按预期工作。
现在我将一条路由推送到外部 IP(在此示例中为 10.10.10.10),并在端口 80 和 443 上运行 Web 服务器。
当连接到没有客户端特定配置的 VPN 并因此获得 10.8.0.0/24 IP 时,我可以毫无问题地访问 10.10.10.10 上的 Web 服务器。我可以看到数据包从 tun0 进入,并从 p4p1(外部接口)离开服务器。当连接到具有客户端特定配置的 VPN 并因此获得 10.8.1.0/24 IP 时,我可以 ping 所有内部服务器,但指定给 10.10.10.10 的数据包不会被中继到 VPN 服务器上的任何物理接口(在 TCP 转储中检查)。
关于这一点,摘录自 OpenVPN 服务器配置:
server 10.8.0.0 255.255.255.0
push "route 10.10.10.10 255.255.255.255"
client-config-dir /etc/openvpn/ccd
route 10.8.1.0 255.255.255.0
client-to-client
comp-lzo
persist-key
persist-tun
客户端配置/etc/openvpn/ccd/some-client:
ifconfig-push 10.8.1.133 10.8.1.134
由于流量通过列在内部接口(p1p1)上的任何特定路由进行传输,我猜测 OpenVPN 没有正确地将流量重定向到接口 p4p1 上的默认路由,但我不知道它为什么会这样做以及如何修复它。
有什么建议么?
答案1
正如 Diamant 所说,Web 服务器也需要通过 VPN 服务器路由回 10.8.1.0/24。或者,需要配置 VPN 服务器以对发往 Web 服务器的请求执行 NAT。
此外,我不确定这一点,但您可能需要将其添加push "route 10.8.0.0 255.255.0.0"
到您的服务器配置中。
编辑:服务器配置中的网络掩码让我很困扰。除了上面的建议,请尝试删除server 10.8.0.0 255.255.255.0
服务器配置中的行并添加以下内容:
mode server
tls-server
ifconfig 10.8.0.1 255.255.254.0 # different netmask to support 10.8.1.0/24 range
ifconfig-pool 10.8.0.0 10.8.0.253
route-gateway 10.8.0.1
push "route-gateway 10.8.0.1"
EDIT2:添加缺失的配置行