O Protocolo BGP4 – Parte 2

Share Button

Alex Soares de Moura
Rede Nacional de Ensino e Pesquisa (RNP)

Introdução
Sessão BGP
Mensagens BGP
Tipos de mensagens BGP
Conclusão
Referências bibliográficas
Sites relacionados

Nesta continuação do artigo “O Protocolo BGP-4” serão examinados, de forma mais detalhada, algumas das características básicas deste protocolo. Pela extensão do assunto abordado, ainda será necessário dar continuidade a este assunto num outro artigo.

^

Introdução

Na primeira parte deste artigo, foi visto que, quando o BGP é usado entre roteadores vizinhos (neighbors) pertencentes ao mesmo AS, ele é chamado de iBGP (interior BGP), e, quando usado entre roteadores de diferentes ASs (peers), é chamado de eBGP (exterior BGP). Foi visto também que dois roteadores que suportam o BGP-4 formam uma conexão entre eles chamada de “sessão BGP”. Tal sessão faz uso do protocolo TCP para garantir o correto transporte das informações. Por fim, também foi mencionado que, em uma sessão BGP, os roteadores vizinhos trocam mensagens variadas entre eles, com determinadas características (ex.: atributos) e propósitos.

Serão vistos, neste artigo, quais são os tipos de mensagens trocadas, as informações que elas carregam e para que servem. Em seguida, serão tratados os atributos que certas mensagens possuem.

^

Sessão BGP

Antes do estabelecimento de uma sessão BGP, os roteadores “vizinhos BGP” trocam mensagens entre si para entrar em acordo sobre quais serão os parâmetros (ex.: tempo máximo de espera entre mensagens – hold time) da sessão. Não havendo discordância e nem erros durante a negociação dos parâmetros entre as partes, a sessão BGP é estabelecida. Caso contrário, serão enviadas mensagens de erro e a sessão não será aberta.

Quando a sessão é estabelecida entre os roteadores, são trocadas mensagens contendo todas as informações de roteamento, ou seja, todos os “melhores caminhos” (best path) previamente selecionados por cada um, para os destinos conhecidos. Posteriormente, eles trocarão somente mensagens de atualização das informações de roteamento (mensagens do tipo UPDATE) de forma incremental. Esta técnica mostrou-se um avanço no que se refere à diminuição de carga nas CPUs dos roteadores e na economia da largura de banda dos enlaces quando comparada a outros protocolos que ao comunicar suas atualizações, enviam, periodicamente, a totalidade das rotas instaladas em suas tabelas.

Neste sentido, o BGP é bem econômico, somente enviando mensagens de atualizações quando ocorrem mudanças nas rotas (ex.: uma rota se tornou inválida) e informando novas rotas. Caso não existam atualizações a serem informadas, os roteadores trocam apenas mensagens (do tipo KEEPALIVE) para certificar que a comunicação entre eles está “viva”, ou seja, ainda está ativa. Estas mensagens são pequenas (apenas 19 bytes), não sobrecarregando a CPU dos roteadores e nem o enlace entre eles.

Uma característica das tabelas de rotas BGP é a existência de um número de versão, que é incrementado a cada atualização feita (através das mensagens tipo UPDATE), permitindo assim a verificação de inconsistências das informações de roteamento. Abaixo, está um exemplo da versão da tabela de roteamento:

roteador> sh ip bgp BGP table version is 72076, local router ID is 192.168.4.1 Status codes: s suppressed, d damped, h history, * valid, > best, i – internal Origin codes: i – IGP, e – EGP, ? – incomplete Network Next Hop Metric LocPrf Weight Path (…)

Se existe um rápido aumento no número da versão das tabelas, pode ser indicativo de instabilidade na rede. A seguir, serão vistas quais e como são os tipos de mensagens trocadas entre os vizinhos BGP.

^

Mensagens BGP

As mensagens trocadas em sessões BGP têm o comprimento máximo de 4.096 bytes, e mínimo de 19 bytes. Todas as mensagens são compostas de, no mínimo, um cabeçalho e, opcionalmente, uma parte de dados. O formato do cabeçalho das mensagens BGP é:


Figura 1 – Formato do Cabeçalho das Mensagens BGP

Pode haver, ou não, uma seqüência dados após o cabeçalho.

Campo Marcador (Marker)

Serve para verificar a autenticidade da mensagem recebida e se houve perda de sincronização entre os roteadores vizinhos BGP. Pode ter dois formatos: caso a mensagem seja do tipo OPEN (abrir), ou se a mensagem tipo OPEN não possuir informação de autenticação, o campo deve estar todo preenchido com números um (1); senão, o campo marker terá o seu conteúdo baseado em parte do mecanismo de autenticação usado.

