[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