quarta-feira, novembro 30, 2011

Parte 1.2 - Entendendo o iBGP e o eBGP




A topologia acima mostra a configuração do BGP tanto com iBGP como com eBGP. O iBGP (internal BGP) é o BGP configurado para peers do mesmo AS. O eBGP (external BGP) é configura entre peers de diferentes AS.

Uma das razões para configurar o iBGP é no caso de um AS servir como AS de tránsito (Transit AS). Na topologia acima o AS 200 serve como AS de tránsito entre o AS 100 e o AS 300.

Um aspecto importante para considerar no BGP é o seguinte: para enviar informações para um AS externo é necessário haver uma garantia de acessibilidade das redes. Para garantir a acessibilidade das redes os seguintes procesos são feitos:
  • iBGP entre roteadores do mesmo AS.
  • Redistribuição do BGP dentro os IGPs que estão funcionando no AS.
Os comentários acima tratam muito sobre ter uma rede sincronizada.

Parte 1.1 - Funcionamento do BGP




O BGP utiliza o TCP porta 179 como protocolo de transporte. Dois roteadores BGP estabelecem uma conexão TCP entre si e trocam mensagens (open, confirm) para estabelecer uma relação de vizinhança (passam a ser considerados neighbors ou peers).



Os roteadores com BGP realizam um intercâmbio de informações de acessibilidade. Essa informação de acessibilidade de redes é representada como o caminho completo que uma rota precisa realizar para chegar até a rede de destino. Esses caminhos são os números de AS no BGP.



BGP peers trocam entre si suas tabelas BGP completas inicialmente. Depois de uma troca completa são enviados atualizações incrementais assim que muda a tabela de roteamento.



O BGP guarda um número de versão da tabela BGP e este número é o mesmo entre todos os peers BGP. O número de versão da tabela aumenta sempre que houver uma atualização de roteamento.



Além disso o BGP também envia pacotes keepalives para verificar se a conexão entre os peers BGP continuam ativas.

domingo, setembro 04, 2011

Redundância de Enlaçes com Rotas Estáticas



Quando se possui duas conexões redundantes com um ou dois provedores surge a necessidade de configurar a redundância no processo de roteamento.

Como neste caso não será utilizado o BGP como protocolo de roteamento externo resta a configuração de rotas estáticas com cada um dos provedores. Para que isso seja feito de maneira a permitir a redundância automática a abordagem clássica é a seguinte:


ip route 0.0.0.0 0.0.0.0 serial0
ip route 0.0.0.0 0.0.0.0 serial1 10


Ou seja, no roteador de borda são configuradas duas rotas estáticas, cada uma delas utilizando o enlaçe serial correspondente a cada um dos provedores. A diferença entre ambas rotas estáticas está no valor da métrica 10 configurado na segunda rota estática. Como ambas possuem o mesmo destino (na verdade ambas são rotas default) apenas aquela com melhor métrica será colocada na tabela de roteamento.

A redundância estará garantida no cado de falha do enlaçe serial0. Caso ele esteja indisponível (por exemplo, “line protocol down”) a rota estática do enlaçe serial1 será colocada na tabela de roteamento no lugar da primeira.

Porém esta redundância acaba obrigando a que um dos enlaçes seriais fique sem utilização nenhuma. Caso seja desejado utilizar ambos enlaçes (digamos que possuem a mesma capacidade) existem inúmeras abordagens. Seguindo o exemplo anterior a forma mais simples é:

ip route 0.0.0.0 0.0.0.0 serial0
ip route 0.0.0.0 0.0.0.0 serial1


Porém é importante considerar alguns detalhes sobre essa possível implementação. Em primeiro lugar o comportamento padrão do roteador CISCO será em executar um balançeamento de tráfego no formato “round-robin”. Em segundo lugar podemos ter o seguinte problema ao executar o balançeamento de carga com “round-robin”:

Temos um conjunto de pacotes que precisa ser enviado para o mesmo destino. Como o “round-robin” vai enviar intercaladamente pacotes através de cada interface esses pacotes podem tomar caminhos com atrasos muito diferentes para chegar ao seu destino. E isso pode acabar ocasionando problemas.

A melhor solução é ativar (ou verificar se está ativo) em todas as interfaces a funcionalidade de ip route-cache. Esta funcionalidade permite que o roteador mantenha um “cache” de todos os destinos que estão sendo utilizados pelos pacotes e permita “mapear” um determinado conjunto de pacotes com um determinado destino através de uma única interface de saída. Isso permite tornar o balançeamento de tráfego através de múltiplos enlaçes seriais de maneira mais inteligente.

