[FUG-BR] RES: RES: Testando ipfw nat

Ricardo B. Volpato ricardobvolpato em yahoo.com.br
Quarta Agosto 19 16:31:07 BRT 2009


[FUG-BR] RES: RES: Testando ipfw natBom, tópico resurgindo depois de algum tempo inativo, mas vamos lá.
Instalei um FreeBSD 8 aqui na empresa para testes do NAT direto no IPFW e balanceamento de carga também no IPFW com a opção ROUTETABLES no kernel, o ambiente é o seguinte:
LAN=192.168.17.0/24     INT_IF=192.168.17.1    EXT_ADSL=192.168.28.2    EXT_ADSL2=192.168.29.2

                     ..---> ADSL (192.168.28.1)
                    /
LAN ------> FW
                    \
                     `---> ADSL2 (192.168.29.1)

Compilei no KERNEL as seguintes opções:
#cat /usr/src/sys/amd64/conf/FW
[...]
options IPFIREWALL
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=1000
options IPFIREWALL_DEFAULT_TO_ACCEPT
options IPFIREWALL_FORWARD
options IPFIREWALL_NAT # Aqui <E9> ativo o NAT no kernel
options LIBALIAS # Necess<E1>rio para o NAT
options IPDIVERT
options DUMMYNET
options HZ=1000
options ROUTETABLES=2
options        ALTQ
options        ALTQ_CBQ
options        ALTQ_RED
options        ALTQ_RIO
options        ALTQ_HFSC
options        ALTQ_CDNR
options        ALTQ_PRIQ
options        ALTQ_NOPCC

FreeBSD fw.xxx.com.br 8.0-BETA2 FreeBSD 8.0-BETA2 #3: Wed Aug 19 14:52:16 BRT 2009     ricardovolpato em fw.xxx.com.br:/usr/obj/usr/src/sys/FW  amd64

Fiz o nat pelo PF pois com o IPFW não obtive sucesso pelo seguinte motivo:
Somente com o kernel compilado sem nenhum tipo de NAT rodando e nenhum serviço instalado da maquina com o ip 192.168.17.2 eu conseguia pingar o IP 192.168.29.1 mas quando ativava o NAT do ipfw o modem adsl parava de responder, seguem as regras de nat, somente NAT:
setfib 0 route add default 192.168.28.1
setfib 1 route add default 192.168.29.1

ipfw nat 1 config if re0 same_ports unreg_only
ipfw add nat 1 all from rl0 to any out via re0
ipfw nat 2 config if rl1 same_ports unreg_only
ipfw add nat 2 all from rl0 to any out via rl1

Beleza, depois de ativar essas regras e algumas outras que tbm testei, não obtive sucesso com o NAT do IPFW, configurei alguma coisa errada? 
Parti então para o NAT com o PF mesmo.
As regras de NAT do PF estão corretas e são as seguintes:
nat on re0 from 192.168.17.0/24 to ! 192.168.17.0/24 -> 192.168.28.2
nat on rl1 from 192.168.17.0/24 to ! 192.168.17.0/24 -> 192.168.29.2

E no IPFW para balanceamento de carga as seguintes regras:

ipfw add 1000 set 1 prob 0.5 skipto 3000 all from any to any out                #Metade fica para fib0 e a outra metade vai para fib1 
ipfw add 2000 set 2 setfib 0 all from any to any out
ipfw add 2100 set 2 allow all from any to any out keep-state                    
ipfw add 3000 set 3 setfib 1 all from any to any out
ipfw add 3100 set 3 allow ip from any to any out keep-state

Beleza, depois de executar as regras de NAT do PF e de Balancemanto do IPFW, fui para os testes.
Naveguei normal, mas percebi que o trafego saia somente pela setfib0, tentei então excluir as regras 2000 e 2100 e alterei a regra 1000 para
ipfw add 1000 set 1 prob 1 allow all from any to any out
Após essas duas mudanças, não consegui mais navegar, percebi, através do comando ipfw show que o trafego está passando pelas regras.
Alguém pode me explicar porque isso acontece? O que posso estar fazendo de errado?
Li varios tutoriais na internet, até em Russo (huaehuae), mas nenhum deles tirou as minhas duvidas.
Espero que entendam o problema e que alguém tenha alguma sugestão para que eu coloque esse em ambiente em produção.

Eu sei que com o PF tem como fazer, mas o trabalho com IPFW a anos e tenho um outro firewall que pretendo fazer algumas alterações, (incluir mais um link) algo parecido com o ambiente ilustrado.
Se precisar de mais alguma coisa para entender o ambiente é só perguntar que envio.


From: Renato Frederick
Sent: Monday, December 29, 2008 9:23 PM
To: 'Lista Brasileira de Discussão sobre FreeBSD (FUG-BR)'
Subject: [FUG-BR] RES: RES: Testando ipfw nat


Assim que houver uma janela de tempo farei os testes!

Obrigado Luiz

>
> Sim Renato,
>
> No ipfw você tem a keyword setfib que faz com que o pacote seja roteado
> segunda a tabela que você definiu. Como cada tabela pode ter seu
> default
> gateway (e outras rotas especificas) acredito que você consiga sim
> fazer o
> PBR com essa solução.
>
> Só não sei dizer sobre as interações com o BGP, mas se você já faz com
> ipfw
> fwd, com certeza vai fazer com o setfib.
>
> Abraços,
> Luiz Otavio
>
> -------------------------
> Histórico: http://www.fug.com.br /historico/html/freebsd/
> Sair da lista: https://www.fug.com .br/mailman/listinfo/freebsd



Mais detalhes sobre a lista de discussão freebsd