我将KVM设置为在专用服务器(CentOS 6.3)上运行虚拟机(Windows Home Server 2011充当构build代理)。 最近,我在主机上运行更新,现在虚拟机无法连接到互联网。
虚拟networking正在通过NAT运行,主机有一个用静态IP(virt-manager正确显示networking及其IP)的接口(eth0:0),并且与该IP的所有连接都应该发送给guest虚拟机。
主机和来宾可以互相ping通,但是来宾不能ping通主机上的任何东西,也不能ping通来自其他任何地方的来宾(我可以ping主机)。 客户到我控制下的另一台服务器以及从外部系统到客户机的结果都返回“目标端口不可达”。 在主机和目的地上运行tcpdump显示主机应答ping,但是目的地永远不会看到它(甚至不像主机根本不打算发送它,这导致我怀疑iptables)。 ping输出与此相匹配,列出来自192.168.100.1的回复。
客人可以parsingDNS,但是,我觉得很奇怪。 访客的networking设置(连接TCP / IPv4属性)使用静态本地IP(192.168.100.128),掩码255.255.255.0,以及网关和DNS 192.168.100.1设置。
当最初设置vm / net时,我已经设置了一些iptables规则来启用桥接,但是在我的托pipe公司抱怨桥接之后,我使用NATbuild立了一个新的虚拟networking,并相信我删除了所有的规则。
虚拟机的networking在过去的几个月里工作得很好,直到昨天。 我没有听到托pipe公司的任何内容,没有改变客人的任何东西,所以据我所知,没有其他更改(不幸的是,更新的软件包列表已经脱落,我没有注意到它下)。
更新:
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 ACCEPT tcp -- main-domain anywhere tcp dpt:mysql Chain FORWARD (policy ACCEPT) target prot opt source destination ACCEPT all -- anywhere 192.168.100.0/24 state RELATED,ESTABLISHED ACCEPT all -- 192.168.100.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 ACCEPT all -- anywhere 192.168.100.128 ACCEPT all -- anywhere guest-subdomain
iptables -t nat -L :
Chain PREROUTING (policy ACCEPT) target prot opt source destination DNAT all -- anywhere guest-subdomain to:192.168.100.128 Chain POSTROUTING (policy ACCEPT) target prot opt source destination MASQUERADE tcp -- 192.168.100.0/24 !192.168.100.0/24 masq ports: 1024-65535 MASQUERADE udp -- 192.168.100.0/24 !192.168.100.0/24 masq ports: 1024-65535 MASQUERADE all -- 192.168.100.0/24 !192.168.100.0/24 SNAT all -- 192.168.100.128 anywhere to:guest-ip
FORWARD链中的这些行:
ACCEPT all -- anywhere 192.168.100.128 ACCEPT all -- anywhere guest-subdomain
应该在拒绝规则之前 。 这样的:
Chain FORWARD (policy ACCEPT) target prot opt source destination ACCEPT all -- anywhere 192.168.100.128 ACCEPT all -- anywhere guest-subdomain ACCEPT all -- anywhere 192.168.100.0/24 state RELATED,ESTABLISHED ACCEPT all -- 192.168.100.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
您可以删除它们并使用以下内容在顶部插入规则。
iptables -I FORWARD -d guest-subdomain -j ACCEPT iptables -I FORWARD -d 192.168.100.128 -j ACCEPT
此外,由于您已经拥有MASQUERADE规则,所以SNAT规则是多余的。
重新启动libvirtd可能会有所帮助。我遇到同样的问题,只是重新启动libvirtd。 对应libvirtd的iptables规则再次设置,我可以ping外面的世界。