[FUG-BR] Packet loss com Layer2

Patrick Tracanelli eksffa em freebsdbrasil.com.br
Quinta Janeiro 7 11:59:51 BRST 2010


Danilo Egea escreveu:
> On 01/07/10 11:13, Renata Dias wrote:
>> Oi Nilson,
>>
>> 1) Mesmas regras de firewall, fiz o backup de uma maquina pra outra.
>> 2) Mesmo trafego de rede, pois só troquei o servidor antigo pelo novo.. a
>> rede é a mesma.
>> 3) A WAN é ligada direto com a EBT e a LAN é onde está o switch e os
>> clientes.
>> 4) Não.
>>
>> Quanto a configuração de hardware... eu troquei um Desk Server Quad Core por
>> esse servidor HP Proliant ML350 G6 !
>> A placa da WAN é uma Intel(R) PRO/1000 e a LAN é a onboard do servidor (HP
>> NC326i Dual Port PCI-E Gigabit).... não é realtek.
>>
>> Meu questionamento é se as regras da forma como enviei abaixo causariam
>> alguma perda de informação no meu caso que faço o controle de banda dos
>> clientes por este servidor.
>>
>> Com a regra "allow ip from any to any layer2" os clientes voltam a responder
>> com 0ms e 0% de perdas... como se a sysctl net.link.ether.ipfw estivesse
>> desativada...
>>
>> Obrigada.
>>
>> 2010/1/7 Nilson<nilson em forge.com.br>
>>
>>    
>>> 2010/1/6 Renata Dias<renatchinha em gmail.com>:
>>>      
>>>> Certo, mas eu tinha esse mesmo sistema (router, ipfw e layer2) em um
>>>>        
>>> outro
>>>      
>>>> servidor i386. Quando reinstalei nesse amd64 me deparei com essas perdas.
>>>>        
>>> Creio que o fato de ser AMD64 nao muda nada, então lhe pergunto:
>>> 1) Eram as mesmas regras de firewall? (com pequenas mudanças...)
>>> 2) O trafego na rede era semelhante?
>>> 3) Ambos as redes usam SWITCHES?
>>> 4) Sua interface LAN está em modo promisquo?
>>>
>>>
>>>      
>>>> Como eu não faço o controle de MAC de meus clientes por este servidor,
>>>> talvez eu possa modificar meu firewall para que fique da seguinte forma:
>>>>
>>>> 1550 allow layer2 not mac-type ip // Libera todos os frames que não forem
>>>>        
>>> do
>>>      
>>>> tipo IP
>>>> 1607 deny log all from any to any in via bge0 MAC any 00:12:17:34:eb:a0
>>>> layer2 // Bloqueia esse MAC indesejado
>>>> 1608 deny log all from any to any in via bge0 MAC any 00:12:0e:a1:38:47
>>>> layer2 // Bloqueia esse MAC indesejado
>>>> 1650 allow layer2 // Libera tudo que for layer2 - seria a mesma coisa de
>>>>        
>>> não
>>>      
>>>> ter o net.link.ether.ipfw ativado, correto??
>>>>
>>>>
>>>> // Controle de banda dos clientes como está atualmente
>>>> // Cliente 1
>>>> 20040 pipe 20040 ip from any to 200.200.200.243 out via bge0 not layer2
>>>> 20041 pipe 20041 ip from 200.200.200.243 to any in via bge0 not layer2
>>>> 20045 allow ip from any to 200.200.200.243
>>>> 20046 allow ip from 200.200.200.243 to any
>>>>
>>>> Ou então, como ja liberei layer2 na regra 1650 é lógico que só sobrou
>>>> pacotes "not layer2", então poderia ficar assim tbm:
>>>>
>>>> // Cliente 1
>>>> 20040 pipe 20040 ip from any to 200.200.200.243 out via bge0
>>>> 20041 pipe 20041 ip from 200.200.200.243 to any in via bge0
>>>> 20045 allow ip from any to 200.200.200.243
>>>> 20046 allow ip from 200.200.200.243 to any
>>>>
>>>>
>>>> Alguém discorda do meu raciocínio? Será que dessa forma eu vou prejudicar
>>>>        
>>> a
>>>      
>>>> rede de alguma forma? O controle de banda nas regras pipe sofrerão alguma
>>>> deficiencia? A banda será controlada corretamente?
>>>>
>>>>        
>>> Dados insuficientes para uma afirmação conclusiva, mas olhando
>>> apenas esses pedaços do firewall que nos enviaste, eu fico
>>> tensionado a discordar.
>>>
>>> Existem varias formas de desenhar um firewall e em geral
>>> em pequenas redes isso pouco importa em termos de
>>> performance, pois o hardware que você estará usando como
>>> router (aquele PC velhinho que ninguem mais queria usar
>>> na empresa) é muito poderoso com FreeBSD, e dá
>>> conta com sobra para tratar aqueles 100 packets por
>>> segundo num link de uns 2Mbps.
>>>
>>> Mas quando você tem um trafego alto, torna-se evidente
>>> que o design vai fazer diferença e terás que usar hardware
>>> adequado para dar conta do recado.
>>>
>>> Quanto ao hardware, um detalhe da sua configuração me
>>> chamou a atenção e lhe sugiro uma troca: inverter as
>>> interfaces de rede, pois você está usando uma Broadcom
>>> (muito boa) para a rede roteável, onde o trafego é
>>> muito menor e sem lixo ARP, enquanto usas uma realtek
>>> (muito ruim) para a rede interna onde em relação a iface
>>> externa o trafego deve ser mais que o dobro, com todo
>>> aquele lixo ARP, broadcasts, netbios, virus, muitos
>>> pacotes que serão bloqueados no firewall, e talvez
>>> um proxy com cache.
>>>
>>> Bom, continuando com o firewall, tens que lembrar
>>> que como você faz NAT, todos os pacotes (não todos,
>>> tem aqueles que foram bloqueados e tals, mas vou
>>> generalizar pra simplificar a história) IP tem que
>>> passar pelo firewall 2 vezes: quando ele chega
>>> pela LAN (in) e quando ele está saindo para a
>>> WAN (out). Quando você habilita a camada 2 no fw,
>>> cada pacote passa 4 vezes pelo seu ipfw:
>>> L2 (in) ->  L3 (in) ->  **NAT** ->  L3 (out) ->  L2 (out)
>>>
>>> Partindo desse ponto de vista, nos meus firewalls
>>> (principalmente nos HEAVYs) gosto de dividir as
>>> checagens de cada tipo de trafego em blocos
>>> separados, fazendo com que os pacotes sejam
>>> checkados apenas pelas regras que lhes são
>>> pertinentes, e não por todas as regras existentes,
>>> segue um exemplo simples para lhe dar uma boa
>>> idéia disso que falei:
>>>
>>> # INICIO, REGRAS GERAIS QUE VC QUEIRA,
>>> # E OS "DIVISORES":
>>> ipfw blablabla...
>>> ipfw blablabla...
>>> ipfw blablabla...
>>>
>>> # DIVISORES:
>>> # pacotes entrando L2
>>> ipfw add 2001 skipto 10000 all from any to any layer2 in
>>>
>>> # pacotes entrando L3
>>> ipfw add 2002 skipto 20000 all from any to any not layer2 in
>>>
>>> # pacotes saindo L3
>>> ipfw add 2003 skipto 30000 all from any to any not layer2 out
>>>
>>> # pacotes saindo L2
>>> ipfw add 2004 skipto 40000 all from any to any layer2 out
>>>
>>> # se algo não bateu em nenhuma dessas, kill it!
>>> ipfw add 2005 deny all from any to any
>>>
>>> # 10.000 ->  trate a partir daqui suas regras de L2 in,
>>> # e entao mande pro final do firewall
>>> ipfw add 10000 blablabla...
>>> ipfw add skipto 65000 all from any to any
>>>
>>> # 20.000 ->  trate a partir daqui suas regras de L3 in, e skito final
>>> ipfw add 20000 blablabla...
>>> ipfw add skipto 65000 all from any to any
>>>
>>> # e assim por diante até que finalmente:
>>>
>>> ipfw add 65000 allow all from any to any
>>>
>>> --------------------------
>>>
>>> Isso foi apenas um exemplo, dependendo da sua
>>> necessidade ou imaginação você poderia subdividi-lo
>>> muito mais, como fazer essa mesma divisao por interfaces,
>>> um bloco exclusivo para os pipes (dummynet), e o que
>>> mais você quiser inventar.
>>>
>>> []s
>>> Nilson
>>>   -------------------------
>>> Histórico: http://www.fug.com.br/historico/html/freebsd/
>>> Sair da lista: https://www.fug.com.br/mailman/listinfo/freebsd
>>>
>>>      
>>
>>    
> Olá Renata,
> 
> será que a causa do problema não é a frequência do timer que você 
> definiu em 2000Hz?
> A MAN do dummynet recomenda fortemente usar hz=1000...
> 
> ignore se falei besteira :D
> 
> abraços...
> 

Renata, alguma outra regra esta causando essa latencia. Normalmente
regras de pipe, divert, queue, count com keep-state, altq, netgraph,
ngtee, são os principais candidatos a merecer um "not layer2" ja que
voce so precisa filtrar isso em camada 3 ou superior. Fora essas avalie
o restante do seu firewall, provavelmente tem alguma outra regra que
merece um "not layer2" por ai.



-- 
Patrick Tracanelli

FreeBSD Brasil LTDA.
Tel.: (31) 3516-0800
316601 em sip.freebsdbrasil.com.br
http://www.freebsdbrasil.com.br
"Long live Hanin Elias, Kim Deal!"



Mais detalhes sobre a lista de discussão freebsd