Fonte:

Acessado em 29/05/2006 às 13:18 hs

segunda-feira, julho 04, 2011

Script de Backup de OpenLDAP - ldapsearch


Introdução


Para realizar backups de bases LDAP existem muitas ferramentas que podem ser utilizadas. Uma maneira de realizar um backup simples e remoto é utilizando o comando ldapsearch.

Neste post será apresentado o script bkp-ldap.sh e de todas as configurações necessárias para seu funcionamento.

Pacotes Necessários


Para utilizar o comando ldapsearch é necessário ter instalado o seguinte pacote:


[root@horus ~]# yum info openldap-clients
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: centos.pop.com.br
* extras: centos.pop.com.br
* updates: centos.pop.com.br
Installed Packages
Name       : openldap-clients
Arch       : i386
Version    : 2.3.43
Release    : 12.el5_6.7
Size       : 367 k
Repo       : installed
Summary    : Client programs for OpenLDAP.
URL        : http://www.openldap.org/
License    : OpenLDAP
Description: OpenLDAP is an open-source suite of LDAP (Lightweight Directory Access
          : Protocol) applications and development tools. LDAP is a set of
          : protocols for accessing directory services (usually phone book style
          : information, but other information is possible) over the Internet,
          : similar to the way DNS (Domain Name System) information is propagated
          : over the Internet. The openldap-clients package contains the client
          : programs needed for accessing and modifying OpenLDAP directories.


Verificando quais binários e manuais foram instalados pelo pacote openldap-clients:


[root@horus base-ldap-neptuno]# rpm -ql openldap-clients
/usr/bin/ldapadd
/usr/bin/ldapcompare
/usr/bin/ldapdelete
/usr/bin/ldapmodify
/usr/bin/ldapmodrdn
/usr/bin/ldappasswd
/usr/bin/ldapsearch
/usr/bin/ldapwhoami
/usr/share/man/man1/ldapadd.1.gz
/usr/share/man/man1/ldapcompare.1.gz
/usr/share/man/man1/ldapdelete.1.gz
/usr/share/man/man1/ldapmodify.1.gz
/usr/share/man/man1/ldapmodrdn.1.gz
/usr/share/man/man1/ldappasswd.1.gz
/usr/share/man/man1/ldapsearch.1.gz
/usr/share/man/man1/ldapwhoami.1.gz


O cliente ldap também precisa estar instalado no sistema operacional LINUX (distribuição CENTOS 5.6).


Verificando a instalação do pacote openldap:


[root@horus base-ldap-neptuno]# yum info openldap
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: centos.pop.com.br
* extras: centos.pop.com.br
* updates: centos.pop.com.br
Installed Packages
Name       : openldap
Arch       : i386
Version    : 2.3.43
Release    : 12.el5_6.7
Size       : 593 k
Repo       : installed
Summary    : The configuration files, libraries, and documentation for OpenLDAP.
URL        : http://www.openldap.org/
License    : OpenLDAP
Description: OpenLDAP is an open source suite of LDAP (Lightweight Directory Access
          : Protocol) applications and development tools. LDAP is a set of
          : protocols for accessing directory services (usually phone book style
          : information, but other information is possible) over the Internet,
          : similar to the way DNS (Domain Name System) information is propagated
          : over the Internet. The openldap package contains configuration files,
          : libraries, and documentation for OpenLDAP.


Verificando quais arquivos e bibliotecas foram instaladas pelo pacote openldap:


[root@horus base-ldap-neptuno]# rpm -ql openldap
/etc/openldap
/etc/openldap/cacerts
/etc/openldap/ldap.conf
/usr/lib/liblber-2.3.so.0
/usr/lib/liblber-2.3.so.0.2.31
/usr/lib/libldap-2.3.so.0
/usr/lib/libldap-2.3.so.0.2.31
/usr/lib/libldap_r-2.3.so.0
/usr/lib/libldap_r-2.3.so.0.2.31
/usr/share/doc/openldap-2.3.43
/usr/share/doc/openldap-2.3.43/ANNOUNCEMENT
/usr/share/doc/openldap-2.3.43/CHANGES
/usr/share/doc/openldap-2.3.43/COPYRIGHT
/usr/share/doc/openldap-2.3.43/LICENSE
/usr/share/doc/openldap-2.3.43/README
/usr/share/man/man5/ldap.conf.5.gz
/usr/share/man/man5/ldif.5.gz
/usr/share/openldap



