有一个 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.105
VPN 客户端上的 输出只显示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),它应该可以按预期工作。