Post em Destaque

Novo Playstation com um sistema operacional baseado em FreeBSD ao invés de “feito todo em casa” como antes.

O novo PS4 deverá vir com um novo Sistema Operacional. Sim pelos dados coletados será baseado no FreeBSD devido ao suporte que tem com GPU. Sem falar outras características como estabilidade, performance e até mesmo a licença BSD que eu particularmente acredito ser muito mais interessante para a...

Leia mais...

Link Aggregation – a solução para não usar 10GbE ainda.

Posted by gondim | Posted in Dicas, FreeBSD, Tecnologia | Posted on 12-05-2012

Tags:, ,

0

Não é de hoje a busca por links de grande capacidade, principalmente por Provedores de Internet. Lembro da época que interfaces de rede Gigabit eram muito caras e vivíamos com redes 10/100. O provedor que trabalho, na época tinha link de 2Mbps quando ainda existiam conexões discadas. A interface de rede que ligava o provedor ao fornecedor do link Internet era uma 3Com 10/100 que atendia muito bem. Mas o crescimento chegou rápido e fomos aumentando nosso link até que chegamos em 100Mbps. Nesse patamar a boa e velha 3Com não atendia mais as necessidades e aí mudamos para interface Intel Gigabit. Continuamos crescendo e hoje nosso link pulou para 1.2Gbps. Mas como colocar 1.2Gbps em uma interface de apenas 1Gbps? Não coloca. Nesse ponto surge a necessidade de um upgrade de equipamento para 10GbE. Bem, são equipamentos extremamente caros e por isso partimos para outra solução conhecida como: Link Aggregation e que o FreeBSD faz muito bem.

Com o Link Aggregation (lagg) você pode adicionar interfaces de rede somando as velocidades e ao mesmo tempo balanceando e servindo de failover. Para o Provedor aqui foi preciso apenas adicionar mais uma interface de rede Intel Gigabit e configurar o lagg e com isso agora temos quase 2Gbps para nos atender sem grandes investimentos.

Irei mostra aqui um exemplo de configuração que inclusive está funcionando hoje em nosso router central que é um FreeBSD 9.0 64bits stable. Este router encontra-se ligado em uma switch com suporte à lagg que interliga nossas Cidades através de um clear channel em fibra.

Primeiramente precisamos do suporte ao lagg ativado. Isso pode ser feito de 2 formas, compilando no kernel ou carregando em tempo de boot.

Para colocar direto no kernel, basta adicionar a linha abaixo no seu kernel, compilar e instalar seu novo kernel.

device          lagg

Caso não queira compilar o kernel com suporte você pode optar por carrega-lo como módulo no boot. Para isso basta adicionar a linha abaixo em /boot/loader.conf:

if_lagg_load=”YES”

Para essa configuração usei o esquema de start_if.<interface> diferente do usado no rc.conf e pode ser lido aqui.

No meu router criei os arquivos /etc/start_if.em2 e /etc/start_if.em3 conforme abaixo:

start_if.em2:

/sbin/ifconfig lagg1 create
/sbin/ifconfig em2 up

A primeira linha estou criando uma interface virtual de link aggregation chamada lagg1. Estou criando a lagg1 porque já tenho uma lagg0 junto ao meu fornecedor de link Internet e no final as configurações serão as mesmas, logo irei mostrar apenas uma.

Na segunda linha apenas levanto a interface em2, deixando-a ligada e sem IP mesmo.

start_if.em3:

/sbin/ifconfig em3 up
/sbin/ifconfig lagg1 laggproto lacp laggport em2 laggport em3 186.xxx.xx.1 netmask 255.255.255.224

Na configuração da outra interface em3 nós levantamos ela sem IP algum e na segunda linha é que configuramos nosso lagg. Onde dizemos que o lagg1 vai usar o protocolo lacp (Link Aggregation Control Protocol). Vai agregar as interfaces em2, em3 e setar o IP 186.xxx.xx.1 na lagg1.

Existem outras opções de protocolo mas o lacp é o mais completo e interessante ao meu ver. Você pode consultar outros protocolos através do: man lagg

Feito isso basta agora você interligar as 2 interfaces de rede nas 2 portas da switch que foram configuradas para fazer o lagg. Simplesmente isso. Para ter certeza que tudo vai funcionar certo, re-inicie o sistema.

Como saber se o lagg está funcionando? Simples também. Faça um ifconfig no lagg1 e veremos algo assim:

