如何让 OpenVPN 服务器将 tun0 数据包转发到本地网络?

如何让 OpenVPN 服务器将 tun0 数据包转发到本地网络?

我有三台机器正在尝试通过 TUN 连接进行协调。

FREEBSD 在 VPN 上
的本地子网 10.0.202.1/24 上运行 OpenVPN 服务器 (tun) 10.0.200.21/24 的盒子

REMOTE

VPN 上的 公有 IP 10.0.202.6/24

WEBSERVER
本地子网上的 10.0.200.31/24

我可以通过 OpenVPN 连接REMOTE到 VPN FREEBSD,连接正常,但配置不正确。当我尝试通过在的浏览器中输入 的 IP 地址从 连接REMOTE到 时,无法访问。如果我直接连接到本地子网,则可以访问。WEBSERVERWEBSERVERREMOTEWEBSERVERREMOTE

我在排除故障时了解到了以下内容。

  • REMOTE可以 ping 通FREEBSD它,甚至可以通过 SSH 连接它。
  • FREEBSD在的以太网端口上设置的数据包捕获未捕获REMOTE来自 的 VPN IP 10.0.202.6 或发往 的数据包。因此 REMOTE 的数据包未到达本地子网。
  • openvpn.log文件FREEBSD包含以下行:GET INST BY VIRT: 10.0.200.31 [failed]

因此,看起来 OpenVPN 没有将 TUN 设备上接收到的数据包转发到FREEBSD以太网适配器并转发到本地子网。

我的 server.conf 文件中确实有以下行。
push "route 10.0.200.0 255.255.255.0"

我尝试添加此行,但没有帮助。
route 10.0.200.0 255.255.255.0


这是路由表FREEBSD

路由表

互联网:
目标网关标志 Refs 使用 Netif 过期
默认 10.0.200.1 UGS 0 4306 re0
10.0.200.0 链接#9 U 0 61582 re0
10.0.200.21 链接#9 UHS 0 41 lo0
10.0.201.0 10.0.200.1 UGS 0 0 re0
10.0.202.0 10.0.202.2 UGS 0 0 tun0
10.0.202.1 链接#12 UHS 0 0 lo0
10.0.202.2 链接#12 UH 0 0 tun0
本地主机链接#11 UH 0 193743 lo0


我在网上读到过这条GET INST BY VIRT: 10.0.200.31 [failed]消息,有人建议 Linux 机器运行以下命令。
echo 1 > /proc/sys/net/ipv4/ip_forward
我不敢运行它,因为我不理解它,也不想陷入FREEBSD一个陌生的配置。我还强烈倾向于修改 server.conf 文件以自动创建必要配置的解决方案,以便在关闭 OpenVPN 时对其进行适当的管理和拆除。

这个问题的解决方案是什么?

答案1

找到问题了。原来 FreeNAS(基于 FreeBSD 的 NAS 设备软件,我上面提到的)FREEBSD已将设置net.inet.ip.forwarding为 0。可以使用命令查看sysctl -a | grep net.inet.ip.forwarding。为了让数据包转发,我必须执行sysctl net.inet.ip.forwarding=1

此更改在重启后不会保留。我想我可能必须使用 /etc/rc.conf 文件并进行设置gateway_enable="YES",但到目前为止,我发现此设置在重启之前不会得到处理,不幸的是,在 FreeNAS 上,rc.conf 似乎每次重启都会被覆盖。可能可以将此变量写入 /etc/defaults/rc.conf,它应该存储系统的默认值,并被 rc.conf 中的自定义配置覆盖,但 /etc/defaults/rc.conf 文件顶部有一个警告,不要编辑它。

因此,这个问题还没有完全解决,但至少我已经弄清楚了问题是什么。现在我明白了这一点,我现在注意到登录本地子网上的 https Web 管理设备存在问题。这将是另一个需要解决的问题。

答案2

好的,您的 VPN 客户端有一条路由可以访问网络10.0.200.0/24,您的 VPN 服务器也有一条路由。但问题是您的 Web 服务器10.0.200.31有一条路由可以访问10.0.202.0/24网络吗?

在 freebsd 机器上执行 tcpdump。我怀疑你会看到来自10.0.202.6主机的流量被转发,但你看不到任何返回流量。

相关内容