専用サーバー(CentOS 6.3)で仮想マシン(ビルドエージェントとして機能するWindows Home Server 2011)を実行するようにKVMをセットアップしました)。最近、ホストで更新を実行しました。仮想マシンがインターネットに接続できなくなりました。
仮想ネットワークは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
before拒否ルールでなければなりません。そのような:
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ルールは冗長です。
Libvirtdを再起動すると役立つ場合があります。同じ問題に一度直面し、libvirtdを再起動しただけです。 libvirtdに対応するiptablesルールが再度設定され、外部にpingを実行できます。
Sudoサービスlibvirtdの再起動