Configurações do Sistema


A configuração do cliente ldap será feita no arquivo /etc/openldap/ldap.conf.



[root@horus ~]# vim /etc/openldap/ldap.conf

#####################################
#                                                             #
#  Configurações do Cliente LDAP            #
#                                                             #
#####################################
#
# LDAP Defaults
#
# See ldap.conf(5) for details
# This file should be world readable but not world writable.
#
# Specifies the default base DN to use when performing ldap operations.
BASE dc=ufcspa,dc=edu,dc=br
#
# Specifies the default bind DN to use when performing ldap operations.
BINDDN  cn=qualquer,dc=ufcspa,dc=edu,dc=br
#
# Specifies the URI(s) of an LDAP server(s) to which the LDAP library should connect.
# The URI scheme may be either ldap or ldaps which refer to LDAP over TCP and LDAP over SSL (TLS)
# respectively.
URI ldap://192.168.1.1/
#
# Specifies the name(s) of an LDAP server(s) to which the LDAP library should connect.
HOST qualquer.ufcspa.edu.br
#
# Specifies if the client should automatically follow referrals returned by LDAP servers.
REFERRALS off
#
# Specifies a size limite to use when performing searches. A zero (0) means unlimited.
SIZELIMIT   0
#
# Specifies a time limit to use when performing searches. A zero (0) means unlimited.
TIMELIMIT   0
#
# Specifies how alias dereferencing is done when performing a search.
# If it is configured never then aliases are never dereferenced. This is the default.
DEREF           never
#
# TLS
#TLS_CACERT /etc/openldap/cacerts/myca-key-cert.pem
#
#  Specifies what checks to perform on server certificates in a TLS session
#  The value "never" means that the client will not request or check any server certificate.
TLS_REQCERT never
#
#TLS_CACERTDIR /etc/openldap/cacerts



Implementação do Script bkp-ldap.sh



#!/bin/bash
#
#
#################################
#                                                      #
# Script de Backup da Base LDAP     #
#                                                      #
#################################
#
#
# ============
# Dependências
# ============
#
# O comando ldapsearch utiliza configurações do cliente ldap do sistema
# operacional configurado em /etc/openldap/ldap.conf
#
#
# =================
# Variáveis Globais
# =================
#
# Senha para se conectar no Servidor LDAP
SENHA='segredo”'
#
#
# Servidor LDAP
HOST='qualquer.ufcspa.edu.br'
#
#
# Repositorio para deixar os arquivos de backup
REPOSITORIO='/backup/base-ldap-neptuno'
#
#
# Registra o momento em que o arquivo foi criado. Formato: ano-mes-dia-hora-minuto-segundo
HORARIO=$( date +%F-%H-%M-%S )
#
#
# ==================
# Execução do backup
# ==================
#
# Os seguintes parâmetros são utilizados:
#     -w    (solicita senha)
#     -D    (indica qual será o binddn a ser utilizado na conexão com a base)
#     -x    (indica auteticação simples e não por SASL)
#     -LLL  (indica que o OUTPUT do comando será no formato LDIF)
#
ldapsearch -w "$SENHA" -D"cn=qualquer,dc=ufcspa,dc=edu,dc=br" -x -LLL >> "$REPOSITORIO"/baseLDAP-"$HORARIO".ldif
#
#
#
# =================
# Validação de erro
# =================
#
if [ $? -ne 0 ]; then
{
  echo -ne "Erro - Nao foi realizado o Backup da base LDAP em $HOST" | mail -s"Erro - Backup Base LDAP $HOST" qualquer@ufcspa.edu.br
  exit 1
}
fi
#
#
#
# ========================================
# Geração de relatório de status do backup
# ========================================

RELATORIO=$( /usr/bin/find "$REPOSITORIO" -atime +5 )

/usr/bin/find "$REPOSITORIO" -atime +5 -exec rm -f {} \;

echo -ne "Foram removidos os seguintes arquivos antigos:\n\n$RELATORIO\n" | mail -s"Backup Base LDAP $HOST" qualquer@ufcspa.edu.br

exit 0        



Configuração da CRON


Para poder agendar a realização periódica do script é necessário fazer as seguintes configurações na CRON.



[root@horus ~]# crontab -e
0 3 * * * /root/bin/bkp-ldap.sh 2>&1 > /dev/null