带有 br0 桥接网络的 Debian Jessie 主机服务器 KVM 上的来宾网络无法正常工作

带有 br0 桥接网络的 Debian Jessie 主机服务器 KVM 上的来宾网络无法正常工作

客人网络完全不工作。换句话说,客人无法 ping 主机或局域网网关。

  • 我已经创建了 br0 桥,并且 brctl 显示 vnet0 已在客户机启动时由 KVM 正确添加到 br0
  • 我已将 ip_forward 设置为 1
  • Iptables 已关闭,甚至没有安装,这应该不需要,因为我只需要客人通过桥接的 br0 直接访问路由器/局域网

我已经在其他具有 centos 主机的系统上运行了这个设置,但我对 debian 还不熟悉,不确定我可能忘记了做什么。

主机网络似乎工作正常,eth0 不再具有 IP,而 br0 具有 eth0 以前具有的 IP。brctl show 命令在 Guest 关闭时显示 br0,eth0 被从属,而 Guest 打开时则显示 eth0 和 vnet0


我只需将 VIRTIO 更改为 RTL 网络接口即可使其正常工作,这与选择“虚拟机管理程序默认值”相同。此外,lsmod | grep virtio

virtio_pci             17389  0
virtio_net             26553  0
virtio_blk             17341  0
virtio_ring            17469  3 virtio_blk,virtio_net,virtio_pci
virtio                 13058  3 virtio_blk,virtio_net,virtio_pci

我不得不手动使用 modprobe virtio 添加 virtio,但问题仍然没有解决。使用 modprobe virtio 等添加内核模块后,我没有重新启动,但我确实重新启动了 libvirtd 和 virt-manager

它工作正常,但不能与 virtio 配合使用。内核是否存在潜在问题?如何检查内核配置,这是一个 debian Jessie,uname -a输出

Linux vmserver 3.14-2-amd64 #1 SMP Debian 3.14.15-2 (2014-08-09) x86_64 GNU/Linux

感谢 mase 整理了我的第一篇帖子。我刚刚注意到 /sys/devices/virtio 文件夹在客户机上不存在,但 /sys/devices/virtual/net/lo 存在,但没有 /sys/devices/virtual/net/eth0

centos 6.4“客户机”上的 ifconfig 显示 eth0 收到 0 字节 RX 但收到 14kB TX,因此我猜它没有收到任何通信。我不会轻易放弃,但我并不期待在客户机和主机上从头重建内核。

答案1

您是否在 iptables 中启用了伪装?

检查

iptables -L -t nat

你应该看到类似这样的内容:

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
MASQUERADE  all  --  10.0.0.0/24          !10.0.0.0/24       

如果你在 iptables 中没有看到 MASQUERADE,你可以使用以下命令允许它:

iptables -t nat -A POSTROUTING -s 10.0.0.0/24 ! -d 10.0.0.0/24 -j MASQUERADE

当然,请将 IP 范围替换为您所使用的 IP 范围。

答案2

看来我找到了问题所在。为了进行诊断,我安装了 Windows 客户机并安装了 Windows virtio 驱动程序。我能够在 Windows 中使用 virtio 网络,因此问题出在 Linux 客户机内核或内核驱动程序上,因为 Linux 客户机确实加载了 virtio pci/block 等内核模块,所以可能是内核需要重新编译。所以“主机”端没有问题。

另外,我应该指出,在我的调查中,发现人们总是在虚拟化方面给出建议,而不具体说明他们指的是 GUEST 还是 HOST,这很烦人,事实上,由于这个原因,存在很多混淆,人们在主机而不是客户机上加载 virtio 内核模块等等...(我在两者上都加载了它们,在主机上没有必要......但无论哪种方式都无所谓,都没有解决我的问题,似乎我必须在我的 centos Linux 客户机上重新编译 Linux 内核。)

相关内容