我无法从不同子网中的计算机访问由 KVM 托管的虚拟机上运行的 Web 应用程序。
因此,我想从机器 192.168.1.2(右上角绿色圆圈)访问在虚拟机 192.168.10.1(中间下部红色圆圈)上运行的 Web 应用程序
我在 netgear 路由器上添加了静态路由,以便所有到 192.168.10.0/24 的请求都转发到主机 192.168.1.1。
主机本身有一条静态路由,通过 vmbr1 桥接接口将请求转发到 192.168.10.0/24
- 从 192.168.1.2 到 80 端口的 telnet 失败,从主机 192.168.1.1 到 80 端口的 telnet 成功。
- 从 192.168.1.2 机器到 VM 对虚拟机进行 ping 调用
- 跟踪路由失败,但如果我添加 -I 选项,跟踪路由也会有效。
提前感谢您的帮助或任何线索。
附言:我明确指出,即使禁用防火墙,它也不起作用。
iptables -L
Chain INPUT (policy ACCEPT)
target prot opt source destination
Chain FORWARD (policy ACCEPT)
target prot opt source destination
Chain OUTPUT (policy ACCEPT)
target prot opt source destination
从物理机 192.168.1.2 到虚拟机 192.168.10.1 的 traceroute => KO
traceroute to 192.168.10.1 (192.168.10.1), 30 hops max, 60 byte packets
1 192.168.1.254 (192.168.1.254) 2.390 ms 3.004 ms 3.436 ms
2 * * *
3 * * *
...
30 * * *
从虚拟机 192.168.1.2 到物理机 192.168.10.1 机器的 traceroute => OK
traceroute to 192.168.1.2 (192.168.1.2), 30 hops max, 60 byte packets
1 192.168.10.254 (192.168.10.254) 0.846 ms 0.648 ms 0.519 ms
2 192.168.1.2 (192.168.1.2) 5.447 ms 5.277 ms 4.977 ms
从 192.168.1.2 机器对 VM 机器 192.168.10.1 执行 ping 操作:
ping 192.168.10.1
PING 192.168.10.1 (192.168.10.1) 56(84) bytes of data.
From 192.168.1.254: icmp_seq=1 Redirect Host(New nexthop: 192.168.1.1)
From 192.168.1.254 icmp_seq=1 Redirect Host64 bytes from 192.168.10.1: icmp_seq=1 ttl=63 time=2.77 ms
From 192.168.1.254: icmp_seq=2 Redirect Host(New nexthop: 192.168.1.1)
From 192.168.1.254 icmp_seq=2 Redirect Host64 bytes from 192.168.10.1: icmp_seq=2 ttl=63 time=2.56 ms
在主机上,路由定义得很好,从这台主机我可以毫无问题地访问 VM 的 Web 应用程序。
ip 路由显示
default via 192.168.1.254 dev eth0
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.1
192.168.10.0/24 dev vmbr10 proto kernel scope link src 192.168.10.254
192.168.20.0/24 dev vmbr20 proto kernel scope link src 192.168.20.254
编辑
当我使用 RJ45 电缆将 192.168.1.2 机器(源机器)直接插入路由器时,它可以正常工作。之前 192.168.1.2 通过 Wifi 连接到路由器。所以我认为这台路由器的问题在于它不能很好地将静态路由应用于通过 Wifi 连接的机器。我不知道为什么,但这很奇怪 :S
答案1
您遇到的问题是因为您使用的路由器在同一个子网 192.168.1.0/24 上有 2 个接口。
192.168.1.2 机器正在向其默认网关发送数据包,我假设它是 192.162.1.254,即路由器。
但是,由于路由器发现数据包的下一跳是同一子网上的另一个 IP,因此它会生成您在 ping 输出中看到的重定向。
您需要将路由器作为网桥或交换机运行,即不需要路由,因为 KVM 192.168.1.1 和客户端 192.168.1.2 都在同一个子网上,它们不需要路由协议进行通信。
此外,这意味着客户端 192.168.1.2 的正确默认网关应该是 KVM 192.168.1.1。
另外,您需要确认是否正在为 KVM 使用正确的默认网关,它真的是路由器吗?路由器是否为 KVM 或客户端提供对除此处绘制的子网之外的其他子网的访问权限?