Campo Comprimento (Lenght)

Deve conter um número que representa o comprimento total da mensagem, incluindo o cabeçalho. Como podem haver mensagens que não possuem dados após o cabeçalho, a menor mensagem BGP enviada é de 19 bytes (16 + 2 + 1 bytes).

Campo Tipo (Type)

Deve conter um número que representa o código de um tipo de mensagem. Os tipos de mensagens são: KEEPALIVE, NOTIFICATION, OPEN e UPDATE.

^

Tipos de mensagens BGP

Como acabamos de ver, os roteadores vizinhos BGP (neighbors ou peers) que suportam BGP-4 trocam mensagens de quatro tipos antes ou durante uma sessão BGP. Veremos agora para que servem cada um destes tipos de mensagens.

OPEN

A mensagem do tipo OPEN é enviada para se iniciar a abertura de uma sessão BGP entre neighbors ou peers BGP. O formato desta mensagem é:


Figura 2 – Formato da Mensagem OPEN

Versão (Version) – características: [1 byte, inteiro, positivo].

Identifica a versão do BGP (3 ou 4). Este é um dos parâmetros negociados pelos roteadores que, normalmente, tentam entrar em acordo para usar a maior versão suportada. Não havendo possibilidade de consenso (ex.: um dos roteadores não suporta o BGP-4), eles tentam usar versões anteriores, até que coincidam. Nos roteadores Cisco, há como configurar a versão a ser usada pelos roteadores (se previamente se sabe qual versão ambos suportam), eliminando esta fase de negociação do processo de abertura da sessão BGP, implicando numa conseqüente economia de tempo.

Número do AS (AS Number) – características: [2 bytes, inteiro, positivo].

Deve conter o número do AS a qual o roteador (remetente da mensagem tipo OPEN) pertence.

Tempo de espera (Hold Time) – características: [2 bytes, inteiro, positivo].

Deve conter o valor, em segundos, do maior tempo de espera (hold time) permitido entre mensagens do tipo UPDATE ou KEEPALIVE. O BGP mantém um contador do hold time, que é reiniciado (zerado) a cada vez que uma mensagem do tipo KEEPALIVE ou UPDATE é recebida. Caso nenhuma das duas seja recebida no prazo máximo, o BGP considera que a comunicação com o outro roteador foi perdida e a sessão é encerrada, tendo que ser reiniciada novamente. Os roteadores tentam usar o menor hold time entre os dois. Caso o valor seja estabelecido como zero, a sessão será considerada como sempre “viva” (ativa) e mensagens de KEEPALIVE não serão transmitidas, pois os contadores do hold time e do KEEPALIVE não serão zerados nunca. O valor mínimo recomendado para este parâmetro é de três segundos.

Comprimento dos Parâmetros Opcionais (Optional Parameters Lenght) – características: [1 byte, inteiro, positivo].

Indica o comprimento total do campo de Parâmetros Opcionais (Optional Parameters). No caso de ausência de parâmetros opcionais, este campo será preenchido com zero.

Parâmetros Opcionais (Optional Parameters) – características: [comprimento variável].

Pode conter vários parâmetros opcionais para a negociação de abertura de uma sessão BGP. Este campo deve ser preenchido com conjuntos formados por 3 valores: [Tipo do parâmetro (1 byte), Comprimento do Parâmetro (1 byte), Valor do parâmetro (comprimento variável) ]. Um exemplo de parâmetro é o de informação de autenticação (tipo 1), usado para autenticar a sessão com o vizinho BGP.

NOTIFICATION

Este tipo de mensagem é enviada no caso de detecção de erros durante ou após o estabelecimento de uma sessão BGP. O formato da mensagem NOTIFICATION é:


Figura 3 – Formato da Mensagem Tipo NOTIFICATION

Campo Erro (Error)

Deve conter o tipo da notificação

Campo Sub Código de Erro (Error subcode)

Deve conter um valor que fornece maiores informações sobre o erro.

Campo de Dados (Data)

Pode conter dados referentes ao erro, como por exemplo, um cabeçalho mal formado (inválido), um número de AS inválido.

A tabela a seguir lista os códigos e sub-códigos de erros possíveis.

