Eu tenho 2 máquinas com um KVM rodando em cada máquina - então dois kvms com a rede abaixo
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)
Os KVMs estão hospedando um servidor, na porta 6000. Eu gostaria que os KVMs operassem como clientes e servidores. Por exemplo, o KVM1 pode escolher se comunicar como um cliente com o servidor no KVM2 ou em si. Neste caso, o KVM1 ligaria a 192.168.10.101 ou 192.168.10.100 (propriamente dito)
Para isso, tenho as regras abaixo do iptables configuradas, mas não consigo ter um KVM se comunicando com o servidor em si. Alguém pode me ajudar a descobrir o elo perdido?
Tanto o KVM1 quanto o KVM2 têm as regras abaixo configuradas (abaixo estão as regras completas da forma como aparecem na minha caixa):
Na tabela padrão, configurei o encaminhamento para a rede do 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
Na tabela NAT configurei o encaminhamento de porta em PREROUTING e MASQUERADE todos os pacotes deixando a interface virtual do 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
Com as regras acima, o KVM1 pode falar com o servidor em execução no KVM2, mas não com o servidor sendo executado nele mesmo. Isso é por causa da regra PREROUTING acima que nega qualquer pacote de origem com o endereço do KVM.
Se eu alterar a regra PREROUTING acima para:
Chain PREROUTING (policy ACCEPT)
target prot opt source destination
DNAT tcp -- anywhere anywhere tcp dpt:x11 to:10.10.100.128:6000
Nesse caso, o problema é novo. Qualquer solicitação do KVM1 para o KVM2 é roteada internamente de volta para o KVM1!
Tags networking iptables firewall kvm nat