domingo, 31 de julho de 2011

Desvio de tráfego layer-2 (MAC) com bridge transparente - Linux e Ebtables

    Quando numa migração onde não se pode (ou não se quer) realizar uma troca "agressiva" de um dispositivo de rede por um outro (troca de firewall/roteador/gateway) e ainda deseja-se manter o roteamento IP da rede intacto, uma bridge transparente é uma ótima ferramenta para se desviar o tráfego no nível ethernet da comutação de quadros. A bridge é configurada em um Linux , com duas interfaces de rede e que tenha instalado o ebtables. No Ubuntu 10.04 LTS é instalado pelo pacote "bridge-utils".
    Exemplificando melhor a utilização: Imagine um teste de um novo roteador, onde deseja-se que somente o host2 utilize-o, mas sem realizar alterações de roteamento e endereçamento.
Rede exemplo

    Neste caso a bridge é posicionada na entrada LAN dos roteadores, como segue:



    Quando o host2 envia pacotes para redes que ele não está diretamente conectado, neste caso redes diferentes de 10.1.1.0/24, ele envia os pacotes para o gateway. Um pacote endereçado ao gateway do host2, por exemplo um PING para o DNS do google (8.8.8.8), teria estas informações:

MAC destino: AA:BB:CC:DD:EE:FF
MAC origem: MAC_DO_HOST2
IP destino: 8.8.8.8
IP origem: 10.1.1.2

    A configuração completa da bridge para alterar-se o tráfego para o Gateway2 seria a seguinte:

#ativação das interfaces sem IP
ifconfig eth0 0.0.0.0 up 
ifconfig eth1 0.0.0.0 up

#configuração da bridge
brctl addbr br0 
brctl addif br0 eth0
brctl addif br0 eth1

#atribuição de IP para a bridge (para administração)
ifconfig br0 10.1.1.50 netmask 255.255.255.0 up 

# "bypass" se o pacote for com destino a rede interna
ebtables -t nat -A PREROUTING -i eth0 -p ipv4 --ip-src 10.1.1.2 --ip-dst 10.1.1.0/24 -j ACCEPT

#muda o MAC Destino para o Gateway2 para o restante dos pacotes
ebtables -t nat -A PREROUTING -i eth0 -p ipv4 --ip-src 10.1.1.2 -j dnat --to-dst "11:22:33:44:55:66"


    Com esta configuração, a bridge os pacotes que vierem do host2 com destino externo terão seus MAC Destino modificados e sendo encaminhados para o Gateway2 que realizará o roteamento.
    Já utilizei com sucesso esta manipulação na migração de um firewall onde, em um primeiro momento, redirecionamos todo o tráfego dos Proxies de navegação interna. É possível realizar uma migração com as estruturas em paralelo funcionando, serviço por serviço, somente mantendo cuidado e avaliando previamente os possíveis caminhos de roteamento e comutação de quadros que podem ser realizados e então configurando na bridge. 
    Agradeço ao grande mestre Ricardo Barbosa  que ajudou-me na configuração e entendimento dessa funcionalidade. :)