我通过 VPN 连接到充当虚拟机管理程序的 Ubuntu 服务器,该服务器运行 1 个虚拟机。我可以从服务器上的命令行 ping 虚拟机,但无法通过计算机上的 VPN 连接 ping 虚拟机。所有 ping 都返回“目标端口无法访问”
我有一个virbr1
这样的:(
virbr1 Link encap:Ethernet HWaddr 52:54:00:cb:4d:9b inet addr:10.0.100.1 Bcast:10.0.100.31 Mask:255.255.255.224
由 Libvirt 创建)
我在虚拟机管理程序上运行了 1 个 VM 10.0.100.16
,我可以从虚拟机管理程序 ping 该 VM,但不能通过 VPN ping 该 VM。
我的 openvpn server.conf 有:
server 10.0.1.0 255.255.255.240 push "route 10.0.100.0 255.255.255.224"
在我的客户端上,我可以 ping 通10.0.100.1
,但不能 ping 通10.0.100.16
:
PING 10.0.100.16 (10.0.100.16) 56(84) bytes of data. From 10.0.1.1 icmp_seq=1 Destination Port Unreachable
看起来10.0.100.16
ping 响应不包含10.0.1.1
。
当我tun1
在虚拟机管理程序上运行 tcpdump 时,我看到:
IP 10.0.1.6 > 10.0.100.16: ICMP echo request, id 26073, seq 1, length 64 IP 10.0.1.1 > 10.0.1.6: ICMP 10.0.100.16 protocol 1 port 43991 unreachable, length 92
由于某种原因,10.0.1.1
它被用来代替10.0.100.16
ICMP 回复。
知道哪里出错了吗?路由错误,缺少 iptables?
答案1
您没有提到与 virbr0 设备关联的 libvirt 虚拟网络的配置。libvirt 的默认配置是设置基于 NAT 的连接。在这样的设置中,libvirt 具有将 NAT 应用于出站连接的防火墙规则。入站连接仅从主机操作系统本身接受 - 没有来自主机外网络的路由,我认为这可能包括您的 VPN 连接。