lagg1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=209b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,WOL_MAGIC>
ether 00:1e:67:07:9d:cc
inet 10.10.10.10 netmask 0xffffffff broadcast 10.10.10.10
inet6 fe80::21e:67ff:fe07:9dcc%lagg1 prefixlen 64 scopeid 0x12
nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
media: Ethernet autoselect
status: active
laggproto lacp
laggport: em3 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING>
laggport: em2 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING>

Nas 2 últimas linhas tem que estar como ACTIVE nas 2 interfaces, senão o lagg não estará funcionando.

Para visualizarmos o consumo de banda independente por interface (em2 e em3) ou o somatório (lagg1) podemos instalar e usar o programa nload que está no ports.

# cd /usr/ports/net/nload/

# make install clean

Com o comando “nload -u k” e usando as setas para baixo e para cima você poderá navegar nas interfaces existentes. Abaixo as telas do meu sistema em funcionamento:

Bem é isso. Assim como muitas outras coisas no FreeBSD, essa não poderia deixar de ser tão simples e fácil.

Espero que seja útil e ajude.  😉

Share Button

Uma outra maneira organizada de configurar interfaces de rede

Posted by gondim | Posted in Dicas | Posted on 14-04-2012

Tags:,

1

Muita gente está acostumada à usar o /etc/rc.conf para diversas configurações no FreeBSD, como hostname, serviços de rede e tudo mais que estiver em /etc/defaults/rc.conf, inclusive as configurações das interfaces de rede.

Normalmente um exemplo simples de /etc/rc.conf:

defaultrouter=”186.xxx.48.1″
hostname=”zeus.dominio.com.br”
ifconfig_igb0=”inet 186.xxx.48.15  netmask 255.255.255.224″
keymap=”br275.iso.acc”

Reparem que existe a linha com o parâmetro ‘ifconfig_igb0‘ onde configuramos o IP da nossa interface de rede cujo driver é o igb aqui no nosso exemplo. Uma curiosidade bem legal que você pode fazer um man if_<driver_interface_rede> que você verá um manual do driver daquela interface. Ex: man if_em, man if_re, man if_rl e por aí vai.

Quando você tem uma interface de rede no servidor é mais fácil e rápido configurar no rc.conf mas a coisa fica mais chata quando temos mais interfaces e rotas para serem gerenciadas de forma limpa e clara. Imaginem ainda ter que configurar um link aggregation (lagg) e dentro desse lagg ainda ter que configurar vlans. É por essas e outras que usamos o /etc/start_if.<interface> e dentro dele colocamos toda a configuração que necessitamos como digitaríamos na linha de comando.

Vamos ver um exemplo simples: comentamos ou removemos a linha ifconfig_igb0 do rc.conf e criamos o arquivo /etc/start_if.igb0 com o conteúdo abaixo como no exemplo:

/sbin/ifconfig igb0 186.xxx.48.15/27
/sbin/route add -host 186.xxx.54.69 186.xxx.48.2
/sbin/route add -net 186.xxx.48.32/27 186.xxx.48.2

Basta fazer um reboot e testar sua nova configuração. 🙂

Agora vamos ver uma mais sofisticada com lagg entre as interfaces em2 e em3 e ainda vlans dentro da lagg:

/etc/start_if.em2:

/sbin/ifconfig lagg1 create
/sbin/ifconfig em2 up

/etc/start_if.em3:

/sbin/ifconfig em3 up
/sbin/ifconfig lagg1 laggproto lacp laggport em2 laggport em3 10.10.10.10 netmask 255.255.255.255
/sbin/ifconfig vlan0 create
/sbin/ifconfig vlan1 create
/sbin/ifconfig vlan2 create
/sbin/ifconfig vlan3 create
/sbin/ifconfig vlan0 186.xxx.48.1/27 vlan 3081 vlandev lagg1
/sbin/ifconfig vlan1 177.xxx.240.254/27 vlan 3082 vlandev lagg1
/sbin/ifconfig vlan2 186.xxx.54.1/27 vlan 2126 vlandev lagg1
/sbin/ifconfig vlan3 186.xxx.61.1/27 vlan 3088 vlandev lagg1

Nos exemplos acima fiz uma lagg nas interfaces em2 e em3 com o nome de lagg1. Uma vez criada a lagg, configurei as vlans que falam com cada cidade que tenho no meu router.

O objetivo não é aprender lagg ou vlan mas mostrar que usando esse formato de configuração fica mais claro e fácil de gerenciar uma estrutura mais complexa da sua empresa.

É isso e até a próxima.

Share Button