使用 linux-kvm 和 macvtap 时,客户机和主机无法互相看到对方

使用 linux-kvm 和 macvtap 时,客户机和主机无法互相看到对方

我正在将 kvm 虚拟机从旧主机(硬件和操作系统)迁移到新主机。

对于网络,virt-manager 为我提供了一个新的选择:苹果电脑。这看起来是在 eth0 上设置网桥的一个不错的替代方案。

现在,客户机启动正常,从我的本地网络 DHCP 服务器获取 IP,可以访问互联网。客户机还可以看到本地网络上的其他机器,我可以通过 ssh 连接它们,等等。

问题是主机和客户机无法互相看到对方。我无法使用客户机 IP 从主机访问客户机,也无法使用主机 IP 从客户机访问主机。无法 ping、ssh、http,什么都无法实现。

以下是route -n来自主机的命令:

$ /sbin/route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.1     0.0.0.0         UG    0      0        0 eth0
192.168.0.0     0.0.0.0         255.255.255.0   U     1      0        0 eth0

(与客人的输出相同)。

我可能可以设置一个新的 tun/tap 接口,专门用于主机和客户机之间的通信,但这看起来有点过头了。有没有办法让主机和客户机进行通信?

答案1

我在 IRC 上问了这个问题,看来 macvtap

将访客流量注入到网络堆栈太低

解决方案是添加一个网络接口,以便客户机和主机进行通信,或者保留旧的桥接解决方案......

答案2

virt-manager 明确指出,当您设置 macvtap 时,它不适用于主机到客户机的网络通信。我只是添加了第二个基于 nat 的接口,在客户机中设置它,然后使用它与我的主机进行通信。

答案3

解决方案是在虚拟机管理程序上配置 macvlan 接口,其 IP 地址与实际硬件接口相同(非常重要),并在主机上配置路由以使用它。在 Qemu/KVM 中,照常在硬件接口上使用 macvtap 接口。

对于我的配置(192.168.1.0/24 网络、p10p1 硬件接口和 192.168.1.1 网关),它提供(在虚拟机管理程序上):

ip link add link p10p1 address 00:19:d1:29:d2:58 macvlan0 type macvlan mode bridge
ip address add 192.168.1.100/24 dev macvlan0
ip link set dev macvlan0 up

ip route flush dev p10p1
ip route add default via 192.168.1.1 dev macvlan0 proto static

答案4

您希望最终得到如下结果:

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         192.168.0.1     0.0.0.0         UG    0      0        0 macvlan0
192.168.0.0     0.0.0.0         255.255.255.0   U     1      0        0 macvlan0

请注意,最后一列包含“macvlan0”而不是“eth0”。

为了实现这一点,您可以使用这些命令,假设 192.168.0.42 是您的 IP 地址:

ip link add link eth0 macvlan0 type macvlan mode bridge
ip address add 192.168.0.42 dev macvlan0
ip link set dev macvlan0 up
ip route flush dev eth0
ip route add default via 192.168.0.1

与 npen 的解决方案大致相同。如果您想要更复杂的脚本,请参阅我的网页关于这个主题。

相关内容