NAT 後面的 iptables 伺服器可以從外部以及 nat 內部訪問

NAT 後面的 iptables 伺服器可以從外部以及 nat 內部訪問

我有 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!

相關內容