segunda-feira, 12 de fevereiro de 2007

Rancid: Ferramenta para Controle de Configuração de Equipamentos de Redes

Disclaimer: É claro que todos nós fazemos backups regulares dos equipamentos que administramos. Também temos uma ferramenta prática e amigável para controlar as alterações de configuração e, até por isso, eu acho que este post não será tão útil...

Rancid - Really Awesome New Cisco confIg Differ - é um programa que pode ser utilizado para realizar backups e controle de versões de configuração de forma simples e rápida e não somente de equipamentos Cisco (como pode parecer pelo nome). Atualmente o Rancid faz backups de equipamentos Cisco, Extreme, Juniper, Nortel Alteon, etc. e pode rodar em FreeBSD, Linux ou MacOS X.

Esta ferramenta é muito utilizada e já foi comentada em pelo menos duas reuniões da NANOG - uma apresentação e um tutorial. Sabe-se que o Rancid é utilizado como ferramente de backup nas empresas: AOL, Global Crossing, MFN, NTT America, Certainty Solutions Inc.

Em linhas gerais o Rancid realiza os seguintes procedimentos:
- Efetua login nos equipamentos listados no arquivo router.db;
- Roda alguns comandos em busca de informações específicas por tipo de equipamento;
- Formata as saídas dos comandos;
- Envia as diferenças para um e-mail;
- Salva as diferenças em uma base para controle de versões (CVS).

O primeiro passo para ter funcionando o Rancid é fazer um instalação: 1) através do código-fonte ou 2) através do ports do FreeBSD. No caso deste exemplo, estamos utilizando a opção 2 (ports do FreeBSD). Existem também algumas depedências que devem ser instaladas para o correto funcionamento, tais como: gcc, make ;-), cvs, perl, expect e diffutils. Eu ainda precisei instalar para este exemplo o cvsweb e viewcvs (todos disponíveis no ports):

cd /usr/ports/net-mgmt/rancid && make install clean
cd /usr/ports/devel/cvsweb && make install clean
cd /usr/ports/devel/viewcvs && make install clean

O primeiro arquivo que deve ser configurado é o rancid.conf - no exemplo, este arquivo está no diretório /usr/local/etc/rancid. Neste arquivo iremos incluir um grupo de equipamentos, configurar o diretório de trabalho do Rancid (onde armazenaremos as informações de backup) e o diretório raíz do CVS e opcionalmente um e-mail para enviar as diferenças de configuração. As opções que utilizaremos são:

BASEDIR=/usr/local/var/rancid; export BASEDIR
CVSROOT=$BASEDIR/CVS; export CVSROOT
LIST_OF_GROUPS="backbone"

Podemos utilizar diversos grupos e, para isso, basta copiar a mesma configuração que iremos fazer para o grupo backbone para os demais.

É extremamente aconselhável que o Rancid rode a partir de um usuário sem privilégios e dedicado para o rancid. Neste exemplo criamos um usuário rancid que será responsável por rodar o Rancid e armazenar as informações de login no arquivo $HOME/.cloginrc.

O arquivo .cloginrc é o arquivo que armazena as informações de controle de acesso para os equipamentos. Este arquivo deve ser criado no diretório home do usuário que irá rodar o Rancid, sempre lembrando que somente o usuário rancid terá permissão para ler e escrever neste arquivo. A sintaxe do arquivo é a seguinte:

$ more /home/rancid/.cloginrc
add password cisco_router
add password cisco_switch

add password extreme_switch
add autoenable extreme_switch 1
add user extreme_switch

Para mais informações sobre a sintaxe deste arquivo, consulte a documentação oficial do cloginrc.

É importante criar a árvore de diretórios para os backups e para o CVS. Para isso devemos executar o script rancid-cvs que está no diretório /usr/local/bin/rancid-cvs. Em nosso exemplo, este script irá criar uma árvore de diretórios para o grupo backbone dentro do diretório $BASEDIR e $CVSROOT (definido no arquivo rancid.conf).

$ cd /usr/local/var/rancid
$ /usr/local/bin/rancid-cvs

Em seguida, é necessário fornecer informações para que o Rancid inicie o backup dos equipamentos e é importante informar quais equipamentos e de que fabricante estes equipamentos são no arquivo router.db. A sintaxe deste arquivo é muito simples e pode ser consultada aqui. O modelo que iremos utilizar é:

$ cd /usr/local/var/rancid/backbone/
$ more router.db
cisco_router:cisco:up
cisco_switch:cat5:up
extreme_switch:extreme:up

É importante notar que os switches Cisco que roda IOS devem ser cadastrados como tipo "cisco". Para que o Rancid conecte corretamente nos equipamentos é necessário que o nome cisco_switch, extreme_switch, etc resolva para um endereço IP; que pode ser por DNS ou através do arquivo /etc/hosts.

Para testar as configurações basta rodar o script rancid-run. Se os arquivos de log (em /usr/local/var/backbone/log) e os arquivos de configuração (em /usr/local/var/backbone/configs) estiverem OK, então basta incluir uma entrada na crontab do usuário rancid para rodar o script periodicamente. Como exemplo, estamos rodando todos os dias às 3:00 horas da manhã:

$ crontab -l
0 3 * * * /usr/local/bin/rancid-run

Se o apache estiver funcionando corretamente, então será possível acessar as configurações através de um página web (utilizando o cvsweb). Basta incluir o caminho para o diretório $CVSROOT (definido no rancid.conf) no arquivo de configuração do cvsweb (/usr/local/etc/cvsweb/cvsweb.conf) conforme o exemplo abaixo e acessar a URL: http://servidorancid/cgi-bin/cvsweb.cgi.

[ snip! ]
@CVSrepositories = (
'local' => ['My CVS Repository', '/usr/local/var/rancid/CVS'],
[ snip!]

Pode-se obter mais informações sobre o Rancid na página oficial dos desenvolvedores.

Nenhum comentário: