Problema com roteamento em Tunel de VPN - IPSEC



  • Olá Galera, estou passando por um problema de díficil solução, na verdade a solução deve até ser fácil, o que está faltando para mim é o correto entendimento do problema e e daestrutura de funcionamento do IPSec dentro do pfSense.

    Espero que alguém da lista possa pelo menos me dar uma luz de onde procurar pois já estou a 3 dias quebrando a cabeça e ainda não resolvi.

    Vamos as informações relativas ao problema.

    pfSense 2.0 - Final

    Tunel de VPN IPSEC, configurado e com status ok

    O problema é o seguinte, tenho que estabelecer uma VPN com um parceiro comercial da empresa. Essa VPN tem que obrigatoriamente estabelecer a comunicação entre 2 redes 10.15.0.0/16 na ponta remota e a rede 172.45.130.8/30 na minha ponta.

    O parceiro vai acessar remotamente os IP's 172.45.130.9 e 172.45.130.10.

    O caso é que não uso essa rede nas minhas interfaces de firewall, minha rede interna é 10.1.1.0/24 então criei o tunel de VPN configurando do meu lado a rede 172.45 e do lado do parceiro a rede 10.15.

    Como não uso essa rede 172.45 do meu lado, criei os 2 ip's virtuais que o parceiro precisa acessar na minha interface de rede local e criei 2 regras de NAT 1:1 na interface de rede ipsec apontando cada um desses 2 ips para os equipamentos que o parceiro tera que acessar na minha rede.

    O que acontece é que o pacote vem da rede do parceiro, faz o NAT corretamente na interface ipsec e é redirecionado para o equipamento correto, porém a resposta do equipamento volta até o pfsense e fica totalmente perdida!!!

    Imaginei que pudesse ser algum problema ainda com o túnel de VPN pois do outro lado não é um pfSense mas um concentrador de VPN da Cisco. Entretanto criei uma outra VPN com outro servidor pfSense 2.0 final e consegui reproduzir exatamente o mesmo problema.

    Se na hora de configurar a VPN eu ao invés de especificar essa rede 172.45, configuro a minha subnet local, consigo trafegar os dados sem problema nenhum entre as 2 redes distintas, porém se volto a especificar essa rede 172.45 a comunicação simplesmente começa a funcionar em um único sentido do tunel, todos os pacotes chegam até a minha empresa mas não conseguem voltar.

    Criei uma regra any to any em cada interface do firewall, inclusive a ipsec para ver se era problema de firewall mas mesmo assim o pacote sai mas não consegue voltar.

    Tentei até fazer um nat de saída do firewall na interface da rede local, para que as requisições do tunel batessem nos equipamentos da minha rede interna como se fossem o próprio firewall e mesmo assim não tenho o retorno da informação.

    O principal problema é que não é possível que o parceiro utilize a minha rede diretamente, tem que ser utilizado essa bendita rede 172.45. e esse problema só acontece com o pfSense, pois antes era usado como firewall um servidor Linux no mesmo esquema e a VPN funcionava perfeitamente.

    Espero que algum de vocês tenha alguma dica ou explicação para o que posso estar fazendo de errado nesse caso.

    Abraço a todos e bom ano novo!!



  • Uma pequena dúvida antes de começar a queimar neurônios, você sabe que a rede 172.45 esta fora da faixa privada? 172.16.0.0/12 vai de 172.16 ate 172.32.

    Agora em termos práticos, força um outbound nat para a comunicação originada pelo cliente saia com o ip 172.45 ate o seu host 10.1.1.x.



  • Olá Marcelo tudo bem?

    Na verdade sei sim que essa rede está fora da faixa privada, mas é determinação da empresa parceira e não tenho com mudar.

    Eu pensei em fazer o outbound nat da maneira que você disse, mas não tenho como especificar a interface de saída dos pacotes visto que eles saem pela interface ipsec.

    Estava pensando sobre o problema, será que isso não é algum rolo de roteamento dentro do pfSense/FreeBSD??

    Você sabe qual é o fluxo dos pacotes dentro do kernel do BSD quando chegam a partir da VPN??



  • A empresa remota acessa o seus dois servidores, certo?

    Então o fluxo que entendi foi esse: empresa -> IPSec -> seu firewall-> 172.x virtual -> nat -> seus dois servidores.

    Desta forma o outbound nat vai funcionar.



  • Isso mesmo marcelo, na verdade a empresa precisa acessar 2 equipamentos para fazer monitoria de dados.

    O fluxo que você desenhou é exatamente esse, o 172.x virtual está na interface de rede local (tenho 3 neste firewall, 1 local, 1 internet e 1 DMZ).

    E foi exatamente essa configuração que fiz, porém tem 2 nats de entrada 1:1 jogando do ip 172 virtual para o ip local dos equipamentos na minha rede (10.1.1.0)

    Dessa maneira o tráfego chega até o equipamento porém o pacote não volta!! E estes equipamentos são totalmente passivos, ou seja eles nunca iniciam conexão nenhuma para a rede da outra empresa.

    Mesmo colocando um outbound nat para que tudo que saia do firewall para a rede local vá com o endereço local do firewall, mesmo assim o pacote chega até o equipamento mas não volta nem a pau a conexão.

    Fiz um teste redirecionando para um servidor linux e executei o iptraf no mesmo. Neste servidor eu recebo a conexão do ip local do firewall ou do ip remoto da VPN se estiver com o outbound para minha rede local desligado, e ele responde o pacote. Fico com os bits S..A. ativos apenas!!

    Não entendo que deveria fazer um nat de saída de minha rede local para a conexão de VPN, visto que o firewall é o gateway da rede e quando o pacote chegar nele ele, que já conhece as rotas todas inclusive a da VPN, deveria encaminhar os pacotes para o túnel corretament, e como existe o NAT de entrada o pacote de resposta será "desnateado" antes de ser encaminhado para a empresa parceira.

    Fiz o teste com o NAT-T do ipsec ativo e desligado e os problemas foram exatamente os mesmos!!

    O pacote de resposta depois que bate no firewall simplesmente se perde. Já fiz uma regra liberando toda a comunicação entre todos as redes para ter certeza e não resolveu!!!

    Veja se imagina algum problema aí e se precisar de mais informações me avise ok!

    Abraços!



  • Via tcpdump na console, você consegue ver para onde vai um ping para um dos ips da empresa a partir de um dos seus dois servidores ?



  • Essa é a resposta que tive, quando o pacote volta, o mesmo está querendo ser roteado diretamente para a rede sem sair como o ip 172.x.x.x

    11:26:29.513032 IP (tos 0x0, ttl 64, id 28572, offset 0, flags [none], proto ICMP (1), length 100)
        10.1.1.2 > 10.18.31.252: ICMP echo reply, id 1, seq 44763, length 80



  • 11:26:29.513032 IP (tos 0x0, ttl 64, id 28572, offset 0, flags [none], proto ICMP (1), length 100)
       10.1.1.2 > 10.18.31.252: ICMP echo reply, id 1, seq 44763, length 80

    10.18 é o ip de um de seus servidores?

    tenta acertar o acesso de tal forma que voce tenha pacotes neste padrão

    entendendo que 10.1.1.2 é o ip da empresa remota e 172.45.0.10 é um dos ips virutais do seu firewall

    na interface ipsec o tcpdump mostra: 10.1.1.2 > 172.45.0.10

    e na lan o pacote sai desta forma 172.45.0.10 > 10.18.31.252



  • Não marcelo, você entendeu ao contrário!

    10.1.1.2 é o ip do equipamento que será monitorado na minha rede local

    172.45.0.10 é o ip virtual que meu firewall deveria responder e encaminhar para o ip 10.1.1.2

    já o ip 10.18.31.252 é o ip da empresa remota que fará o monitoramento!

    Na interface ipsec o tcpdump mostra o seguinte:

    12:55:32.559121 (authentic,confidential): SPI 0x091b13c0: IP (tos 0x0, ttl 125, id 51748, offset 0, flags [none], proto ICMP (1), length 60)
        10.18.31.252 > 172.45.0.10: ICMP echo request, id 43542, seq 32514, length 40

    Na interface em0 (rede local) mostra o seguinte
    10.18.31.252 > 10.1.1.2: ICMP echo request, id 43542, seq 34306, length 40
        10.1.1.2 > 10.18.31.252: ICMP echo reply, id 43542, seq 34306, length 40

    o problema é que o pacote com destino a rede 10.18.31.252 não é injetado no túnel ipsec quando volta da minha rede.

    Verifiquei a minha tabela de roteamento e não existe nenhuma rota para a rede 10.18.0.0 declarada isso é normal no ipsec??

    Outra coisa no final o ipsec informa que x pacotes foram recebidos pelo filtro e 0 foram dropados pelo kernel!

    E o principal, se na vpn declarar ao invés desses ips 172 a minha rede local 10.1.1.0/24 a VPN vai beleza sem problema nenhum, porém não posso deixar de usar esses benditos ips!!!

    Será que se criar uma interface de rede exclusiva para isso não resolveria o problema?? Tipo, adiciono uma nova placa de rede e dou o ip 172.45.0.10 para ela e coloco o ip .11 como alias dessa interface. Será que daí não vai??



  • Na configuração do ipsec(pelo menos na versão 1.2.3), voce informava a rede remota.

    Você consegue encontrar esta configuração no setup do seu ipsec?



  • Sim, a configuração da rede local e remota esta na fase 2 do túnel.

    No caso eu configurei a rede remota como 10.18.0.0/16 e a rede local como 172.45.0.0/24.



  • Consegue fazer o teste do tcpdump + nat como te falei?



  • Não entendi exatamente como quer que eu teste!

    a interface da rede local é em0, a da internet é a em2 e a vpn enc0

    Qual a sintaxe que você quer que eu use no pfsense!



  • Então Marcelo, eu pesquisei um pouco mais e acho que sei onde o problema pode estar acontecendo.

    Parece que o racoon (Ipsec) não se dá muito bem quando tem NAT envolvido no meio da rede.

    Eu ainda não decobri muito bem a lógica do fluxo de pacotes mas com certeza isso tem a ver.

    Outra coisa, parece que com o Racoon terei que criar políticas (SPD) para dizer qual tráfego deverá ser encriptado e qual não. Quanto ativo a VPN ela cria o tráfego apenas para a rede 172.45.x.x mas não permite a entrada do tráfego proveniente da rede 10.1.1 neste mesmo túnel.

    Posso estar enganado mas acredito que a resposta está por aí. Espero ter ajudado também a você entender melhor o meu problema!!

    Abraços!!!



  • É exatamente isto que estou tentando te falar, se não quiser tentar por nat, instale o haproxy e configure todos os serviços que você precisa disponibilizar para a rede remota no ip 172.45.0.10.

    O resultado via tcpdump precisa ficar assim:

    tcpdump -ni enc0
    10.18.31.252 -> 172.45.0.10
    172.45.0.10 -> 10.18.31.252

    tcpdump -ni em0 host 10.1.1.2 or host 172.45.0.10 or host 10.18.31.252
    172.45.0.10 -> 10.1.1.2
    10.1.1.2 -> 172.45.0.10



  • Oá Marcelo, provisoriamente fiz o seguinte, adicionei uma nova interface no firewall e configurei com o ip 172.45 nela, um dos 2 que a empresa passou, o outro ip coloquei como adicional em um servidor linux que tinha também, daí faço o nat direto nele para o equipamento.

    Porém como só tenho 2 ips nessa rede que foi fornecida (mascara final 252) só tenho agora 1 equipamento mnitorado. Estou tentando verificar se consigo uma rede com mascara final 248, daí posso colocar um ip direto no firewall e troco o ip dos equipamentos para essa faixa de rede.

    Como isso não é a melhor solução e não sei se conseguirei mais ips eu estou tentando ativar o HAProxy, consegui configurar ele sem dificuldades, porém surgiu uma dúvida, na configuração do front end na lista de interfaces ele só me dá a opção interface address ou any, e não me deixa escolher a interface com o ip 172.45.

    Tenho que fazer alguma configuração anterior para conseguir selecionar a interface 172 no HAProxy frontend???

    Abraços!!

    E Caso não nos falemos mais um ótimo ano novo para você e seus familiares!!!

    E para todo o pessoal do fórum também!! Abraços a todos!


Locked