sábado, 11 de abril de 2015

Roteamento Dinâmico no Linux Usando o Quagga

Olá Pessoal,

Quagga é um software open source para ambientes Unix (Linux, FreeBSD, Solaris, etc) que provê suporte aos principais protocolos de roteamento dinâmico abertos: RIPv2 (IPv4), RIPng (IPv6), OSPFv2 (IPv4), OSPFv3 (IPv6) e BGP-4 (famílias IPv4 e IPv6). O software especializado em roteamento foi desenvolvido por Kunishiro Ishiguro e atulmente está na versão 0.99.24. O Quagga é na verdade uma suíte composta por um daemon principal denominado zebra, além de outro daemons adicionais responsáveis por cada um dos protocolos de roteamento dinâmico, a destacar: ripdripngdospfdospf6d e bgpd, além de outros. Um detalhe é que o suporte a OSPFv3 para IPv6 ainda não é considerado estável porque possui problemas. 


Embora haja outras soluções open source de roteamento no Linux, a exemplo do BIRD e do XORP, o Quagga é uma das soluções mais populares porque sua interface de linha de comando é bastante similar ao sistema IOS da Cisco, o que torna sua operação natural para aqueles que já trabalham com caixas da Cisco. O objetivo deste artigo é listar os passos necessários para instalar o Quagga e manipular seus principais arquivos de configuração para reproduzir aquelas configurações de roteamento dinâmico tradicionalmente realizadas nos roteadores Cisco. Por isso nosso foco está na ferramenta em si, não nas configurações de roteamento propriamente ditas.

A primeira etapa consiste na instalação do Quagga, tarefa bastante simples e rápida através do APT em distribuições Linux baseadas no Debian:

root@Router:/# apt-get install quagga

Observação: Antes de fazer qualquer configuração de roteamento, é importante lembrar que o Linux não se comporta como roteador por padrão, negando todo o encaminhamento de pacotes entre redes distintas. Para instruir o kernel do Linux a permitir roteamento entre redes, tanto em ambientes IPv4 como IPv6, podemos utilizar os comandos abaixo:

root@Router:/# echo "1" > /proc/sys/net/ipv4/ip_forward
root@Router:/# echo "1" > /proc/sys/net/ipv6/conf/all/forwarding

Depois de instalado, os arquivos de configuração ficam armazenados em /etc/quagga. Uma boa prática para facilitar as configurações futuras é criar um diretório dentro do próprio diretório de configurações (/etc/quagga) com exemplos dos arquivos de configuração (disponíveis na documentação) para cada um dos daemons, procedimento que pode ser realizado através dos comandos abaixo:

root@Router:/# mkdir /etc/quagga/examples
root@Router:/# cp /usr/share/doc/quagga/examples/* /etc/quagga/examples

O primeiro arquivo de configuração importante que fica em /etc/quagga é denomindo daemons. Esse arquivo é bastante simples e deve ser editado para permitir aqueles daemons associados com os protocolos de roteamento dinâmico que o administrador pretende configurar na rede. Por exemplo, se queremos configurar o OSPF na rede, temos que ativar os daemons zebra (a base do Quagga) e o ospfd (responsável pelo OSPF).

#--- em /etc/quagga/daemons
# This file tells the quagga package which daemons to start
zebra=yes
bgpd=no
ospfd=yes
ospf6d=no
ripd=no
ripngd=no

Sempre que houver alguma alteração nesse arquivo ou nos demais arquivos de configuração do Quagga, o serviço deve ser reinicializado para que as alterações sejam aplicadas, procedimento que pode ser realizado através do comando abaixo:

root@Router:/# /etc/init.d/quagga restart

Os demais arquivos de configuração existentes no diretório /etc/quagga vão depender dos protocolos de roteamento dinâmico que serão utilizados na rede. Continuando com o exemplo do OSPF, precisamos criar dois arquivos de configuração que podem ser copiados a partir daquele diretório de exemplos. Além disso, é interessante dedicar um usuário/grupo para a ferramenta e é importante dar os devidos privilégios de acesso para que as configurações possam ser devidamente interpretadas pelo SO:

root@Router:/# cp /etc/quagga/examples/zebra.conf /etc/quagga
root@Router:/# cp /etc/quagga/examples/ospfd.conf /etc/quagga
root@Router:/# chown quagga.quagga /etc/quagga/*.conf
root@Router:/# chmod 640 /etc/quagga/*.conf

Se estivéssemos trabalhando com outros protocolos de roteamento seria necessário criar o respectivo arquivo de configuração associado ao daemon, por ex.: ripd.conf (RIP), ripngd.conf (RIPNG), bpgd.conf (BGP-4) e ospf6d.conf (OSPFv3). As configurações de roteamento dinâmico são realizadas através de edição nos arquivos de configuração (.conf). Outra opção é deixar o arquivo de configuração em branco para que as configurações sejam posteriormente realizadas via interface de linha de comando (acesso telnet), similar o que ocorre nas caixas Cisco. Cada daemon do Quagga, quando executado, passa a responder acessos telnet do localhost em suas respectivas portas padrões, que são:

  • 2601 - zebra 
  • 2602 - ripd
  • 2603 - ripng
  • 2604 - ospfd
  • 2605 - bgpd
  • 2606 - ospf6d

Ou seja, para configurar o OSPF na máquina Linux executando o Quagga basta editar manualmente o arquivo ospfd.conf ou mesmo realizar um acesso telnet ao localhost na porta 2604, lógica que vale para o daemon zebra na configuração de roteamento estático (e configurações gerais) e para os demais daemons associados aos outros protocolos de roteamento dinâmico:

root@Router:/# telnet localhost 2604

Por padrão, o acesso telnet aos daemons do Quagga somente são permitidos através do próprio localhost. Para permitir esse acesso através de outras máquinas da rede, o arquivo de configuração /etc/quagga/debian.conf tem que ser editado para permitir outros endereços. Por exemplo, no arquivo de configuração abaixo estamos permitindo acesso telnet aos daemons zebra e ospfd também a partir do host 192.168.100.11, além do localhost (127.0.0.1). 

#--- em /etc/quagga/debian.conf
vtysh_enable=yes
zebra_options=" --daemon -A 127.0.0.1 192.168.100.11"
bgpd_options=" --daemon -A 127.0.0.1 "
ospfd_options=" --daemon -A 127.0.0.1 192.168.100.11"
ospf6d_options="--daemon -A 127.0.0.1"
ripd_options=" --daemon -A 127.0.0.1"
ripngd_options="--daemon -A 127.0.0.1"
isisd_options=" --daemon -A 127.0.0.1"

Outro detalhe importante é que essa configuração via telnet através da linha de comando acaba sendo ruim na prática porque fica fragmentada por daemon, ou seja, para configurações relacionadas a rotas estáticas temos que realizar um acesso telnet na porta 2601 (zebra), enquanto que para realizar as configurações do OSPF temos que fazer outro acesso telnet na porta 2604 (ospfd). Para contornar essa dificuldade, existe uma ferramenta integrada de linha de comando denominada vtysh que permitimos na primeira linha de configuração do exemplo anterior (vtysh_enable=yes).

A ferramenta vtysh salva todas as configurações realizadas via linha de comando em um arquivo único denominado Quagga.conf. Para organizar melhor as configurações dos daemons individuais, podemos definir nas configurações do vtysh que as configurações dos daemons sejam salvas nos respectivos arquivos de configuração, ou seja, uma configuração de OSPF ficará salva apenas no arquivo ospfd.conf e assim por diante. Para fazê-lo é necessário editar o arquivo vtysh.conf e comentar sua primeira linha que permite a integração da configuração:

#--- em /etc/quagga/vtysh.conf
!service integrated-vtysh-config
hostname Quagga-Router
username root
password SENHA

Observação.: Uma dica útil em relação à ferramenta vtysh é que, por padrão, a cada vez que o administrador executa um comando aparece a palavra "END" na tela, o que requer que seja pressionada a tecla "q" para continuar. Para evitar que isso aconteça, basta incluir a seguinte linha no arquivo /etc/environment:  VTYSH_PAGER=more

Apesar das configurações poderem ser realizadas via linha de comando através de acesso remoto (telnet ou vtysh) aos daemons do Quagga, de maneira similar ao que ocorre nas caixas Cisco, particularmente acho que é ainda mais prático fazer essas configurações diretamente nos arquivos de configuração (.conf), afinal a sintaxe é a mesma. Por exemplo, com base no cenário apresentado na figura abaixo, para realizar uma configuração simples do OSPF podemos editar o arquivo /etc/quagga/ospfd.conf da seguinte maneira:


#--- em /etc/quagga/ospfd.conf
!
hostname Quagga-Router
password SENHA
!
interface eth0
  description "Link to Router B" 
  ip address 192.168.200.1/30
  link-detect
!
interface eth1
  description "Link to Network 192.168.100.0/24"
  ip address 192.168.100.1/24
  link detect
!
router ospf
  network 192.168.200.0/30 area 0
  network 192.168.100.0/24 area 0
!

Por fim, vale reforçar que qualquer alteração nos arquivos de configuração requer a reinicialização do serviço Quagga e seus daemons: /etc/init.d/quagga restart. Agora é com vocês...

Samuel.

5 comentários:

  1. Boa noite, Samuel pode republicar seu post no meu www.flexpabx.com.br com sua autoria?

    ResponderExcluir
    Respostas
    1. Sim, fique à vontade para compartilhar.
      Favor manter link para o Blog LabCisco.

      Excluir
  2. Não preciso configurar bgp? só habilitar o serviço?

    ResponderExcluir
    Respostas
    1. É necessário fazer todas as configurações normalmente, como se fosse um roteador Cisco.

      Excluir