Códigos de Erro Sub códigos de Erro
1 – Erro no cabeçalho da mensagem 1 – Conexão não sincronizada
2 – Comprimento da mensagem inválido
3 – Tipo de mensagem inválido
2 – Erro na mensagem OPEN 1 – Número de versão não suportado
2 – Número de AS vizinho inválido
3 – Identificador BGP inválido
4 – Parâmetro opcional não suportado
5 – Falha na autenticação
6 – Tempo de espera inaceitável
3 – Erro na mensagem UPDATE 1 – Lista de atributos mal formada
2 – Atributo Well-Known desconhecido
3 – Atributo Well-Known faltando
4 – Erro nas flags de atributos
5 – Erro no comprimento do atributo
6 – Atributo origem inválido
7 – Loop de roteamento em AS
8 – Atributo NEXT_HOP inválido
9 – Erro no atributo Opcional
10 – Campo de rede inválido
11 – AS_path mal formado
Tabela 1 – Códigos e Sub-códigos de Erro Enviados nas Mensagens Tipo NOTIFICATION

KEEPALIVE

São mensagens trocadas periodicamente com o propósito de verificar se a comunicação entre os vizinhos está ativa. A mensagem do tipo KEEPALIVE é composta apenas do cabeçalho padrão das mensagens BGP, sem dados transmitidos após o cabeçalho. O tempo máximo permitido para o recebimento de mensagens KEEPALIVE ou UPDATE é definido pelo hold time, como foi visto na descrição do tipo de mensagem OPEN.

Para manter aberta a sessão, a mensagem de KEEPALIVE deve ser enviada antes que o prazo definido no hold time expire; caso contrário a sessão será encerrada. A recomendação é que a mensagem seja enviada em até 1/3 do tempo definido no hold time. Se o seu valor for igual a zero, então as mensagens do tipo KEEPALIVE não serão enviadas.

^

Conclusão

Num próximo artigo, veremos o último tipo de mensagem (UPDATE) do BGP com seus componentes e atributos, suas definições e aplicações. Ainda nele, serão mostrados exemplos de configurações práticas baseados na implementação do protocolo BGP-4 desenvolvida pela Cisco Systems, Inc. em situações encontradas com freqüência no dia a dia de provedores de serviços Internet. Também serão apresentados alguns problemas comumente enfrentados e exemplos de erros comuns de confguração.

 

MPLS E L2circuit COM LSP EM ROTEADORES JUNIPER

Share Button

English Title: MPLS and L2Circuit with LSP in Juniper Routers

Aproveitando o post anterior e dando continuidade nos estudos de MPLS, aproveitei o mesmo cenário já virtualizado para emular circuitos L2 com o l2circuit nos junipers.

O cenário é bem semelhante ao VPLS, no entanto nem todas as linhas de equipamentos da Juniper suportam tuneis L2 ou L3 com VPLS nesse caso a uma alternativa para o L2 é o L2CIRCUIT.

O l2circuit é balanceado entre duas LSPs e com failover automático caso uma LSP estiver inativa.

Para esse LAB utilizaremos os seguintes equipamentos virtualizados

3 – vMX (Juniper MX virtualized)

2 – CHR (Mikrotik RouterOS Cloud Hosted Router)

Topologia

topologia

Abaixo segue as configurações realizadas em todos os equipamentos.

Configuração do R1

system {
    host-name R1;
    services {
        ssh {
            protocol-version v2;
        }
    }
    syslog {
        user * {
            any emergency;
        }
        file messages {
            any notice;
            authorization info;
        }
        file interactive-commands {
            interactive-commands any;
        }
    }
}
interfaces {
    ge-0/0/0 {
        description ROUTER-2;
        mtu 2000;
        unit 0 {
            family inet {
                address 10.0.0.1/30;
            }
            family mpls;
        }
    }                                   
    ge-0/0/1 {
        description ROUTER-3;
        mtu 2000;
        unit 0 {
            family inet {
                address 10.0.3.1/30;
            }
            family mpls;
        }
    }
    ge-0/0/2 {
        description MK-01;
        flexible-vlan-tagging;
        mtu 2000;
        encapsulation vlan-ccc;
        unit 800 {
            encapsulation vlan-ccc;
            vlan-id 800;
        }
    }
    fxp0 {
        unit 0 {
            family inet {
                address 192.168.0.101/24;
            }
        }                               
    }
    lo0 {
        unit 0 {
            family inet {
                address 10.1.1.1/32;
            }
        }
    }
}
protocols {
    rsvp {
        load-balance bandwidth;
        interface ge-0/0/1.0;
        interface ge-0/0/0.0;
    }
    mpls {
        label-switched-path PRINCIPAL {
            to 10.2.1.1;
            bandwidth 10m;
            primary DIRETO;
        }
        label-switched-path SECUNDARIA {
            to 10.2.1.1;
            bandwidth 10m;
            primary VIAR3;
        }
        path DIRETO {
            10.2.1.1;
        }
        path VIAR3 {
            10.3.1.1;
            10.2.1.1;
        }
        interface ge-0/0/0.0;
        interface ge-0/0/1.0;
    }                                   
    ospf {
        traffic-engineering;
        area 0.0.0.0 {
            interface ge-0/0/0.0;
            interface ge-0/0/1.0;
            interface ge-0/0/2.0;
            interface lo0.0;
        }
    }
    ldp {
        interface ge-0/0/0.0;
        interface ge-0/0/1.0;
        interface lo0.0;
    }
    l2circuit {
        neighbor 10.2.1.1 {
            interface ge-0/0/2.800 {
                virtual-circuit-id 1;
            }
        }
    }
}
policy-options {
    policy-statement load-balancing {
        then {
            load-balance per-packet;
        }
    }
}

Configuração do R2

system {
    host-name R2;
    services {
        ssh {
            protocol-version v2;
        }
    }
    syslog {
        user * {
            any emergency;
        }
        file messages {
            any notice;
            authorization info;
        }
        file interactive-commands {
            interactive-commands any;
        }
    }
}
interfaces {
    ge-0/0/0 {
        mtu 2000;
        unit 0 {
            family inet {
                address 10.0.0.2/30;
            }
            family mpls;
        }
    }
    ge-0/0/1 {                          
        mtu 2000;
        unit 0 {
            family inet {
                address 10.0.2.1/30;
            }
            family mpls;
        }
    }
    ge-0/0/2 {
        flexible-vlan-tagging;
        encapsulation vlan-ccc;
        unit 800 {
            encapsulation vlan-ccc;
            vlan-id 800;
        }
    }
    fxp0 {
        unit 0 {
            family inet {
                address 192.168.0.102/24;
            }
        }
    }
    lo0 {
        unit 0 {
            family inet {               
                address 10.2.1.1/32;
            }
        }
    }
}
protocols {
    rsvp {
        load-balance bandwidth;
        interface ge-0/0/1.0;
        interface ge-0/0/0.0;
    }
    mpls {
        label-switched-path PRINCIPAL {
            to 10.1.1.1;
            bandwidth 10m;
            primary DIRETO;
        }
        label-switched-path SECUNDARIA {
            to 10.1.1.1;
            bandwidth 10m;
            primary VIAR3;
        }
        path DIRETO {
            10.1.1.1;
        }
        path VIAR3 {
            10.3.1.1;
            10.1.1.1;
        }
        interface ge-0/0/0.0;
        interface ge-0/0/1.0;
    }
    ospf {
        traffic-engineering;
        area 0.0.0.0 {
            interface ge-0/0/0.0;       
            interface ge-0/0/1.0;
            interface ge-0/0/2.0;
            interface lo0.0;
        }
    }
    ldp {
        interface ge-0/0/0.0;
        interface ge-0/0/1.0;
        interface lo0.0;
    }
    l2circuit {
        neighbor 10.1.1.1 {
            interface ge-0/0/2.800 {
                virtual-circuit-id 1;
            }
        }
    }
}
policy-options {
    policy-statement load-balancing {
        then {
            load-balance per-packet;
        }
    }
}


Configuração do R3

system {
    host-name R3;
    services {
        ssh {
            protocol-version v2;
        }
    }
    syslog {
        user * {
            any emergency;
        }
        file messages {
            any notice;
            authorization info;
        }
        file interactive-commands {
            interactive-commands any;
        }
    }
}
interfaces {
    ge-0/0/0 {
        mtu 2000;
        mac 52:54:00:bf:a1:0d;
        unit 0 {
            family inet {
                address 10.0.2.2/30;
            }
            family mpls;
        }
    }
    ge-0/0/1 {                          
        mtu 2000;
        mac 52:54:00:29:54:42;
        unit 0 {
            family inet {
                address 10.0.3.2/30;
            }
            family mpls;
        }
    }
    fxp0 {
        unit 0 {
            family inet {
                address 192.168.0.103/24;
            }
        }
    }
    lo0 {
        unit 0 {
            family inet {
                address 10.3.1.1/32;
            }
        }
    }
}
protocols {
    rsvp {
        load-balance bandwidth;
        interface ge-0/0/0.0;
        interface ge-0/0/1.0;
    }                                   
    mpls {
        interface ge-0/0/0.0;
        interface ge-0/0/1.0;
    }
    ospf {
        traffic-engineering;
        area 0.0.0.0 {
            interface ge-0/0/0.0;
            interface ge-0/0/1.0;
            interface lo0.0;
        }
    }
    ldp {
        interface ge-0/0/0.0;
        interface ge-0/0/1.0;
        interface lo0.0;
    }
}

Mikrotik-1

/system identity
set name=MIKROTIK-01
/interface vlan
add interface=ether2 name=vlan1 vlan-id=800
add interface=vlan1 name=vlan2 vlan-id=900
/ip address
add address=192.168.0.104/24 interface=ether1 network=192.168.0.0
add address=10.10.10.1/30 interface=vlan1 network=10.10.10.0
add address=10.20.10.1/30 interface=vlan2 network=10.20.10.0

Mikrotik-2

/system identity
set name=MIKROTIK-02
/interface vlan
add interface=ether1 name=vlan1 vlan-id=800
add interface=vlan1 name=vlan2 vlan-id=900
/ip address
add address=192.168.0.105/24 interface=ether2 network=192.168.0.0
add address=10.10.10.2/30 interface=vlan1 network=10.10.10.0
add address=10.20.10.2/30 interface=vlan2 network=10.20.10.0

Checando a conexão l2circuit

root@R1> show l2circuit connections

l2circui-connections

Checando o database do LDP

root@R1> show ldp database

l2circuit-ldp

Testando do Mikrotik

mk-teste-l2-circuit

MPLS E VPLS COM LSP EM ROTEADORES JUNIPER

Share Button

English Title: MPLS and VPLS with LSP in Juniper Routers

Com a necessidade de interligar dois sites com uma rede L2, surgiu a idéia de fazer um VPLS, o cenário criado é um cenário de testes roando em Linux com KVM e Libvirt, rodando verções virtuais do Juniper MX e Mikrotik Router)S

Equipamentos virtualizados

3 – vMX (Juniper MX virtualized)

2 – CHR (Mikrotik RouterOS Cloud Hosted Router)

Topologia

topologia

Algums acronomos usados:

MPLS – Multi Protocol Label Switching

OSPF – Open Shortest Path First

VPLS – Virtual Private LAN Service

LDP – Label Distribution Protocol

RSVP – Resource Reservation Protocol

LSP – Label Switching Path

A ideia inicial éra que os equipamento mikrotik-1 e mikortik-2 se comunicassem a nivel de L2 usando uma VLAN para isso, mas a ideia amadureceu para o funcionamento de 802qinq no tunel VPLS.

Sendo assim os exeplos abaixo mostram como foi configurado todos os protocooos como OSPF, MPLS, LDP, RSVP e tabém o LSP para que funcione o QinQ no tunel VPLS, ambas LSPs são balanceadas e ativas, sendo assim em caso de queda de um LSP o tunel VPLS continua funcionando sem nenhuma interrupção.

Configurações do R1

system {
    host-name R1;
    services {
        ssh {
            protocol-version v2;
        }
    }
    syslog {
        user * {
            any emergency;
        }
        file messages {
            any notice;
            authorization info;
        }
        file interactive-commands {
            interactive-commands any;
        }
    }
}
interfaces {
    ge-0/0/0 {
        mtu 2000;
        mac 52:54:00:69:dc:34;
        unit 0 {
            family inet {
                address 10.0.0.1/30;
            }
            family mpls;
        }
    }
    ge-0/0/1 {
        mtu 2000;                       
        mac 52:54:00:cc:d5:ac;
        unit 0 {
            family inet {
                address 10.0.3.1/30;
            }
            family mpls;
        }
    }
    ge-0/0/2 {
        mtu 2000;
        flexible-vlan-tagging;
		encapsulation flexible-ethernet-services;
        mac 52:54:00:eb:23:b4;
        unit 800 {
            encapsulation vlan-vpls;
            vlan-id 800;
            family vpls;
        }
    }
    fxp0 {
        unit 0 {
            family inet {
                address 192.168.0.101/24;
            }
        }
    }
    lo0 {
        unit 0 {                        
            family inet {
                address 10.1.1.1/32;
            }
        }
    }
}
protocols {
    rsvp {
        load-balance bandwidth;
        interface ge-0/0/1.0;
        interface ge-0/0/0.0;
    }
    mpls {
        label-switched-path NORMAL {
            to 10.2.1.1;
            primary DIRETO;
        }
        label-switched-path SECUNDARIA {
            to 10.2.1.1;
            primary VIAR3;
        }
        path DIRETO {
            10.2.1.1;
        }
        path VIAR3 {
            10.3.1.1;
            10.2.1.1;
        }
        interface ge-0/0/0.0;
        interface ge-0/0/1.0;
    }
    ospf {
        traffic-engineering;
        area 0.0.0.0 {
            interface ge-0/0/0.0;       
            interface ge-0/0/1.0;
            interface ge-0/0/2.0;
            interface lo0.0;
        }
    }
    ldp {
        interface ge-0/0/0.0;
        interface ge-0/0/1.0;
        interface lo0.0;
    }
}
routing-instances {
    VPN {
        instance-type vpls;
        vlan-id 800;
        interface ge-0/0/2.800;
        protocols {
            vpls {
                encapsulation-type ethernet-vlan;
                site-range 10;
                interface ge-0/0/2.800;
                no-tunnel-services;
                site mk1 {
                    site-identifier 1;
                }
                vpls-id 101;
                neighbor 10.2.1.1;
            }
        }
    }
}

Configurações do R2

system {
    host-name R2;
    services {
        ssh {
            protocol-version v2;
        }
    }
    syslog {
        user * {
            any emergency;
        }
        file messages {
            any notice;
            authorization info;
        }
        file interactive-commands {
            interactive-commands any;
        }
    }
}
interfaces {
    ge-0/0/0 {
        mtu 2000;
        mac 52:54:00:dc:47:dc;
        unit 0 {
            family inet {
                address 10.0.0.2/30;
            }
            family mpls;
        }
    }
    ge-0/0/1 {
        mtu 2000;                       
        mac 52:54:00:18:3a:d0;
        unit 0 {
            family inet {
                address 10.0.2.1/30;
            }
            family mpls;
        }
    }
    ge-0/0/2 {
        mtu 2000;
        flexible-vlan-tagging;
		encapsulation flexible-ethernet-services;
        mac 52:54:00:70:f2:ce;
        unit 800 {
            encapsulation vlan-vpls;
            vlan-id 800;
            family vpls;
        }
    }
    fxp0 {
        unit 0 {
            family inet {
                address 192.168.0.102/24;
            }
        }
    }
    lo0 {
        unit 0 {                        
            family inet {
                address 10.2.1.1/32;
            }
        }
    }
}
protocols {
    rsvp {
        load-balance bandwidth;
        interface ge-0/0/1.0;
        interface ge-0/0/0.0;
    }
    mpls {
        interface ge-0/0/0.0;
        interface ge-0/0/1.0;
    }
    ospf {
        traffic-engineering;
        area 0.0.0.0 {
            interface ge-0/0/0.0;
            interface ge-0/0/1.0;
            interface ge-0/0/2.0;
            interface lo0.0;
        }
    }
    ldp {
        interface ge-0/0/0.0;
        interface ge-0/0/1.0;
        interface lo0.0;
    }
}
routing-instances {
    VPN {
        instance-type vpls;
        vlan-id 800;
        interface ge-0/0/2.800;
        protocols {                     
            vpls {
                encapsulation-type ethernet-vlan;
                site-range 10;
                interface ge-0/0/2.800;
                no-tunnel-services;
                site mk2 {
                    site-identifier 2;
                }
                vpls-id 101;
                neighbor 10.1.1.1;
            }
        }
    }
}

Configurações do R3

system {
    host-name R3;
    services {
        ssh {
            protocol-version v2;
        }
    }
    syslog {
        user * {
            any emergency;
        }
        file messages {
            any notice;
            authorization info;
        }
        file interactive-commands {
            interactive-commands any;
        }
    }
}
interfaces {
    ge-0/0/0 {
        mtu 2000;
        mac 52:54:00:bf:a1:0d;
        unit 0 {
            family inet {
                address 10.0.2.2/30;
            }
            family mpls;
        }
    }
    ge-0/0/1 {
        mtu 2000;                       
        mac 52:54:00:29:54:42;
        unit 0 {
            family inet {
                address 10.0.3.2/30;
            }
            family mpls;
        }
    }
    fxp0 {
        unit 0 {
            family inet {
                address 192.168.0.103/24;
            }
        }
    }
    lo0 {
        unit 0 {
            family inet {
                address 10.3.1.1/32;
            }
        }
    }
}
protocols {
    rsvp {
        load-balance bandwidth;
        interface ge-0/0/0.0;
        interface ge-0/0/1.0;
    }
    mpls {
        interface ge-0/0/0.0;           
        interface ge-0/0/1.0;
    }
    ospf {
        traffic-engineering;
        area 0.0.0.0 {
            interface ge-0/0/0.0;
            interface ge-0/0/1.0;
            interface lo0.0;
        }
    }
    ldp {
        interface ge-0/0/0.0;
        interface ge-0/0/1.0;
        interface lo0.0;
    }
}

[edit]

Configuraṍes do Mikrotik 1

/system identity
set name=MIKROTIK-01
/interface vlan
add interface=ether2 name=vlan1 vlan-id=800
add interface=vlan1 name=vlan2 vlan-id=900
/ip address
add address=192.168.0.104/24 interface=ether1 network=192.168.0.0
add address=10.10.10.1/30 interface=vlan1 network=10.10.10.0
add address=10.20.10.1/30 interface=vlan2 network=10.20.10.0

Configuraṍes do Mikrotik 2

/system identity
set name=MIKROTIK-02
/interface vlan
add interface=ether1 name=vlan1 vlan-id=800
add interface=vlan1 name=vlan2 vlan-id=900
/ip address
add address=192.168.0.105/24 interface=ether2 network=192.168.0.0
add address=10.10.10.2/30 interface=vlan1 network=10.10.10.0
add address=10.20.10.2/30 interface=vlan2 network=10.20.10.0

Testes

Visualizando no R1 o status da conexão VPLS

vpls status

Testes de ping do Mikrotik-01 para o Mikrotik-02

mk-test

AirFiber5 AF5- Testes e Performance

Share Button

English Title: AirFiber5  AF5 – Performance and test

Recentemente testamos um enlace de AF5 com uma distancia de 5Km em um ambiente com bastante interferência.

O resultado do enlace foi bastante interessante, mesmo com toda interferência que já tínhamos com outros enlaces no local  o AF5 conseguiu passar praticamente 300Mbps (media 270Mbps) nos dois sentidos de throughput, e em torno de 250Mbps FullDuplex. Nos testes o link não fica totalmente estável, oscila entre 260 a 300Mbps.

A melhor configuração para esse enlace foi utilizando o modo FullDuplex e dois canais de 40Mhz, todos agora podem reclamar dos 80Mhz utilizados no mesmo local yes. Porem anteriormente eu já utilizava 2 enlaces em 40Mhz para dar conta do trafego da torre (usando em torno de 170Mbps), e como podem calcular já não existia mais banda ociosa. Nesse caso o AF5 veio para resolver meu problema.

Vejam algumas images dos testes.

airfiber-2

airfiber-1

Atualmente esse enlace usa diariamente em torno de 170 a 180Mbps com uma folga muito boa conforme visto nos testes.

 

Configurando MPLS Traffic Engineer em roteadores cisco

Share Button

English Title: Configuring MPLS Traffic Engineer in cisco routers

Nesse simples artigo irei demostrar como configurar uma rede em formado de malha usando OSPF, e realizando engenharia de trafego com MPLS.

Para criar essa topologia utilizei o GNS3 como emulador. Emulei 4 routers cisco 7200 mais 2 Mikrotiks emulados com o QEMU apenas para ter um terminal para os testes.

Depois de criar a rede MPLS criei um túnel MPLS-TE entre o router-1 e router-2 e propositalmente farei com que o trafego entre o router-1 e 2 passe por todos os routers (caminho mais longo) para chegar ao seu destino.

Segue topologia:
topology

Sendo assim mãos a obra. Segue configurações que realizei em cada equipamento.
ROUTER-01

hostname cisco-R1
ip cef
mpls traffic-eng tunnels
interface Tunnel1
 ip unnumbered Loopback0
 tunnel destination 10.10.10.2
 tunnel mode mpls traffic-eng
 tunnel mpls traffic-eng autoroute announce
 tunnel mpls traffic-eng priority 0 0
 tunnel mpls traffic-eng bandwidth  100000
 tunnel mpls traffic-eng path-option 1 explicit name VOLTA
 no routing dynamic
!
interface Loopback0
 ip address 10.10.10.1 255.255.255.255
!
interface FastEthernet0/0
 ip address 10.0.1.1 255.255.255.252
 duplex auto
 speed auto
 mpls traffic-eng tunnels
 ip rsvp bandwidth 100000
!
interface FastEthernet0/1
 ip address 10.0.0.1 255.255.255.252
 duplex auto
 speed auto
 mpls traffic-eng tunnels
 ip rsvp bandwidth 100000
!
interface FastEthernet1/0
 ip address 10.0.2.1 255.255.255.252
 duplex auto
 speed auto
 mpls traffic-eng tunnels
 ip rsvp bandwidth 100000
!
interface FastEthernet1/1
 ip address 192.168.11.1 255.255.255.0
 duplex auto
 speed auto
!
router ospf 1
 mpls traffic-eng router-id Loopback0
 mpls traffic-eng area 0
 log-adjacency-changes
 no auto-cost
 network 10.0.0.0 0.0.0.255 area 0
 network 10.0.1.0 0.0.0.255 area 0
 network 10.0.2.0 0.0.0.255 area 0
 network 10.10.10.1 0.0.0.0 area 0
 network 192.168.11.0 0.0.0.255 area 0
!
ip explicit-path name VOLTA enable
 next-address 10.10.10.3 
 next-address 10.10.10.4 
!

Foi configurando também em cada interface que faz parte do MPLS a velocidade de 100Mbps nesse cenário todas as interfaces são FastEthernet.

Também foi configurado a velocidade do tunnel com o comando:

tunnel mpls traffic-eng bandwidth  100000

Caso necessite diminuir a velocidade que esse túnel pode alcançar basta diminuir esse valor.

E também foi configurado o caminho que sera utilizado para entre o túnel com os comandos:

tunnel mpls traffic-eng path-option 1 explicit name VOLTA
ip explicit-path name VOLTA enable
 next-address 10.10.10.3 
 next-address 10.10.10.4 
!

E da mesma forma configurei o router-2 que nesse caso é a outra ponta do tunnel.

ROUTER-02

hostname cisco-R2
ip cef
mpls traffic-eng tunnels
interface Tunnel1
 ip unnumbered Loopback0
 tunnel destination 10.10.10.1
 tunnel mode mpls traffic-eng
 tunnel mpls traffic-eng autoroute announce
 tunnel mpls traffic-eng priority 0 0
 tunnel mpls traffic-eng bandwidth  100000
 tunnel mpls traffic-eng path-option 1 explicit name VOLTA
 no routing dynamic
!
interface Loopback0
 ip address 10.10.10.2 255.255.255.255
!
interface FastEthernet0/0
 ip address 10.0.3.1 255.255.255.252
 duplex auto
 speed auto
 mpls traffic-eng tunnels
 ip rsvp bandwidth 100000
!
interface FastEthernet0/1
 ip address 10.0.0.2 255.255.255.252
 duplex auto
 speed auto
 mpls traffic-eng tunnels
 ip rsvp bandwidth 100000
!
interface FastEthernet1/0
 ip address 192.168.10.1 255.255.255.0
 duplex auto
 speed auto
!
router ospf 1
 mpls traffic-eng router-id Loopback0
 mpls traffic-eng area 0
 log-adjacency-changes
 network 10.0.0.0 0.0.0.255 area 0
 network 10.0.3.0 0.0.0.255 area 0
 network 10.10.10.2 0.0.0.0 area 0
 network 192.168.10.0 0.0.0.255 area 0
!
ip explicit-path name VOLTA2 enable
 index 8 next-address 10.10.10.4 
 next-address 10.10.10.3 
!

ROUTER-03

hostname cisco-R3
ip cef
mpls traffic-eng tunnels
interface Loopback0
 ip address 10.10.10.3 255.255.255.255
!
interface FastEthernet0/0
 ip address 10.0.4.1 255.255.255.252
 duplex auto
 speed auto
 mpls traffic-eng tunnels
 ip rsvp bandwidth 100000
!
interface FastEthernet0/1
 ip address 10.0.1.2 255.255.255.252
 duplex auto
 speed auto
 mpls traffic-eng tunnels
 ip rsvp bandwidth 100000
!
router ospf 1
 mpls traffic-eng router-id Loopback0
 mpls traffic-eng area 0
 log-adjacency-changes
 network 10.0.1.0 0.0.0.255 area 0
 network 10.0.4.0 0.0.0.255 area 0
 network 10.10.10.3 0.0.0.0 area 0
!

ROUTER-04

hostname cisco-R4
ip cef
mpls traffic-eng tunnels
interface Loopback0
 ip address 10.10.10.4 255.255.255.255
!
interface FastEthernet0/0
 ip address 10.0.3.2 255.255.255.252
 duplex auto
 speed auto
 mpls traffic-eng tunnels
 ip rsvp bandwidth 100000
!
interface FastEthernet0/1
 ip address 10.0.4.2 255.255.255.252
 duplex auto
 speed auto
 mpls traffic-eng tunnels
 ip rsvp bandwidth 100000
!
interface FastEthernet1/0
 ip address 10.0.2.2 255.255.255.252
 duplex auto
 speed auto
 mpls traffic-eng tunnels
 ip rsvp bandwidth 100000
!
router ospf 1
 mpls traffic-eng router-id Loopback0
 mpls traffic-eng area 0
 log-adjacency-changes
 network 10.0.2.0 0.0.0.255 area 0
 network 10.0.3.0 0.0.0.255 area 0
 network 10.0.4.0 0.0.0.255 area 0
 network 10.10.10.4 0.0.0.0 area 0
!

E também as configurações realizadas nos mikrotiks.

MIKROTIK-01

/ip address add adress=192.168.10.2/24 interface=ether1
/ip route add gateway=192.168.10.1

MIKROTIK-04

/ip address add adress=192.168.11.2/24 interface=ether1
/ip route add gateway=192.168.11.1

Vejam os testes realizados entre os mikrotiks.

Captura de tela de 2014-07-06 20:36:19

E a tabela de roteamento OSPF do router-01

Captura de tela de 2014-07-06 20:37:22

É isso, espero ter ajudado.