[FUG-BR] openbgp travando quando crio uma vlan

Patrick Tracanelli eksffa em freebsdbrasil.com.br
Quarta Abril 16 17:11:37 BRT 2014


> Ummm não rodei ele não. Mas Patrick, em breve vou ter que criar outra 
> vlan e aí vou anotar essas coisas todas que não fiz e fazer na hora do 
> problema.
> Quando eu rodo ele aqui nesse momento eu tenho essa informação:
> 
> # bgpctl sh int
> Interface      Nexthop state  Flags          Link state
> vlan5          ok             UP             invalid, 10 MBit/s
> vlan4          ok             UP             invalid, 10 MBit/s
> vlan3          ok             UP             active, 10 MBit/s
> vlan2          ok             UP             active, 10 MBit/s
> vlan1          ok             UP             active, 10 MBit/s
> vlan0          ok             UP             active, 10 MBit/s
> lagg1          ok             UP             Ethernet, active, 2 GBit/s
> disc0          ok             UP             invalid
> lo0            ok             UP             invalid
> pfsync0        invalid                       invalid
> pflog0         invalid                       invalid
> em7            ok             UP             Ethernet, invalid, 10 MBit/s
> em6            ok             UP             Ethernet, active, 1000 MBit/s
> em5            ok             UP             active, 1000 MBit/s
> em4            invalid                       Ethernet, invalid, 10 MBit/s
> em3            ok             UP             Ethernet, active, 1000 MBit/s
> em2            ok             UP             active, 1000 MBit/s
> em1            ok             UP             Ethernet, active, 1000 MBit/s
> em0            ok             UP             Ethernet, active, 1000 MBit/s
> 
> É normal essas vlans aparecerem como 10Mbps? Porque o tráfego delas não 
> condiz com essa informação.
> Por exemplo:
> 
> vlan0 tá 10Mbps mas o tráfego é de +700Mbps.
> vlan1 idem e tem tráfego de 470Mbps.
> vlan2 tem tráfego quase 300Mbps
> vlan3 o tráfego é de 500Mbps
> 

Pois é normal não é não, mas ja vi também o OpenBGP pegando baudrate errado, exatamente quando voce cria a vlan e ja a endereça. Se voce der um down e depois up ele pega corretamente. Mas isso não muda nada na velocidade efetiva e nem na decisão de roteamento enquanto não deixar empatar tudo.

Veja em um dos FreeBSD 10 que testei:

vlan3939       invalid                       invalid
lo1            ok             UP             invalid
vlan3408       ok             UP             active, 1000 MBit/s
vlan3500       ok             UP             active, 1000 MBit/s
vlan3391       ok             UP             active, 1000 MBit/s
vlan3608       ok             UP             active, 1000 MBit/s
vlan3577       ok             UP             active, 1000 MBit/s
vlan979        ok             UP             active, 1000 MBit/s
vlan20         ok             UP             active, 1000 MBit/s
vlan10         ok             UP             active, 1000 MBit/s
lo0            ok             UP             invalid
ipfw0          ok             UP             Ethernet, invalid, 10 MBit/s
bge1           invalid                       Ethernet, no carrier
bge0           invalid                       Ethernet, no carrier
igb3           ok             UP             Ethernet, active, 1000 MBit/s
igb2           ok             UP             Ethernet, active, 1000 MBit/s
igb1           invalid                       Ethernet, invalid, 10 MBit/s
igb0           ok             UP             Ethernet, active, 1000 MBit/s
em1            ok             UP             Ethernet, active, 1000 MBit/s
em0            ok             UP             Ethernet, active, 1000 MBit/s

% uname -sr
FreeBSD 10.0-STABLE

% pkg info -x bgp
openbgpd-5.2.20121209



