kvm 客户机无法连接到主机外部,反之亦然

kvm 客户机无法连接到主机外部,反之亦然

我有一个运行 ubuntu 12.04 服务器(名称=vmhost)的 vmware vm,具有网络桥接和完全互联网访问权限。

该 vmhost 正在使用 kvm 虚拟机管理程序并且正在运行 vm(centOS 6.4)以及网络桥接。

vmhost 可以访问互联网,也可以访问其 vm,而 vm 可以访问 vmhost。vm 无法访问互联网,我也无法从子网上的另一台 PC ping/ssh 进入它。

我有 vmhost/its 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 作为我的 vm 主机运行 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,并检查每台机器的“复制物理连接状态”。直观地看,其中一个应该为虚拟机提供一致、相互可见的环境。

相关内容