Walter Guedes Pinheiro Filho <walter@rnp.br>
Centro de Engenharia e Operações (CEO)
Rede Nacional de Ensino e Pesquisa (RNP)
Resumo
1. Introdução
2. Onde encontrar e estrutura de funcionamento
3. Iniciando a instalação
4. Dividindo em etapas
5. Funcionalidades
6. Automatizando o processo
7. Comparando as configurações
8. Conclusão
Resumo
Este artigo contém um guia de instalação e configuração da ferramenta Pancho, disponível gratuitamente na Web, cujo objetivo é automatizar a manutenção das configurações de uma rede de roteadores Cisco de uma empresa.
1. Introdução
Falar sobre a necessidade de manter o backup de informações importantes de uma rede chega a ser exaustivo. Isto ocorre porque, em muitos casos, questões básicas como as que serão tratadas aqui, não são vistas com a seriedade e importância que merecem.
O objetivo deste artigo é apresentar aos administradores de redes a ferramenta Pancho, bastante útil, desenvolvida com o objetivo de automatizar a manutenção das configurações de uma rede de roteadores Cisco de uma empresa.
2. Onde encontrar e estrutura de funcionamento
Esta ferramenta está disponível em http://pancho.lunarmedia.net e, atualmente, encontra-se na versão 3.4. O Pancho foi idealizado e desenvolvido por Charles J Menzes <charles@lunarmedia.net>. Trata-se de um script modular, desenvolvido em PERL.
O processo de funcionamento do Pancho baseia-se na interação entre os módulos PERL e um agente SNMP (Simple Network Management Protocol). No momento da execução do script, uma consulta ao agente SNMP do dispositivo remoto é realizada, através de uma requisição do tipo GET REQUEST. O roteador, por sua vez, verifica as permissões desta requisição e disponibiliza a informação desejada.
Portanto, tome nota do que é necessário para garantir o sucesso da instalação desta ferramenta:
- Servidor de TFTP, conectado na mesma rede dos dispositivos remotos ou, no máximo, em uma rede onde haja acesso aos roteadores;
- Suporte à linguagem PERL e ao módulo NET::SNMP (*)
3. Iniciando a instalação
Após a transferência do pacote, é necessário descomprimir o arquivo e, posteriormente, listar e extrair os arquivos. Para isto, usamos os comandos gunzip e tar:
gunzip pancho-v3.2.tar.gz
tar -xvf pancho-v3.2.tar
Neste momento, será criado um diretório com o nome e a versão do programa, contendo os arquivos que formam o mesmo, que são em número de 8 (oito), a saber: AUTHOR, CHANGES, COPYRIGHT, CREDITS, LICENCE, LOGGING, README e pancho. Observe:
Figura 1 - Processo de descompactação do arquivo
O próximo passo é proceder com a leitura minuciosa do conteúdo desses arquivos. Você irá notar que a documentação é muito resumida e de fácil entendimento, até porque, trata-se simplesmente de um conjunto de instruções para a manutenção de facilidades nos roteadores.
4. Dividindo em etapas
Utilizando o editor de sua preferência (pode ser o vi), edite o arquivo pancho. Navegue pelo arquivo, com o objetivo de ter visão geral das funções que o programa pode executar. Em seguida, posicione o cursor na linha 30 e adicione a designação de sua "community," entre aspas:
my $community = 'COMMUNYTY'; # your RW snmp community string
Um pouco mais abaixo, será solicitado a identificação do servidor de tftp.
my $tftpserver = ""; # ip/hostname/fqdn of your tftps
Na linha 34, será necessário incluir todos os dispositivos da rede que farão uso da ferramenta. Não separe suas designações por vírgulas, dois pontos, ou qualquer outro caractere. Deixe apenas um espaço em branco entre eles:
my @devices = qw(DEVICE1 DEVICE2 DEVICE3); # list of network devices
Os dispositivos deverão estar dentro dos parênteses, lembrando que devem estar separados apenas por um espaço em branco.
A próxima opção deverá ser utilizada, caso você queria armazenar as informações do processo de cópia, em arquivos exclusivamente criados para esta função. Para configurar esta facilidade, posicione o cursor na linha 38:
my $logfile = "/PATH/THE/LOG_FILE"; # full path to your logfile
Pronto! Com estas informações, você já pode começar a usar o pancho.
Figura 2 - Conteúdo do arquivo "pancho"
5. Funcionalidades
Agora, veremos como executar o script, bem como as funcionalidades embutidas nesta ferramenta. Certifique-se que você está dentro do diretório onde o pacote foi instalado.
O Pancho pode ser ativado com as seguintes opções:
-
upload (./pancho --upload)
Indica que o Pancho enviará um ou mais arquivos de configuração a um dispositivo remoto.
-
download (./pancho --download)
Indica que o Pancho receberá um ou mais arquivos de configuração de um dispositivo remoto ou um grupo deles.
-
commit
Indica que o Pancho efetuará a cópia da configuração alterada para a NVRAM, em um dispositivo remoto. Equivale a um comando "write memory" ou "copy run start" em um roteador Cisco.
-
filename
Especifica o nome de um arquivo local que o Pancho deverá enviar a um dispositivo remoto.
-
list
Para utilizar esta opção, é necessário criar um arquivo de texto (com extensão *.txt) contendo os hostnames ou endereços IP dos roteadores. As informações devem estar dispostas em um endereço por linha. Veja o exemplo:
200.202.127.1
device1.dominio.br 200.202.127.2 oudevice2.dominio.br 200.202.127.2
device2.dominio.br
-
host
Caso você opte por executar as ações a partir de um host, você deverá informar o hostname ou endereço IP, nesta opção.
./pancho --host ou
-
server
Utilize esta opção, se você preferir que o Pancho pegue ou guarde as informações em um servidor TFTP. Escolha, preferencialmente, informar os endereços IP. De qualquer forma, um host que seja capaz de resolver os nomes também pode ser usado, embora a opção preferida seja utilizar o endereçamento IP.
-
string
É usada para especificar a string RW usado no roteador. Esta opção é opcional, porque pode ser inserida diretamente no script. Uma maneira fácil de configurar esta string no roteador é através do seguinte comando:
snmp-server community private RW
No caso acima, a string refere-se ao termo "private". Assim, temos:
./pancho --string private
-
path
É usada para especificar um subdiretório, dentro do servidor TFTP, onde você deseja guardar os arquivos. Por exemplo:
Se seu diretório é /tftpboot, por default, os arquivos serão gravados nesse diretório.
/tftpboot/router.cfg
De qualquer forma, se você deseja guardar esses arquivos em outro diretório, você deve especificá-lo, utilizando a opção "--path" :
./pancho --path /routers/3600
Neste exemplo, os arquivos contendo as configurações, irão para o seguinte diretório:
/tftpboot/routers/3600/router.cfg
-
reload
Solicita, ao roteador remoto, um reload imediato.
-
start
Permite a você especificar quais ações devam ser tomadas na NVRAM ou STARTUP-CONFIG.
-
regex
Esta opção é um tanto difícil de ser usada eficazmente. Ela trabalha em conjunto com a opção "-list", ou quando se tem um opção que defina os dispositivos influenciados pela execução do script. O regex funciona como um filtro, excluindo os dispositivos que não fazem parte do grupo disposto no arquivo "*.txt", descrito anteriormente.
REGEX é uma abreviação de Regular Expression. Pode ser que você considere esta opção inútil se não tiver um bom conhecimento de como se trabalha com expressões regulares. Caso seja de seu interesse, acesse http://py-howto.sourceforge.net/regex/regex.html.
Vejamos um exemplo:
Lembra-se do arquivo "*.txt", que você criou, quando apresentamos a opção "-list" ? Vamos supor que os dados informados estão dispostos da seguinte forma:
core1.dominio.br
core2.dominio.br
border1.dominio.br
border2.dominio.br
border3.dominio.br
Queremos afetar somente os roteadores de núcleo, deixando fora os de borda. Para não ter que editar o arquivo, podemos usar uma expressão regular, solicitando que o Pancho faça isso. Nossa expressão regular será "^core". Observe que este é um exemplo básico, onde consideramos apenas os dispositivos que começam com as letras "core".
Neste exemplo, o Pancho agirá somente nos roteadores:
core1.dominio.br
core2.dominio.br
Assim, uma possível linha de comando do Pancho, que fizesse uso desta funcionalidade ficaria da forma:
./pancho --download \
--list routers.txt \
--string private \
--server 10.6.21.1 \
--regex ^core
Este é um exemplo razoavelmente simples. Algumas expressões regulares podem ser bem mais complexas e, exatamente por isso, podem ser muito poderosas.
Figura 3 - Opções de Utilização
6. Automatizando o processo
Considerando que a utilização do Pancho é mais justificável quando se tem um número razoável de roteadores, a criação de um script para automatizar o processo é natural. A seguir, tem-se o exemplo de um script utilizado para obter, diariamente, a configuração de 28 roteadores. O mesmo é executado através de uma rotina do crontab.
!/bin/sh
# Diretório de Backup
TFTPDIR='/home/'
BACKUP_CFG_DIR='/home/config_routers/'
# Extraindo data de hoje
DATA=`date +%d-%h-%Y`
#acertar UF's
for UF in ac al am ap ba ce df es go ma mg ms mt pa pb pe pi pr rj rn ro rr rs sc se sp to
do
touch $TFTPDIR/$UF.cfg
chmod 666 $TFTPDIR/$UF.cfg
done
/usr/local/Pancho-v1.x/pancho -download
#acertar UF's
for UF in ac al am ap ba ce df es go ma mg ms mt pa pb pe pi pr rj rn ro rr rs sc se sp to
do
mv $TFTPDIR/$UF.cfg $BACKUP_CFG_DIR/$UF/$UF.$DATA.cfg
chmod 600 $BACKUP_CFG_DIR/$UF/$UF.$DATA.cfg
done
Figura 4 - Script que realiza os backup's das Configurações de um Grupo de Roteadores
Após a execução deste procedimento, os arquivos terão o seguinte formato: ac.18-Jan-2002.cfg.
Observe que o primeiro passo foi definir os diretórios de backup. Em seguida, temos o processo de extração da data atual. Vale ressaltar que a sintaxe de alguns comandos pode variar de acordo com o Sistema Operacional utilizado. Neste caso, foi utilizado um sistema FreeBSD.
Em "acertar UF's", para cada diretório criado anteriormente (de forma manual), são criados os arquivos que guardarão as configurações:
touch $TFTPDIR/$UF.cfg
chmod 666 $TFTPDIR/$UF.cfg
Os arquivos criados têm permissões de leitura e escrita para o dono e apenas de leitura para os outros. É necessário alterar as permissões para que todos tenham permissão de leitura e escrita. Para tanto, utilizamos o comando chmod, mostrado acima.
Após a transferência das configurações, é recomendável, por questões de segurança, voltar à condição anterior, onde somente o dono dos arquivos tenha direitos de leitura e escrita. Isto é feito através do comando:
chmod 600 $BACKUP_CFG_DIR/$UF/$UF.$DATA.cfg
A instrução:
mv $TFTPDIR/$UF.cfg $BACKUP_CFG_DIR/$UF/$UF.$DATA.cfg
tem a função apenas de mover esses arquivos para um diretório específico.
7. Comparando as configurações
Quando há uma espécie de gerência compartilhada, fica um tanto quanto difícil controlar as alterações de configuração nos roteadores. Considerando que algumas dessas alterações podem causar muitas dores de cabeça, é saudável que todos os que têm acesso às máquinas tomem ciência dessas mudanças.
Isto pode ser resolvido facilmente, implementando um procedimento de COMPARAÇÃO DE BACKUP's.
Da forma que propomos, comparamos a configuração do dia atual com a configuração do dia anterior. Veja:
#Diretório de comparação de BACKUP's
BACKUP_CFG_DIR='/home/config_routers/'
BACKUP_ONTEM='/home/config_routers/backup_ontem/'
POP_CONF='/home/config_routers/diff_conf'
#Extraindo Data de Hoje e de Ontem
DATA=`date +%d-%h-%Y`
DATA_ONTEM=`date -v -1d +%d-%h-%Y`
#acertar UF's
for UF in ac al am ap ba ce
do
diff -- $BACKUP_CFG_DIR/$UF/$UF.$DATA.cfg $BACKUP_CFG_DIR/$UF/$UF.$DATA_ONTEM
.cfg > $POP_CONF/$UF.diff_conf.cfg
RESULTADO=`cat $POP_CONF/$UF.diff_conf.cfg | wc - c`
echo $RESULTADO
if [ $RESULTADO = "0" ];
then
rm -f $POP_CONF/$UF.diff_conf.cfg
else
mail -v -s "Atencao! Mudança de Configuração em $UF" fulano@dominio.br < /$POP_
CONF/$UF.diff_conf.cfg
fi
Figura 5 - Script que mostra eventuais diferenças entre a configuração do dia atual e anterior
Este procedimento é muito parecido com o anterior. Atente para o processo de extração do dia anterior pois, como já dissemos, a sintaxe pode mudar, de acordo com o sistema operacional que está sendo utilizado.
Para a comparação propriamente dita, usamos o comando "diff", apontando para outro arquivo, em outro diretório, escolhido previamente.
diff -- $BACKUP_CFG_DIR/$UF/$UF.$DATA.cfg $BACKUP_CFG_DIR/$UF/$UF.$DATA_ONTEM .cfg > $POP_CONF/$UF.diff_conf.cfg
Em seguida, incluímos a variável RESULTADO. O comando "wc -c" conta o número de bytes referentes à saída mostrada pelo comando "cat".
RESULTADO=`cat $POP_CONF/$UF.diff_conf.cfg | wc -c`
A seguir, temos a estrutura if-then-else (se-então-senão):
if [ $RESULTADO = "0" ];
then
rm -f $POP_CONF/$UF.diff_conf.cfg
else
mail -v -s "Atenção! Mudança de Configuração em $UF" fulano@dominio.com.br < /$POP_ CONF/$UF.diff_conf.cfg
fi
Se o valor assumido pela variável for igual a zero (arquivo vazio), então o mesmo é removido. Caso contrário, uma mensagem será enviada, tendo no subject uma mensagem de alerta e, no corpo, as alterações encontradas pelo comando diff.
Dessa forma, todo o pessoal que realiza a gerência da rede, sendo ela compartilhada ou não, toma ciência das mudanças nas configurações dos equipamentos.
8. Conclusão
Foi abordado neste artigo alguns motivos que confirmam a necessidade de manter os backups das configurações dos roteadores de um backone. Esta carência não está limitada somente a um grupo de equipamentos, e sim de qualquer ambiente que guarde informações primordiais de uma organização.
Decidimos falar sobre este assunto porque, há muito tempo, sentíamos a necessidade de dispor de mais segurança com as informações que trafegam em nossa rede e de encontrar uma ferramenta que unisse confiabilidade e praticidade, como o Pancho.
A RNP adotou esta ferramenta para a manutenção dos backups de todos os roteadores, o que facilita e tranqüiliza os profissionais que atuam diretamente no backbone.
NewsGeneration, um serviço oferecido pela RNP – Rede Nacional de Ensino e Pesquisa
Copyright © RNP, 1997 – 2004