Kvm访客networking无法访问

我有一个运行ubuntu的几个guest虚拟机的kvm设置。

出于某种原因,我无法通过80号港口从客人到外面的交通。 另一种方法工作得很好,Apache提供托pipe的网页,因为它应该。 其他港口像ssh也工作得很好。

这里是一个例子:

me@guest:~$ curl heise.de curl: (7) Failed to connect to 2a02:2e0:3fe:100::8: Network is unreachable 

curl失败与networking无法达到一个很长的超时后,似乎尝试使用IPv6地址,这是不应该做的。 curl与本地托pipe域名的作品。

平安作品:

 me@guest:~$ ping heise.de PING heise.de (193.99.144.80) 56(84) bytes of data. 64 bytes from redirector.heise.de (193.99.144.80): icmp_req=1 ttl=245 time=6.92 ms 64 bytes from redirector.heise.de (193.99.144.80): icmp_req=2 ttl=245 time=7.05 ms 

既然发生在我所有的客人同时,我想这一定是我在主机上做的事情。 但即使当我closures所有我自制的iptables规则,它仍然无法正常工作。

所以在kvm / libvirtnetworking中的某个地方我的http请求去了他们不应该的地方。 这是我的KVM的networkingconfiguration

 <network> <name>network_nat</name> <uuid>....</uuid> <forward mode='nat'/> <bridge name='virbr0' stp='on' delay='0' /> <mac address='52:54:00:30:9B:D6'/> <ip address='192.168.100.1' netmask='255.255.255.0'> <dhcp> <range start='192.168.100.128' end='192.168.100.254' /> <host mac='52:54:00:e4:71:f5' name='web' ip='192.168.100.210' /> </dhcp> </ip> </network> 

我的客人被configuration为使用该networking。 DHCP似乎工作:至less客人有我configuration的IP地址。

那么为什么我不能访问我的客人的任何网站?

部分问题在重新启动后解决。 这可能是遵循这里的build议: http : //wiki.libvirt.org/page/Networking帮助修复networking接口。

我将这些行添加到/etc/sysctl.conf

 net.bridge.bridge-nf-call-ip6tables = 0 net.bridge.bridge-nf-call-iptables = 0 net.bridge.bridge-nf-call-arptables = 0 

我还在/etc/network/interfaces更改了我的接口定义,如下所示:

 auto br0 iface br0 inet static address 176.9.xxx.xxx broadcast 176.9.xxx.xxx netmask 255.255.255.224 gateway 176.9.xxx.xxx bridge_ports eth0 bridge_fd 0 bridge_maxage 0 bridge_stp off 

经过这两个变化(可能或没有帮助),重新启动curl不会再遇到超时和“networking不可修复”的错误,而是产生了我的本地apache的结果。 很明显,我自己在iptables中的端口转发是应该受到指责的。 我没有为端口80和443的端口转发指定一个传入接口。我添加了br0,然后一切工作正常。

这里是我的iptables规则的端口转发。 我将这个与ufw结合使用作为防火墙,所以我在/etc/ufw/before.rules

这一个被添加到filter表中:

 -I FORWARD -m state -d 192.168.100.0/24 --state NEW,RELATED,ESTABLISHED -j ACCEPT 

这是我的餐桌。 错误是省略了--in-interface参数:

 *nat :PREROUTING ACCEPT [0:0] -A PREROUTING -p tcp --dport 12345 -j DNAT --to 192.168.100.210:22 -A PREROUTING -p tcp --in-interface br0 --dport 80 -j DNAT --to 192.168.100.210:80 -A PREROUTING -p tcp --in-interface br0 --dport 443 -j DNAT --to 192.168.100.210:443 -A POSTROUTING -s 192.168.100.0/24 -j MASQUERADE COMMIT 

(注意:由于某些原因,在禁用ufw的情况下手动input这些相同的规则不会产生工作的端口转发configuration。)