KVM 虛擬機無法上網
我已將 KVM 設置為在專用伺服器(CentOS 6.3)上執行虛擬機(Windows Home Server 2011 作為建構代理)。最近在主機上執行更新,虛擬機現在無法連接到網際網路。
虛擬網路通過 NAT 執行,主機有一個使用靜態 IP 設置的介面 (eth0:0)(virt-manager 正確顯示網路及其 IP),所有到該 IP 的連接都應該發送給來賓。
主機和客人可以互相ping通,但是客人不能ping主機上面的任何東西,我也不能從其他任何地方ping客人(我可以ping主機)。從來賓到我控制下的另一台伺服器的結果以及從外部系統到來賓的結果都返回“無法訪問目標埠”。在主機和目標上執行 tcpdump 顯示主機正在回复 ping,但目標永遠不會看到它(它甚至看起來主機根本不費心發送它,這導致我懷疑 iptables)。ping 輸出與之匹配,列出來自 192.168.100.1 的回复。
但是,來賓可以解析 DNS,我覺得這很奇怪。訪客的網路設置(連接 TCP/IPv4 屬性)使用靜態本地 IP (192.168.100.128)、遮罩 255.255.255.0、網關和 DNS 設置為 192.168.100.1。
最初設置 vm/net 時,我設置了一些 iptables 規則來啟用橋接,但在我的託管公司抱怨橋接後,我使用 NAT 設置了一個新的虛擬網路,並相信我刪除了所有規則。
在過去的幾個月裡,直到昨天,VM 的網路都執行良好。我沒有收到託管公司的任何消息,沒有改變客人的任何東西,據我所知,沒有其他任何改變(不幸的是,更新的包列表已經從回滾中掉了下來,我沒有註意到它向下)。
更新:
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
SNAT 規則也是多餘的,因為您已經有了 MASQUERADE 規則。