Como posso permitir que o iptables use corretamente um túnel em vez de NAT?

3

Eu tenho duas redes NAT conectadas por meio de um túnel ponto-a-ponto da seguinte forma:

  | Machine A  |                                         | Machine B  |
  | 1.2.3.4    |<-10.101.3.2-------tun------10.101.3.1-> | 4.5.6.7    |
  | 10.110.0.1 |                                         | 10.100.1.1 |
  -----+--------                                         --------+-----
       |                                                         |
 [ 10.110.1.0/24 net ]                                   [ 10.100.0.0/16 net]

A máquina A tem um IP público em eth0 e um IP privado 10.110.1.1 em vmbr0 e está conectado pela Internet através de uma VPN ptp com a Máquina B, que tem um IP público em en0 e IP privado em en1 (e várias outras redes privadas)

Existem clientes em ambas as LANs usando o NAT com dois IPs públicos. Isso funciona bem. (É feito usando iptables na máquina A e pfSense na máquina B)

O roteamento é configurado de tal forma que a Máquina A pode efetuar o ping do IP privado da máquina B 10.100.1.1 e pode acessar todos os hosts na rede B 10.100.0.0/16 . Da mesma forma, a Máquina B (e todos os hosts na rede B) pode acessar a Máquina A e todos os hosts na Rede A 10.110.1.0/16

No entanto, os hosts na Rede A não podem estabelecer conexões com hosts na rede B (E.G. 10.110.1.2 não pode fazer ping nem SSH para 10.100.10.50 )

Eu suspeito isso tem algo a ver com a configuração do iptables em A, porque o SSH de 10.100.10.50 to 10.110.1.2 funciona, mas não consigo SSH em a direção inversa. Isso me diz que minha regra FILTER iptables para RELATED,ESTABLISHED funciona, mas de alguma forma eu suspeito que a máquina A está tentando NAT e use eth0 para novas conexões.

Eu adicionei ACCEPT destination 10.100.0.0/16 iptables regras em todos os lugares que eu achei que precisavam, e então, mesmo em lugares que eu não achei que eles eram necessários quando as coisas não funcionavam, e ainda não consegui conexões de saída da rede A para a rede B em funcionamento.

Como posso conectar corretamente duas redes privadas NAT através de um túnel ponto-a-ponto usando o iptables?

Informação adicional:

iptables na máquina A:

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             10.100.0.0/16       
DNAT       tcp  --  anywhere             anywhere             tcp dpt:http to:10.110.1.3:80
DNAT       tcp  --  anywhere             anywhere             tcp dpt:https to:10.110.1.3:443
DNAT       tcp  --  anywhere             anywhere             tcp dpt:xmpp-client to:10.110.1.4:5222
DNAT       tcp  --  anywhere             anywhere             tcp dpt:5281 to:10.110.1.4:5281
DNAT       tcp  --  anywhere             anywhere             tcp dpt:64738 to:10.110.1.4:64738
DNAT       udp  --  anywhere             anywhere             udp dpt:64738 to:10.110.1.4:64738
DNAT       udp  --  anywhere             anywhere             udp multiport dports isakmp,ipsec-nat-t to:10.110.1.10:1194

Chain INPUT (policy ACCEPT)
target     prot opt source               destination         

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

Chain POSTROUTING (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             10.100.0.0/16       
ACCEPT     all  --  anywhere             10.101.0.0/16       
MASQUERADE  all  --  10.110.1.0/24        anywhere            
MASQUERADE  all  --  10.110.1.0/24        anywhere            
MASQUERADE  all  --  10.110.1.0/24        anywhere  
    
por Josh 05.04.2017 / 02:07

1 resposta

1

Então, esse foi um erro insensato do meu jeito! Tudo na Máquina A estava configurado corretamente, era na verdade as regras de firewall da Máquina B bloqueando isso. A máquina B tinha uma regra que permitia o tráfego de 10.101.3.2 , mas estava ausente da regra, permitindo o tráfego de 10.110.1.0/24 . A adição dessa regra corrigiu o problema.

Descobri o problema usando tcpdump e nc da seguinte forma:

  1. Em 10.100.10.50 , executei nc -kl 60321 para escutar conexões na porta 60321 (escolhi uma porta aleatória que eu sabia que não era usada pelos serviços que executamos para minimizar o ruído em tcpdump )
  2. Nas máquinas A e B, executei tcpdump -s0 -X -i $dev port 60321 , em que defino $dev para as interfaces das redes NAT ( vmbr0 ou vmx0 ) ou para as interfaces p-t-p ( tun0 )
  3. Em 10.110.1.2 enviei dados para 10.100.10.50 usando: echo -e "test1\ntest2\ntest3" | nc 10.100.10.50 60321
  4. Vi o tráfego na LAN da máquina A, a máquina A e a interface tun0 de B, mas não na LAN da máquina B, o que significava que o problema era com roteamento / firewall na máquina B
  5. eu fiz o facepalmed e adicionei a regra de firewall ausente
por 05.04.2017 / 18:07