Servidor iptables detrás de NAT accesible tanto desde fuera como desde dentro de la nat

Servidor iptables detrás de NAT accesible tanto desde fuera como desde dentro de la nat

Tengo 2 máquinas con un KVM ejecutándose en cada máquina, por lo que dos kvm con las siguientes redes

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)

Los KVM alojan un servidor en el puerto 6000. Me gustaría que los KVM funcionen como clientes y servidores. Por ejemplo, KVM1 podría optar por comunicarse como cliente con el servidor de KVM2 o consigo mismo. En este caso KVM1 se conectaría a 192.168.10.101 o 192.168.10.100 (él mismo)

Para esto, tengo configuradas las siguientes reglas de iptables, pero no puedo hacer que un KVM se comunique con el servidor que se ejecuta en sí mismo. ¿Alguien puede ayudarme a descubrir el eslabón perdido?

Tanto KVM1 como KVM2 tienen las siguientes reglas configuradas (las siguientes son reglas completas tal como aparecen en mi cuadro):

En la tabla predeterminada, configuré el reenvío a la red del 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

En la tabla NAT configuré el reenvío de puertos en PREROUTING y MASQUERADE todos los paquetes que salen de la interfaz virtual desde el 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

Con las reglas anteriores, KVM1 puede comunicarse con el servidor que se ejecuta en KVM2 pero no con el servidor que se ejecuta en sí mismo. Esto se debe a la regla PREROUTING anterior que niega cualquier paquete de origen con la dirección del KVM.

Si cambio la regla PREROUTING anterior a:

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
DNAT       tcp  --  anywhere             anywhere             tcp dpt:x11 to:10.10.100.128:6000

En este caso el problema es nuevo. ¡Cualquier solicitud de KVM1 a KVM2 se enruta internamente de regreso a KVM1!

información relacionada