Debian

來賓網路無法在 Debian Jessie 主機伺服器 KVM 上使用 br0 橋接網路

  • November 30, 2018

GUESTS 網路根本不工作。換句話說,guest 無法 ping 主機或 LAN 網關。

  • 我已經創建了 br0 網橋,並且 brctl 顯示 vnet0 已由 KVM 在客戶機啟動時正確添加到 br0
  • 我已將 ip_forward 設置為 1
  • iptables 已關閉,甚至沒有安裝,因為我只需要 GUESTS 通過橋接 br0 直接訪問路由器/區域網路

我有這個設置在其他帶有 centos 主機的系統上工作,但我是 debian 新手,不知道我可能忘記做什麼了。

主機網路似乎工作正常,eth0 不再擁有 IP,而 br0 擁有 eth0 曾經擁有的 IP。brctl show 命令顯示 br0 和 eth0 在 Guest 關閉時被奴役,當 Guest 打開時顯示 eth0 和 vnet0


我只是通過簡單地從 VIRTIO 更改為 RTL 網路介面來使其工作,這與選擇“hypervisor default”是一樣的。還有的輸出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 一起使用。核心是否存在潛在問題?我如何檢查核心配置,這是一個帶有uname -a輸出的 debian Jessie

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

感謝馬斯。清理我的第一篇文章。我剛剛注意到來賓上不存在 /sys/devices/virtio 文件夾,但 /sys/devices/virtual/net/lo 存在,但沒有 /sys/devices/virtual/net/eth0

centos 6.4“guest”上的 ifconfig 顯示 eth0 得到 0 字節 RX 但 14kB TX 所以我猜它沒有收到任何通信。我不會放棄輕鬆,但我並不期待在來賓和主機上從頭開始重建核心。

好吧,我似乎找到了問題所在。為了診斷,我安裝了一個 Windows 客戶機並安裝了 Windows virtio 驅動程序。我能夠在 Windows 中使用 virtio 網路,所以問題出在 Linux 來賓核心或核心驅動程序上,因為 Linux 來賓確實載入了 virtio pci/block 等核心模組,因此可能需要重新編譯核心。因此,“HOST”方面沒有任何問題。

另外,我應該在我的研究中指出,發現人們總是在虛擬化方面給出建議而沒有說明他們指的是 GUEST 還是 HOST,這很煩人,事實上,由於這個原因,人們在載入時會產生很多混亂virtio 核心模組在主機上而不是來賓等…(我在兩者上都載入了它們,不必要地在主機上…但無論哪種方式都無所謂,不能解決我的問題,看來我必須在我的 centos Linux 客戶機上重新編譯 Linux 核心。)

您是否在 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 範圍。

引用自:https://serverfault.com/questions/631002