Configurar OpenWRT Batman-Adv 2012.3.0
Este artigo descreve os procedimentos a adotar para proceder à configuração do firmware OpenWRT. Este método foi experimentado nos routers linksys wrt54GS (equipamentos usados para a conceção da rede mesh).
Na rede criada existem dois tipos de nós: os servidores e os clientes. Os nós servidores serão os nós que desempenham a função de gateways e os nós clientes serão os nós que propagam a rede mesh, para além dos nós servidores.
Configuração batman-adv
A interface virtual mesh, na realidade, é o sítio para onde se vão enviar os pacotes de dados, de maneira a que estes sejam entregues no destino correto. A interface chama-se “bat0”. É criada pelo protocolo batman-adv e é atribuído automaticamente um endereço do tipo Ethernet a esta interface. Qualquer pacote que entre nesta interface será entregue noutra interface “bat0”, no endereço de destino.
A configuração do ficheiro localizado em /etc/config/batman-adv, neste caso referente ao nó servidor/gateway, utilizada foi:
config 'mesh' 'bat0'
option 'interfaces' 'wifi'
option 'aggregated_ogms'
option 'ap_isolation'
option 'bonding'
option 'fragmentation'
option 'gw_bandwidth'
option 'gw_mode' 'server'
option 'gw_sel_class'
option 'log_level'
option 'orig_interval'
option 'vis_mode' 'server'
option 'bridge_loop_avoidance'
Conforme se pode observar, esta configuração diz respeito à interface mesh, denominada “bat0”. As várias opções que são apresentadas no ficheiro são configuráveis.
option 'interfaces'
Nesta opção, define-se que a interface que o protocolo batman-adv vai usar, chama-se “wifi”. Esta interface será criada no ficheiro “network”, localizado em /etc/config/network, conforme será demonstrado mais adiante. É possível habilitar mais do que uma interface batman-adv para usar o protocolo. Nesse caso será necessário configurar cada interface criada. Pode-se acrescentar as interfaces que se pretender, imediatamente a seguir à interface inicial.
option aggregated_ogms
De maneira a reduzir o cabeçalho do protocolo criado por todos os participantes na rede, batman-adv tem a capacidade de recolher e agregar essas mensagens (OGMs), e envia-as num único pacote em vez de pequenos pacotes. Esta função está habilitada por omissão. Se se pretender usar o batman-adv num ambiente altamente móvel, como por exemplo num cenário de carros em movimento, poderá ser preferível desabilitar esta opção devido ao atraso provocado na rede (normalmente insignificante). Para desabilitar esta opção configura-se:
option 'aggregated_ogms' '0'
Para voltar a habilitar deverá ser configurada como:
option 'aggregated_ogms' '1'
Nesta configuração, esta opção encontra-se habilitada por omissão.
option ap_isolation
Os ponto de acesso wireless tradicionais suportam uma função conhecida como “AP isolation” que previne que dois clientes sem fios ligados ao mesmo nó possam “conversar” entre si. Na maioria das situações isto é considerado uma função de segurança. Se um AP Wifi está ligado a uma rede mesh, poderá ser desejável manter o isolamento dos seus utilizadores em toda a rede mesh. batman-adv tem a capacidade para o fazer através desta opção, que está desabilitada por omissão. Para habilitar esta opção configura-se:
option 'ap_isolation' '1'
Para voltar a desabilitar configura-se:
option 'ap_isolation' '0'
Nesta configuração, esta opção, encontra-se desabilitada por omissão.
option bonding
Quando os nós da rede mesh têm múltiplas interfaces, o batman-adv é capaz de otimizar o fluxo de tráfego de maneira a melhorar o desempenho. Por omissão o protocolo opera no modo “interface alternating” (que é o mais adequado para a maioria das situações). Este modo faz com que a interface seja comutada em cada salto de modo a evitar a acumulação e reencaminhamento de informação. Em alternativa, o batman-adv pode ser comutado para o “bonding mode”, onde são usadas todas as interfaces para receber e enviar dados ao mesmo tempo. Contudo, este modo só é recomendado em casos especiais de um só salto. Para habilitar esta opção, configura-se:
option 'bonding' '1'
Para voltar a desabilitar esta opção configura-se:
option 'bonding' '0'
Nesta configuração, esta opção encontra-se desabilitada por omissão.
option fragmentation
batman-adv implementa, na camada 2 OSI, fragmentação de pacotes unicast que atravessam a rede mesh, de maneira a funcionarem em intefaces/conexões que não permitam o aumento do valor padrão do MTU que é 1500 bytes. Quando a fragmentação está habilitada, batman-adv automaticamente fragmenta os pacotes que excedem o tamanho e volta a compactá-los quando atinge o fim dessa inteface/conexão. Por omissão a fragmentação está habilitada e inativa (se o pacote não excede o tamanho permitido), mas é possível desactivar a fragmentação por completo. Para habilitar configura-se:
option 'fragmentation' '1'
Para voltar a desabilitar a opção configura-se:
option 'fragmentation' '0'
Nesta configuração, esta opção encontra-se habilitada por omissão.
option bridge_loop_avoidance
Esta função é pertinente em redes onde existem nós ligados por mais do que uma interface. Imagine-se que dois nós pertencentes ao backbone estão ligados via LAN um ao outro, mas também estão ligados via wireless. Se por exemplo for efetuado um pedido ARP, esse pedido ao chegar à LAN difunde-se pelos dois nós referidos, que por sua vez difundem novamente via wireless. Ao chegar o pedido ao nó, este vai propagá-lo via wireless, e por sua vez, vai voltar a ser recebido pelo outro nó, que vai enviar o pedido outra vez de volta à LAN. Tem-se um problema de repetição de pacotes (bridge loop). Esta opção trata este problema e evita-o. Para habilitar esta opção, configura-se:
option 'bridge_loop_avoidance' '1'
Para voltar a desabilitar esta opção:
option 'bridge_loop_avoidance' '0'
Nesta configuração, esta opção encontra-se desabilitada por omissão.
option gw_mode
Esta opção permite definir se o nó é servidor ou cliente. Se for servidor partilha a sua conexão de internet com a rede mesh, se for cliente procura a melhor ligação à internet. No caso da rede implementada neste trabalho existem nós de ambos os tipos. Para habilitar um nó servidor configura-se:
option 'gw_mode' 'server'
se for cliente configura-se:
option 'gw_mode' 'client'
No exemplo acima descrito mostra-se a configuração para nó servidor.
option gw_bandwidth
Esta opção permite cada servidor/gateway anunciar a largura de banda disponível para a rede mesh. Contudo, esse valor tem de ser configurado manualmente, pois ainda não se encontra disponível uma função que calcule automaticamente a largura de banda e a divulgue pela rede mesh. No momento em que este artigo está a ser escrito, encontra-se em desenvolvimento uma função que visa alcançar esse propósito. No decorrer do desenvolvimento da ferramenta de gestão da rede, ponderou-se a hipótese de calcular essa mesma largura de banda, através de amostragens em intervalos de tempo. No entanto, para termos um valor fidedigno teríamos que proceder à implementação de um método estatístico onde fosse reduzida a margem de erro, de forma a obter-se um nível de confiança elevado. Optou-se por declinar essa implementação, uma vez que seria necessário fazer um estudo prévio do uso de uma rede real, onde se pudesse aferir quais os tempos de amostragem ótimos, para se poder efetuar o cálculo da largura de banda o mais próxima possível da realidade. A função que está a ser desenvolvida, tem como princípio, o método utilizado por várias soluções existentes online conhecidas como “speedmeter”. Esse método consiste no envio de um determinado número de pacotes para um servidor situado algures na internet que posteriormente envia resposta do seu recebimento, obtendo-se uma janela temporal que servirá para o cálculo da velocidade de transmisão.
Essa velocidade é calculada em função da quantidade de dados enviada/recebida num determinado intervalo de tempo. Esta opção “option 'gw_bandwidth'” pode ser configurada nos nós servidores. Caso não seja configurada, anunciará largura de banda por omissão de 2048KBit/512KBit, referentes a download e upload, respetivamente. Por exemplo, para ser configurada a velocidade de 5 MB de donwload e 1 MB de upload, configurar-se-ia:
option 'gw_bandwidth' '5mbit/1024'
option gw_sel_class
Se existirem múltiplas gateways disponíveis, o nó batman-adv cliente selecionará o melhor gateway, com base em critérios como a qualidade de ligação, a largura de banda anunciada, etc. Por omissão é configurado como melhor ligação, aquela que apresentar um certo valor de qualidade de transmissão (valor por omissão 20), ou seja, quando uma ligação superar em 20 pontos o valor da qualidade de transmissão em vigor, será alterada a ligação para essa nova ligação. A configuração para este caso seria:
option 'gw_sel_class' '20'
Também é possível definir como preferência a ligação mais rápida, que considera a largura de banda anunciada, como também é possível definir a ligação com base na qualidade de transmissão. Para este caso a configuração seria:
option 'gw_sel_class' '1'
Outra hipótese pode ser a estabilidade da ligação, ignorando a largura de banda e tendo em consideração a qualidade de transmissão
option 'gw_sel_class' '2'
Outra alternativa consiste na escolha da ligação com base na transmissão de qualidade, ou seja, quando encontrar outra ligação melhor, muda imediatamente:
option 'gw_sel_class' '3'
Por fim, pode-se definir quantos pontos de qualidade de transmissão serão necessários para se mudar a ligação; neste caso a configuração seria:
option 'gw_sel_class' 'XX'
Onde “XX” será o valor de pontos a considerar para a mudança. Como é óbvio não é possível utilizar os valores “1”, “2” nem “3” nesta última opção. Por omissão esta opção foi configurada tanto nos nós servidores como nos nós clientes, conforme se apresenta na configuração apresentada no início deste artigo.
option log_level
Esta opção não foi compilada no kernel. Serve para criação de logs relacionados com routeamento, envio de mensagens, rotas, tabelas de translação, etc. Esta opção é bastante útil quando se está a configurar a rede mesh, de forma a perceber o que acontece a cada momento. Esta opção não é configurada em nenhum nó, uma vez que isso implicaria que a imagem final do firmware OpenWRT ficasse maior, o que não é de todo desejável por razões já previamente explicadas noutras páginas.
option orig_interval
Esta opção especifica o intervalo em milisegundos, com que o batman-adv envia OGMs para a rede. O valor de uma mensagem por segundo permite o protocolo reconhecer imediatamente a alteração de uma rota na sua vizinhança. Após um minuto reconhece a alteração de uma rota completa (a maior parte da vezes muito mais cedo). Num ambiente estático (nós que não se movem e raramente são ligados/desligados) pode-se aumentar o valor de “option 'orig_interval'”, de modo a poupar largura de banda. Por outro lado, poderá ser benéfico decrementar o valor em ambientes altamente móveis, mas como consequência o volume de tráfego será aumentado. O valor por omissão é de 1000 ms. Na configuração dos nós foi deixado o valor por omissão. Para incrementar a decrementar configurar-se-ia por exemplo:
option 'orig_interval' '500'
option vis_mode
Esta opção é usada para obtenção de um sistema gráfico de visualização da rede batman-adv. Para a visualização deste gráfico é necessária uma ferramenta de interpretação de grafos. O protocolo cria um ficheiro “.dot”, que terá de ser interpretado de maneira a obter-se um gráfico idêntico ao gráfico aqui apresentado. Na conceção deste trabalho foi usada a aplicação “Visualizador interativo para ficheiros de pontos Graphviz”, existente no centro de programas ubuntu 11.04, do sistema operativo linux. Outra opção de aplicação para visualização de gráficos poderá ser Graphviz - Graph Visualization Software. É necessário definir se o nó é um nó servidor de visualização. Após essa definição, automaticamente todos os outros nós se transformam em clientes de visualização, enviando informação para o nó servidor, que criará o ficheiro “.dot”. Na rede implementada foi definido que os nós servidores/gateways da rede mesh também são os nós servidores do modo de visualização.
Na figura seguinte, é ilustrada uma representação gráfica de uma rede batman-adv, utilizando para o efeito a ferramenta de visualização disponível na sua própria implementação, onde elipses representam nós batman-adv e hóspedes da rede, que são identificados pelos seus MAC addresses. Caixas representam interfaces pertencentes a um nó batman-adv. Círculos duplos representam a interface primária de um nó batman-adv, que é conhecida pelos outros nós batman-adv, exceto os vizinhos diretos. Elipses com uma seta HNA representam os clientes da rede mesh, que pode ser também um nó batman-adv de outra rede mesh. Setas com números representam a qualidade de transmissão na forma 1/TQ, desde uma interface de um nó BATMAN-batman-adv para outra interface de outro nó batman-adv.