> Seria normal ficar com 10Mbps ali no link state?
>> 
>> arp -an tinha o MAC dos seus peers bgp ok?
> Não vi esse também, só vi o netstat -rn e o bgpctl s rib. Vou fazer no 
> próximo teste, já que vou ter que criar uma nova vlan em breve.
>> 
>> Outra coisa as NIC conectadas na vlan tem IP? Ou não são endereçadas? Se não forem endereçadas voce deu up na mão ao recriar uma vlan, tanto na NIC quanto na vlan?
> Você diz as interfaces em(4)? Elas ficam sem IP. Só existe IP nas vlans 
> e é dado up nelas. Eu não uso o rc.conf pra carregar as interfaces, eu 
> uso o start_if.<driver>
> Abaixo meus arquivos start_if.X pra vc ter uma ideia:
> 
> /etc/start_if.em0:
> 
> /sbin/ifconfig disc0 create
> /sbin/ifconfig em0 159.XX.XX.98/30
> /sbin/ifconfig em0 inet6 2804:XXXX:FFFF:FFD8::2/64
> /sbin/ifconfig disc0 127.0.0.254
> 
> /etc/start_if.em1:
> 
> /sbin/ifconfig em1 64.XX.XX.70/30
> /sbin/ifconfig em1 inet6 2001:XXXX:2001:1001::96/126
> 
> /etc/start_if.em2:
> 
> /sbin/ifconfig lagg1 create
> /sbin/ifconfig em2 up
> /sbin/ifconfig em5 up
> /sbin/ifconfig lagg1 laggproto lacp laggport em2 laggport em5
> /sbin/ifconfig lagg1 up
> /sbin/ifconfig vlan0 create
> /sbin/ifconfig vlan1 create
> /sbin/ifconfig vlan2 create
> /sbin/ifconfig vlan3 create
> /sbin/ifconfig vlan0 186.XX.X8.1/27 vlan 3081 vlandev lagg1
> /sbin/ifconfig vlan0 inet6 2804:XXXX:DEAD::1/64
> /sbin/ifconfig vlan1 177.XXX.2XX.254/27 vlan 3082 vlandev lagg1
> /sbin/ifconfig vlan1 inet6 2804:XXXX:CAFE::1/64
> /sbin/ifconfig vlan2 186.XX.X4.1/27 vlan 2126 vlandev lagg1
> /sbin/ifconfig vlan2 inet6 2804:XXXX:CADE::1/64
> /sbin/ifconfig vlan3 186.XX.X1.1/27 vlan 3088 vlandev lagg1
> /sbin/ifconfig vlan3 inet6 2804:XXXX:BAD::1/64
> 
> /etc/start_if.em3:
> 
> /sbin/ifconfig em3 186.XX.1.150/30
> 
> /etc/start_if_em6:
> 
> /sbin/ifconfig em6 177.XXX.2XX.1/29
> 
> /etc/start_if_em7:
> 
> /sbin/ifconfig em7 up
> /sbin/ifconfig vlan4 create
> /sbin/ifconfig vlan5 create
> /sbin/ifconfig vlan4 187.XXX.XX.28/21 vlan 1441 vlandev em7
> /sbin/ifconfig vlan5 inet6 2001:XXXX::219:28/64 vlan 1442 vlandev em7

Mete um down e um up depois de endereçado aqui…


> 
> 
>> 
>> Por acaso as flags da NIC com FreeBSD 10 ficam diferente do 9?
> Ummm não reparei Patrick, faz tempo que mudei pro 10.

Salva um ifconfig -a, arp -a, sysctl -a e netstar -m alem de bgpct s s, bgpctl sh int, bgpctl sh fib next em um arquivo a parte antes dos testes.

Depois q vc criar a famigerada vlan tira de novo essas saidas pra comparar se houver o erro de novo.

> Pode ser mesmo, difícil tá ser descobrir o que é rsrsrsrsrs

Vc n passou qual o chipset, pegai com pciconf...

> 
>> 
>> Por desencargo tem Q-in-Q no seu ambiente? Mesmo que não na sua porta, alguma outra que chega no Datacom?
> No meu ambiente não tem mas vou questionar isso com eles e ver qual a 
> resposta deles.
> 
> Patrick aproveitando o embalo, sei que muda o assunto real da thread mas 
> é bem simples a resposta. Supondo que eu tenha 2 links de dados de 1Gbps 
> cada. Vamos dizer que eu feche um iBGP nas 2 pontas de cada link com o 
> OpenBGP. Se eu setar o localpref igual para ambos os links e o anúncio 
> dos prefixos iguais para ambos os links, o OpenBGP vai balancear o 
> upstream e o downstream igualmente? Ou o upstream vai sair apenas por um 
> dos dois links e o downstream ficaria balanceado?
> 
> Grande abraço,
> Gondim

Nao, nao vai balancear nada, o BGP vai buscar alguma métrica de desempate a não ser que voce desligue todas as métricas de desempate, como rde med compare, rde route-age evaluate e colocar “no evaluate” na sua RIB voce vai fugir de parte dos desempates ficando apenas localpref e weight basicamente. Se voce garantir que eles empatem voce vai ter instalado em kernel todas as rotas que empatarem, pra isso voce prefixa ter RADIX MULTIPATH em kernel (testar antes, a estabilidade dele varia conforme CARP/EPAIR/VIRTIO/NETGRAPH).

Ai voce vai ter o balanceamento e até a redundancia que o Radix Multipath te oferece. Bem legal isso… apesar de legal eu prefiro sempre um mero:

ipfw set 2 add fwd 0.3 $ip_peer all from $meu_cidr to any out
ipfw set 2 add fwd 0.5 $ip_peer2 all from $meu_cidr to any out
ipfw set 2 add fwd $ip_peer3 all from $meu_cidr to any out

Ai eu monitoro a disponibilidade do peer/sessao e dou disable set 2 se não for situação normal (todos de pe), tenho melhor controle com PBR do que com BGP que não foi feito pra balancear sem critério (aka, atributo).

Pra balancear entrada sem critério impossível, so te sobra especificidade de prefixo e prepend self mesmo. A não ser claro que os upstream estejam também sob seu controle ai vc tem mil escolhas, tanto faz a mesma coisa com PBR (afinal seu RX é o TX do upstream) ou até lagg(4) balanceando.

Abraços.







Mais detalhes sobre a lista de discussão freebsd