我有 2 台機器,每台機器上都運行一個 KVM - 所以兩個 kvm 具有以下網絡
Host 1: 192.168.10.100 (eth2)
10.10.100.1 (virbr1)
KVM 1 (NAT with Host 1): 10.10.100.128 (eth0 inside kvm)
Host 2: 192.168.10.101 (eth2)
10.10.100.1 (virbr1)
KVM 2 (NAT with Host 2): 10.10.100.128 (eth0 inside kvm)
KVM 在連接埠 6000 上託管伺服器。例如,KVM1 可以選擇以客戶端與 KVM2 上的伺服器或其本身進行通訊。在這種情況下,KVM1 將連接到 192.168.10.101 或 192.168.10.100(本身)
為此,我設定了以下 iptables 規則,但我無法讓 KVM 與自身運行的伺服器進行通訊。有人可以幫我找出缺少的連結嗎?
KVM1 和 KVM2 都設定了以下規則(以下是我的盒子上顯示的完整規則):
在預設表中,我設定了到 KVM 網路的轉送:
Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
114 7254 ACCEPT udp -- virbr1 * 0.0.0.0/0 0.0.0.0/0 udp dpt:53
0 0 ACCEPT tcp -- virbr1 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:53
314 103K ACCEPT udp -- virbr1 * 0.0.0.0/0 0.0.0.0/0 udp dpt:67
0 0 ACCEPT tcp -- virbr1 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:67
6810K 1271M ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22
43 2723 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:8000
475 60252 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:8443
270 15588 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:111
35125 4776K ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:111
720 112K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:4001
0 0 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:4001
6 328 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:564
6 500 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:564
14532 5776K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:2049
0 0 ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:2049
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:4002
19070 1526K ACCEPT udp -- * * 0.0.0.0/0 0.0.0.0/0 udp dpt:4002
2900K 852M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0 ctstate RELATED,ESTABLISHED
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:6500flags: 0x17/0x02
0 0 ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:6550flags: 0x17/0x02
7294 379K ACCEPT tcp -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:9000
0 0 REJECT all -- eth0 * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
8574K 1767M ACCEPT all -- * * 0.0.0.0/0 0.0.0.0/0
Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
pkts bytes target prot opt in out source destination
934 642K ACCEPT all -- * * 0.0.0.0/0 10.10.100.0/24 state NEW,RELATED,ESTABLISHED
88 7740 ACCEPT all -- * virbr1 0.0.0.0/0 10.10.100.0/24 state RELATED,ESTABLISHED
533 39866 ACCEPT all -- virbr1 * 10.10.100.0/24 0.0.0.0/0
0 0 ACCEPT all -- virbr1 virbr1 0.0.0.0/0 0.0.0.0/0
4 240 REJECT all -- * virbr1 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
0 0 REJECT all -- virbr1 * 0.0.0.0/0 0.0.0.0/0 reject-with icmp-port-unreachable
Chain OUTPUT (policy ACCEPT 8939K packets, 2177M bytes)
pkts bytes target prot opt in out source destination
在 NAT 表中,我在 PREROUTING 和 MASQUERADE 中設定了連接埠轉發,所有封包均從 kvm 離開虛擬介面:
Chain PREROUTING (policy ACCEPT 116K packets, 20M bytes)
pkts bytes target prot opt in out source destination
0 0 DNAT tcp -- * * !10.10.100.128 0.0.0.0/0 tcp dpt:8080 to:10.10.100.128:8080
0 0 DNAT tcp -- * * !10.10.100.128 0.0.0.0/0 tcp dpt:6002 to:10.10.100.128:6002
0 0 DNAT tcp -- * * !10.10.100.128 0.0.0.0/0 tcp dpt:6001 to:10.10.100.128:6001
0 0 DNAT tcp -- * * !10.10.100.128 0.0.0.0/0 tcp dpt:6000 to:10.10.100.128:6000
Chain INPUT (policy ACCEPT 114K packets, 20M bytes)
pkts bytes target prot opt in out source destination
54 16928 ACCEPT all -- * * 10.10.100.128 0.0.0.0/0
Chain OUTPUT (policy ACCEPT 7539 packets, 410K bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 7537 packets, 410K bytes)
pkts bytes target prot opt in out source destination
2 104 MASQUERADE all -- * virbr1 0.0.0.0/0 0.0.0.0/0
0 0 MASQUERADE tcp -- * * 10.10.100.0/24 !10.10.100.0/24 masq ports: 1024-65535
0 0 MASQUERADE udp -- * * 10.10.100.0/24 !10.10.100.0/24 masq ports: 1024-65535
0 0 MASQUERADE all -- * * 10.10.100.0/24 !10.10.100.0/24
根據上述規則,KVM1 可以與 KVM2 上執行的伺服器通信,但不能與自身執行的伺服器通訊。這是因為上面的 PREROUTING 規則否定了具有 KVM 位址的任何來源資料包。
如果我將上述 PREROUTING 規則更改為:
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT tcp -- anywhere anywhere tcp dpt:x11 to:10.10.100.128:6000
在這種情況下,問題是新的。從 KVM1 到 KVM2 的任何請求都會在內部路由回 KVM1!