[FUG-BR] ajuda com FIB´s + PF

Wanderson Tinti wanderson em bsd.com.br
Domingo Novembro 15 16:31:27 BRST 2009


2009/11/12 Cleyton Bertolim <cbertolim em gmail.com>

> Pessoal, estou quebrando a cabeca aqui com FIB´s.....
> Tenho dois link´s internet, um GVT e outro VIRTUA, e estou tentando
> fazer funcionar a rota para os dois link´s com FIB mas nao esta dando
> certo. Nao sei onde estou errando... Ja procurei um monte na net
> tambem e nada....
>
> As maquinas da rede, quando saem pelo squid para a internet, saem
> todas usando o gateway 10.0.0.1, que é o GVT, e quando eu desligo esse
> link cai tudo, as maquinas nao saem pelo link da Net Virtua, que é o
> gateway 172.16.0.1.
>
> Se alguem puder dar uma luz....indicar onde estou errando.... eu
> agradeco!!!!
>
>
>
> -------------------------
> Histórico: http://www.fug.com.br/historico/html/freebsd/
> Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd
>

Cleyton, Boa tarde.

Se você utilizar o Proxy Squid nesse servidor você terá problemas. O Squid
vai querer sair sempre pela rota default. Para testar e analisar o
funcionamento, primeiro desabilite o Squid e trabalhe somente com as regras
de Filtros e Nat. Logo, análise a saídas dos pacotes usando o pftop
(pressione o número 1 para ver por qual gateway as requisições estão
saindo), depois configure o Squid em outro servidor. Se você não tiver outra
maquina disponível você pode querer usar a opção tcp_outgoing_address.

Cheguei a fazer alguns testes simples usando a tabela FIB com PF. Para
escolher por qual tabela FIB os pacotes vai sair, usei a opção rtable <N>.
Era visível que as maquina da rede interna (10.0.200.0/24 (Porta 80 e 443))
saia pelo gateway (192.168.168.253), que é o link2. Depois fiz um teste com
o SSH saindo pelo link1, até aí tava funcionado. Parei de testar e acabei
esquecendo disso.

Dei uma vasculhada e achei as regras, veja:

#/etc/pf.conf
ext_if1="le0"
ext_if2="le2"
int_if1="le1"
local_net="10.0.200.0/24"

wwwport="{80, 443}"
dnsport="{53}"
ftpport="{20, 21}"

set skip on lo0
scrub in all

nat on $ext_if1 proto tcp from $int_if1:network to any -> $ext_if1
nat on $ext_if2 proto tcp from $int_if1:network to any -> $ext_if2

block in all
block out all

pass in quick on lo0
pass out quick on lo0

pass out on $int_if1 from any to $local_net
pass in quick on $int_if1 from $local_net to $int_if1

pass in quick on $int_if1 inet proto tcp from $local_net to any port
$wwwport keep state rtable 1
pass in quick on $int_if1 inet proto udp from $local_net to any port
$dnsport keep state rtable 1
pass in quick on $int_if1 inet proto icmp from $local_net to any keep state
pass in quick on $int_if1 inet proto tcp from $local_net to any port 22 keep
state rtable 0

pass out quick on $ext_if2 inet proto tcp from $local_net to any port
$wwwport keep state rtable 1
pass out quick on $ext_if2 inet proto udp from $local_net to any port
$dnsport keep state rtable 1
pass out quick on $ext_if2 inet proto icmp from $local_net to any keep state
rtable 1
pass out quick on $ext_if1 inet proto tcp from $local_net to any port 22
keep state rtable 0

pass out on $ext_if1 proto tcp from any to any keep state rtable 0
pass out on $ext_if2 proto tcp from any to any keep state rtable 1
pass out on $ext_if1 proto { udp, icmp } from any to any keep state rtable 0
pass out on $ext_if2 proto { udp, icmp } from any to any keep state rtable 1


#setfib 0 route add default 192.168.254.254
#setfib 1 route add default 192.168.168.253

#setfib 0 traceroute 4.2.2.1
#setfib 1 traceroute 4.2.2.1

#pfctl -F all && pfctl -nf /etc/pf.conf && pfctl -NRef /etc/pf.conf

Rede Lan
End: 10.0.200.0/24
GW: 10.0.200.1
DNS:10.0.200.1

#tcpdump -i le0 -v -p tcp
#tcpdump -i le2 -v -p tcp


Faças os testes necessários e poste na lista o resultado, vai ajudar muito.

Bom final de semana para todos!


Atenciosamente
Wanderson Tinti


Mais detalhes sobre a lista de discussão freebsd