kvm guest 無法連線到主機外部,反之亦然

kvm guest 無法連線到主機外部,反之亦然

我有一個運行 ubuntu 12.04 伺服器(名稱=vmhost)的 vmware 虛擬機,具有網路橋接和完全存取互聯網的權限。

該 vmhost 使用 kvm 管理程式並執行虛擬機器(centOS 6.4),也進行網路橋接。

vmhost可以存取internet,也可以存取其vm,並且vm可以存取vmhost。虛擬機器無法存取互聯網,我也無法從子網路上的另一台電腦 ping/ssh 到它。

我有一個 vmhost/它的 vm 的橋接器,並檢查了 iptables/routes,但沒有找到任何東西。我還有 ip_forwarding。運行 tcpdump 我發現 vmhost 可以看到這些包,但對它們沒有任何作用。我也嘗試過禁用 ufw 但沒有幫助。

VHMOST 路線資訊:

核心IP路由表

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         192.168.0.1     0.0.0.0         UG    100    0        0 virbr0
192.168.0.0     *               255.255.255.0   U     0      0        0 virbr0

The vmhouste Iptables -l
Chain INPUT (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     udp  --  anywhere             anywhere             udp dpt:domain
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:domain
ACCEPT     udp  --  anywhere             anywhere             udp dpt:bootps
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:bootps

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             192.168.122.0/24     state RELATED,ESTABLISHED
ACCEPT     all  --  192.168.122.0/24     anywhere            
ACCEPT     all  --  anywhere             anywhere            
REJECT     all  --  anywhere             anywhere             reject-with icmp-port-unreachable
REJECT     all  --  anywhere             anywhere             reject-with icmp-port-unreachable

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination



Interface file:
auto lo
iface lo inet loopback

auto virbr0
iface virbr0 inet static
        address 192.168.0.21
        network 192.168.0.0
        netmask 255.255.255.0
        broadcast 192.168.0.255
        gateway 192.168.0.1
    dns-nameservers 192.168.0.1
        bridge_ports eth0
        bridge_fd 9
        bridge_hello 2
        bridge_maxage 12
        bridge_stp off

Brctl show:
bridge name bridge id       STP enabled interfaces
virbr0      8000.000c29f8f8e4   yes     eth0 vnet1
vnet0       8000.000000000000   no   




 THE VM 
ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN 
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host 
   valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 02:00:c0:a8:00:20 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.32/24 brd 192.168.0.255 scope global eth0
inet6 fe80::c0ff:fea8:20/64 scope link 
   valid_lft forever preferred_lft forever


ip route
192.168.0.0/24 dev eth0  proto kernel  scope link  src 192.168.0.32 
default via 192.168.0.1 dev eth0 

我很快就會發布 tcpdump 結果。

另外值得一提的是,我正在使用 vmhost 作為我的虛擬機主機運行 opennebula,但我不認為這是問題所在。

答案1

我已經遇到過幾次這個問題,我發現的最好的解決方法是編輯/etc/sysctl.conf

net.ipv4.ip_forward = 1
net.bridge.bridge-nf-call-ip6tables = 0
net.bridge.bridge-nf-call-iptables = 0
net.bridge.bridge-nf-call-arptables = 0

然後運行:

sudo sysctl -p

我被告知(透過互聯網),最好在 中創建一個conf 文件/etc/sysctl.d/,但無論我在那裡放什麼,我似乎總是需要運行sysctl -p.我認為這可能存在一些問題,tuned但我還沒有調查得太深入。

您可以設定一個 cron 作業來阻止重新啟動時的執行sysctl -p

@reboot      sleep 15; sysctl -p

它不是防彈的,但它適用於我玩過的大多數系統。

答案2

您可能需要嘗試取消所有虛擬機器與 NAT 的橋接,以便您的路由器使用 DHCP 為每個虛擬機器指派各自獨立的 IP 位址。或者,嘗試將每個虛擬機器橋接至 NAT,並檢查每台電腦的「複製實體連線狀態」。直觀地看,其中一個應該為虛擬機器提供一致的、相互可見的環境。

相關內容