AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / server / Perguntas / 842619
Accepted
Josh
Josh
Asked: 2017-04-05 16:07:12 +0800 CST2017-04-05 16:07:12 +0800 CST 2017-04-05 16:07:12 +0800 CST

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

  • 772

Tenho duas redes NAT conectadas através 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 ligado eth0e um IP privado 10.110.1.1ligado vmbr0e está conectada à Internet por meio de uma VPN ptp com a Máquina B, que tem um IP público ligado en0e um IP privado ligado en1(e várias outras redes privadas)

Existem clientes em ambas as LANs usando 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 forma que a Máquina A possa executar ping no IP privado da Máquina B 10.100.1.1 e 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) podem acessar a Máquina A e todos os hosts na Rede A10.110.1.0/16

No entanto, os hosts na rede A não podem estabelecer conexões com os hosts na rede B (por exemplo 10.110.1.2, não podem fazer ping nem SSH para 10.100.10.50)

Eu suspeito que isso tenha algo a ver com a configuração do iptables em A, porque o SSH de 10.100.10.50 para 10.110.1.2funciona, mas não consigo fazer o SSH na direção reversa. Isso me diz que minha regra iptables FILTER RELATED,ESTABLISHEDfunciona, mas de alguma forma eu suspeito que a máquina A está tentando NAT e usar eth0para novas conexões.

Adicionei regras do iptables em todos os lugares que pensei ACCEPT destination 10.100.0.0/16que eram necessários e, mesmo em lugares que não pensei que fossem necessários quando as coisas não funcionavam e ainda não consigo obter conexões de saída da rede A para a rede B funcionando.

Como posso conectar corretamente duas redes privadas com NAT por meio 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  
iptables
  • 1 1 respostas
  • 2044 Views

1 respostas

  • Voted
  1. Best Answer
    Josh
    2017-04-06T08:07:33+08:002017-04-06T08:07:33+08:00

    Entããão, isso foi um erro estúpido da minha parte! Tudo na Máquina A foi configurado corretamente, na verdade foram 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.2mas faltava a regra que permitia o tráfego de 10.110.1.0/24. Adicionar essa regra corrigiu o problema.


    Eu descobri o problema usando tcpdumpe ncda seguinte forma:

    1. Em 10.100.10.50, executei nc -kl 60321para ouvir conexões na porta 60321 (escolhi uma porta aleatória que sabia que não era usada pelos serviços que executamos para minimizar o ruído em tcpdump)
    2. Nas máquinas A e BI executadas tcpdump -s0 -X -i $dev port 60321onde defini $devas interfaces das redes NAT'ed ( vmbr0ou vmx0) ou as interfaces ptp ( tun0)
    3. Em 10.110.1.2enviei dados para 10.100.10.50usando:echo -e "test1\ntest2\ntest3" | nc 10.100.10.50 60321
    4. Eu vi o tráfego na LAN da Máquina A, tanto na tun0interface da Máquina A quanto da B, mas não na LAN da Máquina B, então isso significava que o problema era com o roteamento/firewall na Máquina B
    5. Eu facepalmed e adicionei a regra de firewall ausente
    • 1

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Você pode passar usuário/passar para autenticação básica HTTP em parâmetros de URL?

    • 5 respostas
  • Marko Smith

    Ping uma porta específica

    • 18 respostas
  • Marko Smith

    Verifique se a porta está aberta ou fechada em um servidor Linux?

    • 7 respostas
  • Marko Smith

    Como automatizar o login SSH com senha?

    • 10 respostas
  • Marko Smith

    Como posso dizer ao Git para Windows onde encontrar minha chave RSA privada?

    • 30 respostas
  • Marko Smith

    Qual é o nome de usuário/senha de superusuário padrão para postgres após uma nova instalação?

    • 5 respostas
  • Marko Smith

    Qual porta o SFTP usa?

    • 6 respostas
  • Marko Smith

    Linha de comando para listar usuários em um grupo do Windows Active Directory?

    • 9 respostas
  • Marko Smith

    O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL?

    • 3 respostas
  • Marko Smith

    Como determinar se uma variável bash está vazia?

    • 15 respostas
  • Martin Hope
    Davie Ping uma porta específica 2009-10-09 01:57:50 +0800 CST
  • Martin Hope
    kernel O scp pode copiar diretórios recursivamente? 2011-04-29 20:24:45 +0800 CST
  • Martin Hope
    Robert ssh retorna "Proprietário incorreto ou permissões em ~/.ssh/config" 2011-03-30 10:15:48 +0800 CST
  • Martin Hope
    Eonil Como automatizar o login SSH com senha? 2011-03-02 03:07:12 +0800 CST
  • Martin Hope
    gunwin Como lidar com um servidor comprometido? 2011-01-03 13:31:27 +0800 CST
  • Martin Hope
    Tom Feiner Como posso classificar a saída du -h por tamanho 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich O que é um arquivo Pem e como ele difere de outros formatos de arquivo de chave gerada pelo OpenSSL? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent Como determinar se uma variável bash está vazia? 2009-05-13 09:54:48 +0800 CST

Hot tag

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve