[FUG-BR] PF e roteamendo VPN

Nilson nilson em forge.com.br
Quinta Abril 8 02:52:52 BRT 2010


Em 7 de abril de 2010 14:28, Leandro Keffer <keffer666 at gmail.com> escreveu:
> Opa meu caro, claro que nao ofenede, mas nao é isso que quero nao

Entao Leando, tens algumas formas de fazer isso, vou dar minha ideia do
que acredito ser o mais correto.

> Tipo, tenho uma lan (192.168.0.0/24) e dois servidores com um link cada
> Cada servidor desse tem uma VPN independente
>
> Porem dentro da LAN se uso o GW do server1 por exemplo, acesso a VPN que
> esta nele normalmente

Vamos botar nomes, LAN1=192.168.0.0/24, GW1=192.168.0.254/24 (outro ip?),
SERVER1=192.168.0.254/24 (outro ip?), e temos que criar uma nova rede para
a VPN, digamos VPN1=10.250.250.1/24

> Agora preciso acessar as maquinas que estao na VPN do server2, utilizando o
> GW do server1

Voce quis dizer acessar as maquinas que estao na LAN do server 2, a
LAN2=192.168.0.0/24 ? Na minha opniao aqui esta o "erro todo" da ideia,
por ser a mesma rede logica LAN1 -> GW2=192.168.0.252/24 e SERVER2=GW2

> Utilizo FreeBSD e PF em ambos servidores, qual seria o caminho das pedras ?

Firewall nao vem muito ao caso nesse momento que eh de fazer
funcionar, depois vc aplica o firewall pra bloquear o tipo de
comunicacao que quiseres entre LAN1 e LAN2.

> Agradeço desde ja e qualquer coisa tento exemplicar melhor

Vamos la, a grande dificuldade esta sendo causada pelo fato de voce ter
duas LANs fisicamente distintas usando a mesma classe de enderecos, e
por isso nao tem como ser criada uma simples rota de IPs (o que trabalharia
apenas com o trafego da camada 3) pois quando uma maquina qualquer
M1=192.168.0.35/24 da LAN1 quer se comunicar com uma da LAN2 como por ex.
M2=192.168.0.176/24, o sub-systema de tcp/ip do proprio sistema operacional
vai dizer pro kernel usar uma camada abaixo: "a rede logica eh a mesma que a
nossa, manda o sub-systema ethernet descobrir quem eh M2 e mandar
esse trafego pra la", e esse sub-sys ether como ainda nao sabe quem
eh M2 (nao possui uma entrada ARP na tabela de MAC addresses), vai mandar
um broadcast ether pra ff:ff:ff:ff:ff:ff perguntando "WHO HAS 192.168.0.176",
e todas as maquinas do mesmo segmento fisico na LAN1 vao receber esse
pacotinho inclusive o GW1 que teria que repassar (proxy arp) esse broadc
arp pro outro lado do tunnel, atuando como se fosse uma BRIDGE e gerando
esse trafego extra. (Isso foi um exemplo de pacote, mas nao eh o unico
tipo de pacotinho que vai passar, existe muito lixao camada2 dos ARPs e
NetBIOSes da vida que vai tentar ir pro outro lado).

Voce pode resolver isso numa boa usando uma bridge, porem acho uma ma
solucao devido a esse trafego l2 que voce tera que arcar em cima do
link, ainda mais se for algo limitado e de baixa garantia como uma
ADSL residencial.

Pra resolver a treta toda bastaria que LAN2 fosse uma rede logicamente
diferente, como LAN2=192.168.100.0/24 ou talvez dividir a atual 192.168.0.0/24
em duas /25 => LAN1=192.168.0.0/25 (enderecos ate 127) e
LAN2=192.168.0.128/25 (com
o resto ate 255) e voce precisaria mudar o GW1 pra um IP da rede LAN1 tal
como 192.168.0.126.

Ai seria a ideia da simples rota:

no BSD GW1=192.168.0.126/25 com a VPN1=10.250.250.1 (route add $LAN2 $VPN2):
# route add 192.168.0.128/25 10.250.250.2


e no GW2=192.168.0.252/25 com a VPN2=10.250.250.2 (route add $LAN1 $VPN1):
# route add 192.168.0.0/25 10.250.250.1

Agora quando M1 (.35/25) quer se comunicar com M2 (176/25) o sys tcp/ip vendo
que eh outra rede resolve que esse pacote deve ser mandado pra frente, ou
seja pro seu default gateway GW1, que conhecendo a rota pra LAN2 manda
aquele mesmo pacotinho provindo da M1 para o seu tunnel VPN seja la qual
for, bastando existir o tunnel e gateway_enable.


Entendeu o conceito todo? Atende as necessidades?

Ficam aqui meus R$10 reaus da madrugada. hahahah

--
Nilson


Mais detalhes sobre a lista de discussão freebsd