通过虚拟机中运行的 OpenVPN 服务器公开 LAN

通过虚拟机中运行的 OpenVPN 服务器公开 LAN

有一个 OpenVPN 服务器在 VirtualBox 虚拟机中运行,具有 NAT 网络。VM 在物理主机上运行,​​并且该主机连接到 LAN。我想让 VM 主机的 LAN ( 192.168.0.0/24) 通过 VPN 可用。VPN 网络是10.8.0.0/24

以下是我所做的:

  • 我已经配置了 OpenVPN,客户端可以毫无问题地连接它;
  • 在VPN服务器配置中,我正在向客户端推送以下路由:push "route 192.168.0.0 255.255.255.0"
  • 我已经在运行 VPN 服务器的虚拟机中启用了数据包转发:(sysctl net.ipv4.ip_forward=1我知道此更改不是持久的);
  • 据我所知,该网络的任何地方都没有启用防火墙。

问题:我期望能够192.168.0.105从连接的 VPN 客户端 ping LAN 上的一台机器(其地址是),但是却不行。

VPN 客户端的接口和路由表(当连接到 VPN 时):

wlan0: inet 192.168.43.152/24
tun0: inet 10.8.0.6 peer 10.8.0.5/32
default via 192.168.43.1 dev wlan0 proto dhcp src 192.168.43.152 metric 600 
10.8.0.1 via 10.8.0.5 dev tun0 
10.8.0.5 dev tun0 proto kernel scope link src 10.8.0.6 
192.168.0.0/24 via 10.8.0.5 dev tun0 
192.168.43.0/24 dev wlan0 proto kernel scope link src 192.168.43.152 metric 600 

VPN 服务器的接口(这是 VM),上述客户端连接到 VPN:

enp0s3: inet 10.0.2.15/24
tun0: inet 10.8.0.1 peer 10.8.0.2/32
default via 10.0.2.2 dev enp0s3 proto dhcp src 10.0.2.15 metric 100 
10.0.2.0/24 dev enp0s3 proto kernel scope link src 10.0.2.15 metric 100 
10.8.0.0/24 via 10.8.0.2 dev tun0 
10.8.0.2 dev tun0 proto kernel scope link src 10.8.0.1 

traceroute 192.168.0.105VPN 客户端上的 输出只显示10.8.0.1,没有其他内容。因此看起来数据包至少到达了 VPN 服务器计算机。VPNtraceroute 192.168.0.105服务器计算机上 的输出显示10.0.2.2(这是虚拟机的物理主机,由 VirtualBox 在该地址下提供),然后正确到达目的地。在 VPN 服务器计算机上, 的数据包192.168.0.105应路由到默认网关,即10.0.2.2,但它仅在服务器计算机上直接发出 ping 时有效,而当它通过 VPN 时无效。

答案1

您可以在 VirtualBox 主机上添加静态路由,让其了解 VPN 客户端子网。为此,您可以在 VirtualBox 主机上运行以下命令:

sudo route add -net 10.8.0.0 netmask 255.255.255.0 gw 10.0.2.15

此命令告诉 VirtualBox 主机,子网 10.8.0.0/24 可通过 VPN 服务器的 IP 地址 (10.0.2.15) 访问。通过此设置,LAN 计算机现在应该能够通过 VPN 服务器将流量发送回 VPN 客户端。

此外,由于您提到数据包转发的 sysctl 更改不是持久的,请确保将以下行添加到 VPN 服务器 VM 上的相关配置文件(例如 /etc/sysctl.conf)中,以确保重新启动后启用 IP 转发:

net.ipv4.ip_forward=1

应用这些更改后,尝试再次从 VPN 客户端 ping LAN 机器(192.168.0.105),它应该可以按预期工作。

相关内容