Para melhor utilização e depuração de todas estas opções foi criada a ferramenta “batctl” – (batman control), que permite configurar e apresentar informação, ferramenta fundamental e de extrema utilidade. Para solicitar ajuda, executa-se:
batctl –h
No terminal de ligação ao router.
Configurar o ficheiro network
É no ficheiro localizado em /etc/config/network/, que será criada a interface mesh, que conforme já foi referido, será denominada de “wifi”. A configuração é a seguinte:
#### VLAN configuration
config switch eth0
option enable 1
config switch_vlan
eth0_0 option device "eth0"
option vlan 0
option ports "1 2 3 4 5"
config switch_vlan eth0_1
option device "eth0"
option ports "0 5"
#### Loopback configuration
config interface loopback
option ifname "lo"
option proto static
option ipaddr 127.0.0.1
option netmask 255.0.0.0
#### LAN configuration
config interface lan
option type bridge
option ifname "eth0.0 bat0"
option proto static
option ipaddr 10.0.0.1
option netmask 255.255.255.0
option mtu 1500
#### WLAN configuration
config interface wifi
option proto none
option ifname "wlan0"
option mtu 1528
#### WAN configuration
config interface wan
option ifname "eth0.1"
option proto dhcp
O firmware OpenWRT permite a configuração de VLANs, permitindo a gestão das portas disponíveis no router. Neste caso foram criadas duas VLANs: a “vlan eth0_1”, à qual pertence a porta WAN, e a “vlan eth0_0”, à qual pertencem as outras quatro portas switch Ethernet do router.
É criada a interface mesh, que foi definida no ficheiro localizado em /etc/config/batman-adv, como sendo a interface que está à disposição do protocolo batman-adv, de nome interface “wifi”. O protocolo aplicado a esta interface é “none”, uma vez que o batman-adv é que se encarregará de fazer a sua gestão. O nome atribuído é “wlan0”. E o MTU definido é de 1528, devido à necessidade de encapsulamento do cabeçalho batman-adv.
Na secção “LAN configuration” é criada uma bridge, que integra a interface mesh “bat0”. Assim ficarão ligadas por uma ponte a “vlan eth0_0”, a interface bat0 e a interface “wifi”. A interface “bat0” é que fará a gestão da entrega dos pacotes no destino correto. Se o destino do pacote for o próprio nó, a interface “bat0” entrega o pacote a “vlan eth0_0”, seo destino do pacote não for o próprio nó, a interface “bat0” entrega o pacote a “wifi”. Por sua vez a interface “wifi” transmite o pacote para o router escolhido (best next hop), que o recebe na sua própria interface “wifi” e volta a entregar o pacote à interface “bat0”. Também aqui nesta secção é determinado o IP do router que servirá para o uso de ferramentas da camada 3 de ISO, como por exemplo o acesso ao router através de SSH.
A porta WAN faz sentido nos nós servidores/gateways. Nos nós clientes esta porta deixa de ser necessária e pode ser configurada como sendo uma porta Ethernet, aumentando assim a possibilidade de aceitar mais um cliente através de cabo. Para isso basta eliminar uma das VLANs e atribuir mais uma porta à VLAN remanescente, neste caso “vlan eth0_0“. Cada router poderá ter cinco utilizadores de cabo ou até poderá ser ligado a um switch e ter um número de utilizadores maior. O número de utilizadores poderá ainda ser maior se o nó batman-adv tiver um AP agregado. É claro que quantos mais clientes ligados ao router, menor será a largura de banda disponível e menor o desempenho global, consideração a ter em conta na atribuição de IPs.
Configurar o ficheiro dhcp
A configuração do ficheiro localizado em /etc/config/dhcp é a seguinte, neste caso para o nó servidor:
config dnsmasq
option domainneeded 1
option boguspriv 1
option filterwin2k 0 # enable for dial on demand option localise_queries 1
option rebind_protection 1 # disable if upstream must serve RFC1918 addresses
option rebind_localhost 1 # enable for RBL checking and similar services
option local '/lan/' option domain 'lan'
option expandhosts 1
option nonegcache 0
option authoritative 1
option readethers 1
option leasefile '/tmp/dhcp.leases'
option resolvfile '/tmp/resolv.conf.auto'
config dhcp lan
option interface lan
option start 100
option limit 40 option leasetime 5m
config dhcp wan
option interface
wan option ignore 1
A atribuição de IPs aos clientes é determinada pelos nós servidores. O nó, do qual se apresenta o ficheiro dhcp, pode atribuir 40 IPs, conforme se pode observar na secção “config dhcp lan”, ou seja, permite a ligação de 40 clientes no máximo. A atribuição começa no valor 100, o qual vai sendo incrementado conforme a distribuição de IPs. O tempo de cada atribuição de IP é de 5 minutos, definido em função da necessidade de obtenção do número de clientes de cada nó em tempo real, quando solicitado pela ferramenta de gestão de redes mesh, desenvolvida. Verificou-se que para tempos de atribuição maiores, o número de clientes de um nó demorava a ser atualizado, sempre que um cliente se ligava ou desligava da rede. O cliente não percebe que o seu tempo de atribuição terminou, pois sempre que solicita um pedido à rede, é renovado por mais 5 minutos a sua atribuição de IP (se eventualmente entretanto a atribuição terminou).
Os nós clientes não atribuem IPs. A sua configuração será idêntica à apresentada, exceto em “config dhcp lan”:
config dhcp lan
option ignore 1
Assim, a atribuição dos IPs aos utilizadores da rede será feito pelos nós servidores, independentemente de os utilizadores estarem ligados aos nós servidores ou aos nós clientes. Os nós clientes que compõem a rede mesh escolhem a rota para o gateway com base em critérios de qualidade e desempenho, conforme referido anteriormente. Assim, a rota escolhida para o gateway, pelo nó cliente, irá ser determinante quanto ao nó servidor que vai fazer a atribuição dos IPs. Se o valor de utilizadores num determinado nó servidor for mais elevado do que o número de atribuições definido, será caso para pensar no reforço dessa área com outro nó servidor, de maneira a satisfazer todos os pedidos, sem quebra da qualidade desejável.
Configurar o ficheiro wireless
O ficheiro localizado em /etc/config/wireless tem a seguinte configuração:
config wifi-device radio0
option type mac80211
option channel 6
option phy phy0
option hwmode 11g
option country PT
option txpower 20
option disabled 0
config wifi-iface
option device radio0
option network wifi
option ssid PR
option mode adhoc
option bssid 00:13:10:7c:da:71
option encryption wep
option key 3252732954797e433b4e342f23
Este ficheiro tem por função configurar o dispositivo rádio e a rede wireless. Como foram usados routers linksys wrt54GS para fazer a rede mesh, esta configuração é adequada a esse tipo de equipamentos. Por exemplo, a “option type” é autodetetada. Neste caso é “mac80211” para o dispositivo rádio que incorpora o router. Poderia ser “broadcom” para “brcm-2.4” ou “atheros” para “madwifi”. O protocolo batman-adv só funciona nas versões de kernel linux 2.6 ou superiores. O framework “mac80211” é a nova pilha wireless que está incluída no kernel desde 2.6.22, embora os drivers estejam só incluídos desde 2.6.24. No caso do firmware OpenWRT compilado e usado na rede mesh deste artigo, a versão do kernel é 3.3.38.
O canal escolhido para a rede mesh foi o canal 6 (2, 437 GHz), conforme se pode observar em “option channel 6”, canal que não interferirá com o canal 1 ou 11, que poderão ser usados para os nós AP, que servem os utilizadores sem fios.
option phy phy0
É definida a camada física do rádio. Normalmente o OpenWRT usa a opção “macaddr”, referente ao MAC address para identificar o rádio, mas com o framework “mac80211” é possível identificar o rádio como “phy0”. Esta opção é autodetetada e não deve ser mudada.
option hwmode 11g
Foi escolhido a norma IEEE 802.11g para a rede mesh
option country pt
O país onde vai operar é Portugal “PT”, definido em “option country PT”
option txpower
A potência máxima de transmissão é de 20 dbm (100 mW), definido em “option txpower 20”.
option mode adhoc
A interface que opera neste rádio é a interface “wifi” (interface batman-adv), definida previamente no ficheiro network. O modo de rede criado é adhoc, típico de redes mesh, definido em “option mode adhoc”.
option ssid
O nome pelo qual a rede se faz anunciar, ou seja, o Service Set IDentifier (SSID) poderá ser um qualquer à escolha, neste caso foi escolhido “PR”, definido em “option ssid PR”. Quanto ao Basic Service Set IDentification (BSSID), foi selecionado uma dos MAC addresses de um dos routers existentes na rede mesh.
option encryption
Por fim foi escolhido o sistema de encriptação Wired Equivalent Privacy (wep), cuja chave mais complexa de autenticação aceite terá de ser no formato hexadecimal de 128 bits. Esta configuração do ficheiro wireless terá de ser igual para todos os nós, sejam servidores ou clientes. Como a rede funciona em modo adhoc e os nós comunicam no formato peer to peer (P2P), é criada a rede em função dos Independent Basic Service Sets (IBSSs), que por sua vez usam o MAC address selecionado (BSSID) pertencente a um dos nós existentes na rede, para que seja formada a rede mesh. Uma vez que o protocolo batman-adv é um protocolo de camada 2 OSI, apenas o MAC address é requerido.
Em matéria de segurança, é possível através de um programa normalmente chamado de sniffer (por exemplo Wireshark ou tcpdump), conseguir intercetar uma trama. Assim consegue-se facilmente obter o MAC address que forma a rede batman-adv, podendo-se configurar um router com estas mesmas configurações e passar a pertencer clandestinamente a uma rede mesh. Durante a criação deste artigo a encriptação disponível no firmware OpenWRT para redes adhoc é a encriptação wep sendo a chave máxima de encriptação aceite é do comprimento de 128 bits no formato hexadecimal. Tendo em conta que ”quebrar” a chave poderá acontecer usando uma rotina computacional de geração de chaves, e que por cada chave criada bastará reiniciar a rede através de um restart network aplicado ao router, o acesso à rede não poderá ser evitado, embora possa ser retardado. Uma solução é a alteração da chave de encriptação várias vezes por dia.
Configurar o ficheiro system
O ficheiro system encontra-se localizado em /etc/config/system e tem a seguinte configuração:
config system
option hostname OpenWrt
option zonename 'Europe/Lisbon'
option timezone 'WET0WEST,M3.5.0/1,M10.5.0'
config timeserver
ntp list server 0.openwrt.pool.ntp.org
list server 1.openwrt.pool.ntp.org
list server 2.openwrt.pool.ntp.org
list server 3.openwrt.pool.ntp.org
option enable_server 1
Esta configuração apresentada é a configuração dos nós servidores. A importância deste ficheiro de configuração prende-se com a atualização da data e hora dos routers na rede mesh.
Os routers servidores atualizam automaticamente a sua data e hora quando têm acesso à internet, procurando essa atualização nos servidores de Network Time Protocol (NTP). No caso dos nós clientes é necessário indicar os endereços dos nós servidores/gateways para que também esses nós atualizem a data e hora da seguinte forma:
list server 10.0.0.1
list server XX.XX:XX:XX
É preciso acrescentar os IPs dos nós servidores/gateways que os servem. Poderão ser acrescentadas tantas linhas quantos os nós servidores existentes na rede, sendo que se algum falhar a atualização, essa atualização será tentada noutro nó servidor. Esta função é importante, na medida em que para se fazer a gestão da rede é necessário que os nós estejam sincronizados e que forneçam a data e hora quando solicitado.
Autoria
Links externos
- Alteração nas configurações consoante a versão batman-adv
- Configurações sofisticadas com batman-adv
Edicão
--Cmsv (discussão) 19h32min de 2 de Maio de 2013 (GMT) [[category: