Mudanças entre as edições de "Como Ter Seu Proprio Looking Glass"

De Wiki BPF
Ir para navegação Ir para pesquisar
(Mudança da segunda SS)
 
(38 revisões intermediárias por 3 usuários não estão sendo mostradas)
Linha 1: Linha 1:
'''''<big>ARTIGO EM DESENVOLVIMENTO</big>'''''
+
== Introdução ==
  
Assim como explicado em detalhes no artigo [[Looking Glass]], ter um LG é fundamental para sua rede, principalmente se o ISP em questão for transito. Mesmo se tratando de casos onde não é transito, ter um LG facilita muito o troubleshoot para seu time técnico.
+
Assim como explicado em detalhes no artigo [[Looking Glass]], ter um LG é fundamental para sua rede, principalmente se o ISP em questão for transito. Mesmo se tratando de casos onde não é transito, ter um LG facilita muito o troubleshooting para o seu time técnico e também para outros profissionais que precisem fazer troubleshoot em outras redes.
  
Na tentativa de incentivar todos os ISP's a terem seu próprio Looking Glass, vou explicar passo-a-passo como configurar um utilizando um LG OpenSource Web utilizando Debian 10, caso tenha preferencia por outra distribuição, apenas adapte conforme sua necessidade.
+
Na tentativa de incentivar todos os ISP's a terem seu próprio Looking Glass, vou explicar passo-a-passo como configurar um utilizando um LG OpenSource Web utilizando Debian 12, caso tenha preferencia por outra distribuição, apenas adapte conforme sua necessidade.
 +
== Instalações Iniciais ==
  
Após instalar seu Debian 10, atualize seus repositórios com o comando abaixo:
+
Após instalar seu Debian 12 em minimal-install, atualize seus repositórios com o comando abaixo:
  
 
<code>apt update -y</code>
 
<code>apt update -y</code>
Linha 11: Linha 12:
 
Instale as dependências:
 
Instale as dependências:
  
<code>apt install git quagga apache2 libapache2-mod-php php php-common -y</code>
+
<code>apt install git apache2 libapache2-mod-php php php-xml composer -y</code>
  
 
Faça o clone do LG no GitHub:
 
Faça o clone do LG no GitHub:
Linha 19: Linha 20:
 
Reinicie o serviço do Apache2:
 
Reinicie o serviço do Apache2:
  
<code>service apache2 restart</code>
+
<code>systemctl restart apache2.service</code>
 +
 
 +
Mova os arquivos da pasta /var/www/html/lg para /var/www/html/ , de forma que consiga acessar sem especificar um folder:
 +
 
 +
<code>mv /var/www/html/lg/* /var/www/html/</code>
  
 
Por padrão você só conseguirá acessar o LG a partir do momento que copiar o arquivo config.php.example para config.php, e é exatamente o que faremos agora.
 
Por padrão você só conseguirá acessar o LG a partir do momento que copiar o arquivo config.php.example para config.php, e é exatamente o que faremos agora.
Linha 25: Linha 30:
 
(Prefira copiar a mover/renomear, para que possa ter backup da configuração padrão)
 
(Prefira copiar a mover/renomear, para que possa ter backup da configuração padrão)
 
[[Arquivo:LookingGlassDefaultScreen.png|miniaturadaimagem|295x295px]]
 
[[Arquivo:LookingGlassDefaultScreen.png|miniaturadaimagem|295x295px]]
<code>cd /var/www/html/lg</code>
+
<code>cd /var/www/html</code>
  
 
<code>cp config.php.example config.php</code>
 
<code>cp config.php.example config.php</code>
 +
 +
Remova o arquivo index.html:
 +
 +
<code>rm index.html</code>
 +
 +
Rode o composer para instalar o remanescente. Esse passo é necessário desde a versão 2.3.0. Caso a pagina fique quebrada, provavelmente está faltando esse passo!!
 +
 +
<code>composer install</code>
  
 
Caso tenha deixado seu linux em DHCP, verifique qual o IP recebido utilizando seguinte comando:
 
Caso tenha deixado seu linux em DHCP, verifique qual o IP recebido utilizando seguinte comando:
Linha 33: Linha 46:
 
<code>ip addr</code>
 
<code>ip addr</code>
  
Supondo que o IP seja 192.168.0.10, acesse com a seguinte URL:
+
Supondo que o IP seja 192.0.2.2, acesse com a seguinte URL:
  
[http://192.168.0.10/lg <code>http://192.168.0.10/lg</code>]
+
[http://192.0.2.2/lg <code>http://192.0.2.2</code>]
  
 
O próximo passo é editar o arquivo de configuração que copiamos, para isso, utilize o editor de texto de sua preferencia.
 
O próximo passo é editar o arquivo de configuração que copiamos, para isso, utilize o editor de texto de sua preferencia.
  
<code>nano /var/www/html/lg/config.php</code>
+
<code>nano /var/www/html/config.php</code>
  
 
No arquivo de configuração possuímos alguns campos básicos como:
 
No arquivo de configuração possuímos alguns campos básicos como:
Linha 48: Linha 61:
 
* Disclaimer.
 
* Disclaimer.
 
Esses campos deverão ser preenchidos mediante suas informações, segue um exemplo:
 
Esses campos deverão ser preenchidos mediante suas informações, segue um exemplo:
 
+
[[Arquivo:Lg.png|miniaturadaimagem]]
[[Arquivo:LG-Interface-Configurado2.png|miniaturadaimagem]]
 
 
<code>$config['contact']['name'] = 'NOC HexaNetworks';</code>
 
<code>$config['contact']['name'] = 'NOC HexaNetworks';</code>
  
Linha 63: Linha 75:
  
 
<code>$config['frontpage']['image'] = 'logo.png';</code>
 
<code>$config['frontpage']['image'] = 'logo.png';</code>
 +
 +
<code>//Caso precise redimensionar a logo, pode colocar a linha abaixo e organizar a porcentagem mediante o que precisar.</code>
 +
 +
<code>$config['frontpage']['image_width'] = '35%';</code>
  
 
<code>// Disclaimer to inform people using the looking glass</code>
 
<code>// Disclaimer to inform people using the looking glass</code>
Linha 70: Linha 86:
 
<code>$config['frontpage']['disclaimer'] = <nowiki>''</nowiki>;</code>
 
<code>$config['frontpage']['disclaimer'] = <nowiki>''</nowiki>;</code>
  
Esse arquivo vem pré-configurado para conversar com varios roteadores. Aqui explicarei um cenário simples, onde o Quagga estará instalado no mesmo S.O. que o LG. Caso precise que funcione em um ambiente diferente, você terá que adaptar para o cenário de sua rede, utilizando a mesma lógica aqui explicada.
+
== AntiSpam ==
 +
 
 +
Caso queira utilizar a função de anti-spam, precisará instalar o modulo de SQLITE para o PHP. Como nesse tutorial não utilizaremos essa função, apenas adicione a linha abaixo no arquivo de configuração:
 +
 
 +
<code>$config['antispam']['enabled'] = false;</code>
 +
 
 +
Caso essa linha não for adicionada, o seguinte erro aparecerá na tela:
 +
 
 +
'''Error!'''
 +
Unable to open database: SQLSTATE[HY000] [14] unable to open database file
 +
 
 +
== VRF ==
 +
 
 +
VRF (Virtual Routing and Forwarding) são tabelas de roteamento virtuais que podem ser criadas nos equipamentos. Pensando em cenários em que os fullroutes são recebidos em uma VRF, foi adicionado essa função no projeto.
 +
 
 +
No nosso caso também não utilizaremos VRF, sendo assim, encontre a seguinte linha no final do arquivo config.php:
 +
 
 +
<code>$config['vrfs']['enabled'] = true;</code>
 +
 
 +
Altere para false, ficando da seguinte forma:
 +
 
 +
<code>$config['vrfs']['enabled'] = false;</code>
 +
 
 +
== Comunicação com Roteadores ==
 +
 
 +
Para que o Looking Glass consiga coletar as informações que serão expostas na tela, ele precisará se comunicar com alguém. Isso pode acontecer inputando comandos dentro dos seus roteadores de borda, ou inputando comando em um daemon de BGP local (FRRouting por exemplo) que tenha um iBGP fechado com seus roteadores de borda. Ambos os metodos são explicados mais a baixo.
 +
 
 +
Para que isso aconteça, é necessario configurar essas informações diretamente no arquivo config.php, informando com quem o PHP se comunicará. O exemplo abaixo já vem pronto no arquivo:
 +
 
 +
<code>// Authentication based on SSH or Telnet with password</code>
 +
 
 +
<code>// The hostname or the IP address</code>
 +
 
 +
<code>$config['routers']['router1']['host'] = 'r1.example.net';</code>
 +
 
 +
<code>// The user to use to connect to the router</code>
 +
 
 +
<code>$config['routers']['router1']['user'] = 'readonlyuser';</code>
 +
 
 +
<code>// The password of the given user</code>
 +
 
 +
<code>$config['routers']['router1']['pass'] = 'readonlypassword';</code>
 +
 
 +
<code>// The authentication mechanism to use (can be ssh-password or telnet)</code>
 +
 
 +
<code>$config['routers']['router1']['auth'] = 'ssh-password';</code>
 +
 
 +
<code>// The router type (can be cisco, ios, juniper or junos)</code>
 +
 
 +
<code>$config['routers']['router1']['type'] = 'juniper';</code>
 +
 
 +
<code>// The router source interface to be used</code>
 +
 
 +
<code>$config['routers']['router1']['source-interface-id'] = 'lo0';</code>
 +
 
 +
<code>// The router description to be displayed in the router list</code>
 +
 
 +
<code>$config['routers']['router1']['desc'] = 'Example\'s Router 1';</code>
 +
 
 +
É possível informar diversos roteadores, apenas mudando o numero do equipamento. No exemplo acima pode reparar que está sendo usado como ['router'''1'''']. Caso queria ter mais equipamentos, basta copiar e adicionar abaixo router2, router 3 etc.
 +
 
 +
== Método 01 - Inputando comandos no seu roteador de borda ==
 +
 
 +
Esse além de ser o método que recomendamos, é o método mais convencional visto de Looking Glass. Ele é interessante pois conseguirá ver além das rotas que foram eleitas para a FIB, também rotas que permanecem acomodadas apenas na RIB.
 +
 
 +
Nesse método o LG roda comandos em seu roteador de borda com intuito de ver como determinadas rotas são aprendidas, além de poder realizar pings e traceroutes. Após isso, o retorno desses comandos é exposto na tela do usuario. O detalhe desse método que que depende do projeto ter suporte a fabricante do roteador que você utiliza, onde no git deles consta os seguintes vendors suportados:
 +
 
 +
* Support the following router types:
 +
** Arista
 +
** BIRD (v1 and v2)
 +
** Cisco (IOS and IOS-XR)
 +
** Extreme/Brocade NetIron
 +
** FRRouting
 +
** Huawei (VRP)
 +
** Juniper
 +
** Mikrotik/RouterOS
 +
** Nokia
 +
** OpenBGPd
 +
** Quagga
 +
** Vyatta/VyOS/EdgeOS
 +
 
 +
Para que isso seja possível, é necessario que seu roteador de borda tenha um usuario criado com permissão para esse tipo de comando. '''Inclusive, não é necessario ter acesso de escrita no equipamento!'''. Sugiro inclusive que, caso possível, limite os comandos que esse usuario conseguirá dar na caixa por motivos de segurança.
 +
 
 +
Tendo isso em mente, vamos configurar um exemplo para se comunicar com um roteador Huawei NE:
 +
 
 +
// IP ou dominio do seu roteador de borda;
 +
$config['routers']['router1']['host'] = '192.0.2.100';
 +
 
 +
// Usuario criado no equipamento;
 +
$config['routers']['router1']['user'] = 'lookingglass';
 +
 
 +
// Senha do usuario que foi criado;
 +
$config['routers']['router1']['pass'] = 'SenhaChuckNorris';
 +
 
 +
// Metodo de autenticação utilizada, podendo ser ssh-password ou telnet. Recomendamos utilização de SSH!
 +
 
 +
$config['routers']['router1']['auth'] = 'ssh-password';
 +
 
 +
// Por padrão ele consultará na porta 22 do SSH. Caso tenha sua porta alterada, pode especificar através da linha abaixo. Essa linha é opcional.
 +
 
 +
$config['routers']['router1']['port'] = '22';
 +
 
 +
// Fabricante do equipamento. No exemplo utilizaremos huawei;
 +
 
 +
$config['routers']['router1']['type'] = 'huawei';
 +
 
 +
// IP ou interface que originará ping e traceroute
 +
 
 +
$config['routers']['router1']['source-interface-id'] = '192.0.2.100';
 +
 
 +
// Nome do equipamento que aparecerá na interface Web. Sugiro especificar a cidade, POP ou algo que fique facil para o usuario identificar. Abaixo é um exemplo do que usamos:
 +
 
 +
$config['routers']['router1']['desc'] = 'HEXANETWORKS-RT-NE8000F1A-BGP01-SPO-SP4';
 +
 
 +
Caso já esteja tudo pronto do lado do roteador, já deverá conseguir consultar informações através da interface Web!
 +
 
 +
== Método 02 - Utilizando FFRouting ==
 +
 
 +
Outra forma é subir um FFRouting e mandar o PHP checar diretamente nele. Dessa forma precisará subir um iBGP do FRR para seus roteadores de borda. A vantagem é que é agnostico a vendor, e a desvantagem é que conseguirá checar apenas a FIB dos roteadores de borda.
 +
 
 +
Esse arquivo vem pré-configurado para conversar com varios roteadores. Aqui explicarei um cenário simples, onde o FRRouting estará instalado no mesmo S.O. que o LG. Caso precise que funcione em um ambiente diferente, você terá que adaptar para o cenário de sua rede, utilizando a mesma lógica aqui explicada.
  
Da linha 38 em diante, teremos as configuraçoes relacionadas aos roteadores, vamos editar apenas as linhas relacionadas ao "router1".
+
Seguindo a mesma logica do anterior, vamos editar apenas as linhas relacionadas ao "router1".
  
 
Configure mediante o exemplo:
 
Configure mediante o exemplo:
Linha 103: Linha 239:
  
 
<code>// The router description to be displayed in the router list</code>
 
<code>// The router description to be displayed in the router list</code>
[[Arquivo:LG-Configurado-3.png|miniaturadaimagem]]
+
[[Arquivo:Lg-roteador-de-borda.png|miniaturadaimagem]]
 
<code>$config['routers']['router1']['desc'] = 'Roteador de Borda';</code>
 
<code>$config['routers']['router1']['desc'] = 'Roteador de Borda';</code>
  
 
Acima determinamos que:
 
Acima determinamos que:
* O LG fará consultas local;
+
* O LG fará consulta local;
 
* Utilizará o usuário "lookingglass" para tal;
 
* Utilizará o usuário "lookingglass" para tal;
 
* Com a senha "SENHA-DO-USUARIO-LOOKINGGLASS";
 
* Com a senha "SENHA-DO-USUARIO-LOOKINGGLASS";
* Utilizando SSH;
+
* Utilizará SSH;
* Definimos que ele consultará um Quagga;
+
*O arquivo de configuração não suporta FRRouting como parâmetro, sendo assim, iremos setar como Quagga. Como ambos possuem sintaxes semelhantes (Cisco-Like), será totalmente compatível;
 
* Comentamos a interface de origem;
 
* Comentamos a interface de origem;
 
* A descrição do roteador é "Roteador de Borda".
 
* A descrição do roteador é "Roteador de Borda".
Linha 117: Linha 253:
 
Caso queira remover o restante dos roteadores que aparecem, basta apagar ou comentar (//) as linhas referente aos outros roteadores.
 
Caso queira remover o restante dos roteadores que aparecem, basta apagar ou comentar (//) as linhas referente aos outros roteadores.
  
O proximo passo é adicionar o usuario "lookingglass" no seu linux, e adiciona-lo ao grupo "quagga", para tal utilize os seguintes comandos:
+
O proximo passo é instalar o FRRouting:
 +
 
 +
<code>apt-get install frr</code>
 +
 
 +
Adicione o usuario "lookingglass" no seu linux, e o adicione ao grupo "frr":
  
 
<code>adduser lookingglass</code>
 
<code>adduser lookingglass</code>
Linha 125: Linha 265:
 
Repita a senha
 
Repita a senha
  
<code>usermod -aG lookingglass quagga</code>
+
<code>usermod -aG frrvty lookingglass</code>
 +
 
 +
Acesse a pasta o arquivo daemons do FRR:
 +
 
 +
<code>nano /etc/frr/daemons</code>
 +
 
 +
Altere a linha bgpd=no para bgpd=yes e reinicie o FRR:
 +
 
 +
<code>service frr restart</code>
 +
 
 +
Utilize o comando vtysh para acessar a VTY do frr.
 +
 
 +
O próximo passo é basicamente fechar uma sessão iBGP entre seu roteador de borda, e o FRR. Caso não esteja habituado com configuração Cisco-Like, segue um exemplo:
 +
 
 +
<code>router bgp 65000</code>
 +
 
 +
<code>neighbor 192.0.2.1 remote-as 65000</code>
 +
 
 +
<code>neighbor 2001:db8::2 remote-as 65000</code>
 +
 
 +
<code>!</code>
 +
 
 +
<code>address-family ipv4 unicast</code>
 +
 
 +
<code>  neighbor 192.0.2.1 route-map IMPORT in</code>
 +
 
 +
<code>  neighbor 192.0.2.1 route-map EXPORT out</code>
 +
 
 +
<code>exit-address-family</code>
 +
 
 +
<code>!</code>
 +
 
 +
<code>address-family ipv6 unicast</code>
 +
 
 +
<code>  neighbor 2001:db8::2 route-map IMPORT in</code>
 +
 
 +
<code>  neighbor 2001:db8::2 route-map EXPORT out</code>
 +
 
 +
<code>exit-address-family</code>
 +
 
 +
<code>!</code>
 +
 
 +
<code>route-map IMPORT permit 10</code>
 +
 
 +
<code>!</code>
 +
 
 +
<code>route-map EXPORT deny 1</code>
 +
 
 +
Após isso, já terá seu Looking Glass em funcionamento, sem ter que se preocupar com integração de vendor, e com total suporte a IPv6.
  
Falta apenas configurarmos o Quagga para que esse possa ser consultado, para isso,
+
'''Autor: [https://wiki.brasilpeeringforum.org/w/Usuário:Andredias André Dias]'''
 +
[[Categoria:Roteamento]]
 +
[[Categoria:Infraestrutura]]

Edição atual tal como às 16h57min de 24 de março de 2024

Introdução

Assim como explicado em detalhes no artigo Looking Glass, ter um LG é fundamental para sua rede, principalmente se o ISP em questão for transito. Mesmo se tratando de casos onde não é transito, ter um LG facilita muito o troubleshooting para o seu time técnico e também para outros profissionais que precisem fazer troubleshoot em outras redes.

Na tentativa de incentivar todos os ISP's a terem seu próprio Looking Glass, vou explicar passo-a-passo como configurar um utilizando um LG OpenSource Web utilizando Debian 12, caso tenha preferencia por outra distribuição, apenas adapte conforme sua necessidade.

Instalações Iniciais

Após instalar seu Debian 12 em minimal-install, atualize seus repositórios com o comando abaixo:

apt update -y

Instale as dependências:

apt install git apache2 libapache2-mod-php php php-xml composer -y

Faça o clone do LG no GitHub:

git clone https://github.com/respawner/looking-glass.git /var/www/html/lg

Reinicie o serviço do Apache2:

systemctl restart apache2.service

Mova os arquivos da pasta /var/www/html/lg para /var/www/html/ , de forma que consiga acessar sem especificar um folder:

mv /var/www/html/lg/* /var/www/html/

Por padrão você só conseguirá acessar o LG a partir do momento que copiar o arquivo config.php.example para config.php, e é exatamente o que faremos agora.

(Prefira copiar a mover/renomear, para que possa ter backup da configuração padrão)

LookingGlassDefaultScreen.png

cd /var/www/html

cp config.php.example config.php

Remova o arquivo index.html:

rm index.html

Rode o composer para instalar o remanescente. Esse passo é necessário desde a versão 2.3.0. Caso a pagina fique quebrada, provavelmente está faltando esse passo!!

composer install

Caso tenha deixado seu linux em DHCP, verifique qual o IP recebido utilizando seguinte comando:

ip addr

Supondo que o IP seja 192.0.2.2, acesse com a seguinte URL:

http://192.0.2.2

O próximo passo é editar o arquivo de configuração que copiamos, para isso, utilize o editor de texto de sua preferencia.

nano /var/www/html/config.php

No arquivo de configuração possuímos alguns campos básicos como:

  • Nome;
  • E-mail;
  • Titulo;
  • Logo;
  • Disclaimer.

Esses campos deverão ser preenchidos mediante suas informações, segue um exemplo:

Lg.png

$config['contact']['name'] = 'NOC HexaNetworks';

$config['contact']['mail'] = 'andredias@hexanetworks.com.br';

// Frontpage configuration

// Title of the page

$config['frontpage']['title'] = 'Looking Glass - Hexa Networks';

// Logo to display (remove it to not display any logo)

$config['frontpage']['image'] = 'logo.png';

//Caso precise redimensionar a logo, pode colocar a linha abaixo e organizar a porcentagem mediante o que precisar.

$config['frontpage']['image_width'] = '35%';

// Disclaimer to inform people using the looking glass

// Set it to null to not display a disclaimer

$config['frontpage']['disclaimer'] = '';

AntiSpam

Caso queira utilizar a função de anti-spam, precisará instalar o modulo de SQLITE para o PHP. Como nesse tutorial não utilizaremos essa função, apenas adicione a linha abaixo no arquivo de configuração:

$config['antispam']['enabled'] = false;

Caso essa linha não for adicionada, o seguinte erro aparecerá na tela:

Error!

Unable to open database: SQLSTATE[HY000] [14] unable to open database file

VRF

VRF (Virtual Routing and Forwarding) são tabelas de roteamento virtuais que podem ser criadas nos equipamentos. Pensando em cenários em que os fullroutes são recebidos em uma VRF, foi adicionado essa função no projeto.

No nosso caso também não utilizaremos VRF, sendo assim, encontre a seguinte linha no final do arquivo config.php:

$config['vrfs']['enabled'] = true;

Altere para false, ficando da seguinte forma:

$config['vrfs']['enabled'] = false;

Comunicação com Roteadores

Para que o Looking Glass consiga coletar as informações que serão expostas na tela, ele precisará se comunicar com alguém. Isso pode acontecer inputando comandos dentro dos seus roteadores de borda, ou inputando comando em um daemon de BGP local (FRRouting por exemplo) que tenha um iBGP fechado com seus roteadores de borda. Ambos os metodos são explicados mais a baixo.

Para que isso aconteça, é necessario configurar essas informações diretamente no arquivo config.php, informando com quem o PHP se comunicará. O exemplo abaixo já vem pronto no arquivo:

// Authentication based on SSH or Telnet with password

// The hostname or the IP address

$config['routers']['router1']['host'] = 'r1.example.net';

// The user to use to connect to the router

$config['routers']['router1']['user'] = 'readonlyuser';

// The password of the given user

$config['routers']['router1']['pass'] = 'readonlypassword';

// The authentication mechanism to use (can be ssh-password or telnet)

$config['routers']['router1']['auth'] = 'ssh-password';

// The router type (can be cisco, ios, juniper or junos)

$config['routers']['router1']['type'] = 'juniper';

// The router source interface to be used

$config['routers']['router1']['source-interface-id'] = 'lo0';

// The router description to be displayed in the router list

$config['routers']['router1']['desc'] = 'Example\'s Router 1';

É possível informar diversos roteadores, apenas mudando o numero do equipamento. No exemplo acima pode reparar que está sendo usado como ['router1']. Caso queria ter mais equipamentos, basta copiar e adicionar abaixo router2, router 3 etc.

Método 01 - Inputando comandos no seu roteador de borda

Esse além de ser o método que recomendamos, é o método mais convencional visto de Looking Glass. Ele é interessante pois conseguirá ver além das rotas que foram eleitas para a FIB, também rotas que permanecem acomodadas apenas na RIB.

Nesse método o LG roda comandos em seu roteador de borda com intuito de ver como determinadas rotas são aprendidas, além de poder realizar pings e traceroutes. Após isso, o retorno desses comandos é exposto na tela do usuario. O detalhe desse método que que depende do projeto ter suporte a fabricante do roteador que você utiliza, onde no git deles consta os seguintes vendors suportados:

  • Support the following router types:
    • Arista
    • BIRD (v1 and v2)
    • Cisco (IOS and IOS-XR)
    • Extreme/Brocade NetIron
    • FRRouting
    • Huawei (VRP)
    • Juniper
    • Mikrotik/RouterOS
    • Nokia
    • OpenBGPd
    • Quagga
    • Vyatta/VyOS/EdgeOS

Para que isso seja possível, é necessario que seu roteador de borda tenha um usuario criado com permissão para esse tipo de comando. Inclusive, não é necessario ter acesso de escrita no equipamento!. Sugiro inclusive que, caso possível, limite os comandos que esse usuario conseguirá dar na caixa por motivos de segurança.

Tendo isso em mente, vamos configurar um exemplo para se comunicar com um roteador Huawei NE:

// IP ou dominio do seu roteador de borda; $config['routers']['router1']['host'] = '192.0.2.100';

// Usuario criado no equipamento; $config['routers']['router1']['user'] = 'lookingglass';

// Senha do usuario que foi criado; $config['routers']['router1']['pass'] = 'SenhaChuckNorris';

// Metodo de autenticação utilizada, podendo ser ssh-password ou telnet. Recomendamos utilização de SSH!

$config['routers']['router1']['auth'] = 'ssh-password';

// Por padrão ele consultará na porta 22 do SSH. Caso tenha sua porta alterada, pode especificar através da linha abaixo. Essa linha é opcional.

$config['routers']['router1']['port'] = '22';

// Fabricante do equipamento. No exemplo utilizaremos huawei;

$config['routers']['router1']['type'] = 'huawei';

// IP ou interface que originará ping e traceroute

$config['routers']['router1']['source-interface-id'] = '192.0.2.100';

// Nome do equipamento que aparecerá na interface Web. Sugiro especificar a cidade, POP ou algo que fique facil para o usuario identificar. Abaixo é um exemplo do que usamos:

$config['routers']['router1']['desc'] = 'HEXANETWORKS-RT-NE8000F1A-BGP01-SPO-SP4';

Caso já esteja tudo pronto do lado do roteador, já deverá conseguir consultar informações através da interface Web!

Método 02 - Utilizando FFRouting

Outra forma é subir um FFRouting e mandar o PHP checar diretamente nele. Dessa forma precisará subir um iBGP do FRR para seus roteadores de borda. A vantagem é que é agnostico a vendor, e a desvantagem é que conseguirá checar apenas a FIB dos roteadores de borda.

Esse arquivo vem pré-configurado para conversar com varios roteadores. Aqui explicarei um cenário simples, onde o FRRouting estará instalado no mesmo S.O. que o LG. Caso precise que funcione em um ambiente diferente, você terá que adaptar para o cenário de sua rede, utilizando a mesma lógica aqui explicada.

Seguindo a mesma logica do anterior, vamos editar apenas as linhas relacionadas ao "router1".

Configure mediante o exemplo:

// Authentication based on SSH or Telnet with password

// The hostname or the IP address

$config['routers']['router1']['host'] = '127.0.0.1';

// The user to use to connect to the router

$config['routers']['router1']['user'] = 'lookingglass';

// The password of the given user

$config['routers']['router1']['pass'] = 'SENHA-DO-USUARIO-LOOKINGGLASS';

// The authentication mechanism to use (can be ssh-password or telnet)

$config['routers']['router1']['auth'] = 'ssh-password';

// The router type (can be cisco, ios, juniper or junos)

$config['routers']['router1']['type'] = 'quagga';

// The router source interface to be used

//$config['routers']['router1']['source-interface-id'] = 'lo0';

// The router description to be displayed in the router list

Lg-roteador-de-borda.png

$config['routers']['router1']['desc'] = 'Roteador de Borda';

Acima determinamos que:

  • O LG fará consulta local;
  • Utilizará o usuário "lookingglass" para tal;
  • Com a senha "SENHA-DO-USUARIO-LOOKINGGLASS";
  • Utilizará SSH;
  • O arquivo de configuração não suporta FRRouting como parâmetro, sendo assim, iremos setar como Quagga. Como ambos possuem sintaxes semelhantes (Cisco-Like), será totalmente compatível;
  • Comentamos a interface de origem;
  • A descrição do roteador é "Roteador de Borda".

Caso queira remover o restante dos roteadores que aparecem, basta apagar ou comentar (//) as linhas referente aos outros roteadores.

O proximo passo é instalar o FRRouting:

apt-get install frr

Adicione o usuario "lookingglass" no seu linux, e o adicione ao grupo "frr":

adduser lookingglass

Informe a senha

Repita a senha

usermod -aG frrvty lookingglass

Acesse a pasta o arquivo daemons do FRR:

nano /etc/frr/daemons

Altere a linha bgpd=no para bgpd=yes e reinicie o FRR:

service frr restart

Utilize o comando vtysh para acessar a VTY do frr.

O próximo passo é basicamente fechar uma sessão iBGP entre seu roteador de borda, e o FRR. Caso não esteja habituado com configuração Cisco-Like, segue um exemplo:

router bgp 65000

neighbor 192.0.2.1 remote-as 65000

neighbor 2001:db8::2 remote-as 65000

!

address-family ipv4 unicast

  neighbor 192.0.2.1 route-map IMPORT in

  neighbor 192.0.2.1 route-map EXPORT out

exit-address-family

!

address-family ipv6 unicast

  neighbor 2001:db8::2 route-map IMPORT in

  neighbor 2001:db8::2 route-map EXPORT out

exit-address-family

!

route-map IMPORT permit 10

!

route-map EXPORT deny 1

Após isso, já terá seu Looking Glass em funcionamento, sem ter que se preocupar com integração de vendor, e com total suporte a IPv6.

Autor: André Dias