Aprenda a instalar um dos melhores Looking Glasses de código aberto: o Hyperglass

O que é o Hyperglass

O hyperglass é um espelho de rede de código aberto escrito por um engenheiro de rede para outros engenheiros de rede. O objetivo de um espelho é fornecer aos clientes, colegas e completos estranhos uma visibilidade autônoma da rede de uma operadora. A hyperglass foi criada com o grande objetivo de beneficiar a comunidade da Internet em geral, fornecendo uma maneira mais rápida, fácil e segura para as operadoras fornecerem serviços de espelhos a seus clientes, colegas e outras operadoras de rede.

Recursos:
– Rota BGP
– BGP Community
– BGP AS Path
– Ping
– Traceroute

Suporte para:
– Arista EOS
– BIRD
– Cisco IOS-XR
– Cisco IOS/IOS-XE
– Cisco NX-OS
– FRRouting
– Huawei
– Juniper JunOS
– Mikrotik
– Nokia SR OS
– TNSR
– VyOS

Personalização recursos, tema, texto da UI/API, mensagens de erro e comandos.

Ao decorrer do tutorial irei deixar todos os links com referencia a documentação https://hyperglass.dev/docs/, pois o mesmo tem muita possibilidades.

Notas e agradecimento

O hyperglass é tem sua principal base desenvolvida em Python e está disponível no github.com por thatmattlove, no entanto conta com um grupo no telegram onde encontrei algumas soluções para huawei, meu conhecimento em Python é limitado (ainda), mas criei meu próprio fork do projeto, e realizei algumas alterações. Deixar aqui uma agradecimento a eaitelecomunicacoes onde encontrei uma contribuição que me ajudou muito. Contamos com ajuda de todos para tornar o projeto algo ainda melhor! Se tiver melhorias nao deixe de realizar um Pull requests.

Distribuição Linux

Todos meus testes foram realizando em cima do Debian 11
Instalação do Debian 11 Bullseye limpa passo-a-passo

Acesse seu servidor e se torne root da forma correta:

Pacotes necessários

Script de instalação

Ao finalize execute o comando hyperglass –help para ver se a instalação esta funcionando.

Configurando hyperglass

Vamos definir o diretório de configurações, selecione com a seta para baixo /etc/hyperglass

Antes de deixar você chanar no erro webpack:

Vamos a solução localize webpack5: true, e altere para webpack5: false,

Parâmetros de configuração

Crie o arquivo /etc/hyperglass/hyperglass.yaml

Ajuste suas informações. Doc.

Adicionando Dispositivos

Para adicionar seus dispositivos para cunsultas LG, crie o arquivo /etc/hyperglass/devices.yaml. Vou deixar um exemplo básico para Huawei, Mikrotik e comando personalizados com Linux. Docs

Adicione de acordo suas configurações

Comandos personalizados

Acima adicionei um device linux, qual temos comandos personalizado, segue um exemplo de como seria. Crie o arquivo /etc/hyperglass/commands.yaml

Crie um arquivo para seis termos:

Descreva de acordo suas políticas.

Agora vamos a construção da interface do usuário. o Comando a baixo pode levar uns minutinho.

Aguarde até ter a resposta:

Iniciando o serviço

Poderíamos iniciar com o comando hyperglass start, mas vamos criar um serviço no linux para fazer esse trabalho, para deixar até mesmo automatizado durante o boot. para isso irei criar uma pasta /etc/hyperglass/service/ onde irei criar nosso serviço.

Agora vamos instruir o que deve ser feito.

Vamos cria um apontamento, recarecar nosso daemon, dar um enable para deixar iniciando com o boot, em seguida vamos iniciar o serviço.

Pode levar um minutinho até iniciar, você pode acompanhar os logs.

Quando aparecer a mensagem a baixo você pode acessar em seu navegador:

Pode verificar também as portas que estão sendo ouvidas.

Acesse me seu navegador http://SEUIP:PORTA

Bonus: Proxy Nginx + Https

É bem comum querer executar o hyperglass em outra porta e somente para localhost, e criar um proxy para acesso web bem como ativar suporte https para sua página, pois em alguns casos ele pode esta rodando junto com outros serviços sem problema algum. Não é necessário ter uma “VM” só para isso. Vamos ao exemplo

Altere o IP em listen_address para nosso endereço da loopback 127.0.0.1 e defina outra porta listen_port que ira rodar o serviço, no meu caso vou usar 58000

Reinicie o hyperglass

Instale o Nxgix

Em alguns caso recomendo deletar as conf padrões, caso tiver problemas.

Crie um arquivo de configuração o nginx criar um proxy do nosso hyperglass

Adicione

Link o arquivo no diretório /etc/nginx/sites-enabled qual será carregado ao iniciar o nginx, em seguira reinicie o serviço do nginx.

Agora você já pode acessar seu hyperglass através do nginx.

Criando certificado

Ao executar o Certbot instalado via apt tive alguns erros do python, acredito que conflitou alguma coisa com o hyperglass, (como meu tempo é bem curto inclusive para esta escrevendo aqui) realizei a instalação via snap qual resolveu meu problema.
Segue a instalação do snap:

Instale o certbot via snap, crie um link em nossos binários, em seguida execute ele.

Informe os dados, ao finalizar o mesmo irá já ajustar seu arquivo do nginx, e basta acessar seu domínio.

Não esqueça que a cada 90 dias o certificado expira, então crie uma rotina para renovação, você pode adicionar ao cron agendando por exemplo para todo dia primeiro tentar renovar.

Parabéns você finalizou! Se quiser fazer uma doação para o café ficarei muito feliz pelo seu reconhecimento!

Se não puder doar pode deixar seu agradecimento nos comentário também ficarei feliz em saber que ajudei. Se tiver qualquer pergunta deixe-a também. Se preferir entrar em Contato clique aqui.

Prints

Abraço!

Fontes:
https://hyperglass.dev/
https://hyperglass.dev/docs/

Rudimar Remontti

Trabalho atualmente como Gerente de Redes em um Provedor de Internet no Rio Grande do Sul.

Você pode gostar...

9 Resultados

  1. Marcelo Ramos disse:

    Boa noite,

    Fiz a instalação e integração com um NE40, MX10003 e um Cisco IOSXR. Em todos tenho o erro de Forbidden quando tento usar a função de traceroute. Já rota BGP e Ping funcionam perfeitamente. Alguém passou por esse problema?

    No arquivo de logs nem aparece nada quando executo a ação de tracert. Já bgp route e ping loga sem problemas.

  2. William Nunes Rios disse:

    Fiz toda a instalação e as consultar ipv4 está perfeitas, porem a ipv6 sempre me da uma mensagem dessa IPv6 is not enabled e não consigo fazer funcionar.

  3. Andre disse:

    No meu apareceu o seguinte erro:

    [WARNING] 20230407 17:22:11 | hyperglass.models.config.vrf:239 | set_dynamic → You have set the VRF name to ‘default’. This is no longer the way to
    designate a VRF as the default (or global routing table) VRF. Instead,
    add ‘default: true’ to the VRF definition.

    [INFO] 20230407 17:22:11 | hyperglass.configuration.main:39 | → Configuration directory: /etc/hyperglass
    Traceback (most recent call last):
    File “/usr/local/lib/python3.9/dist-packages/hyperglass/configuration/main.py”, line 105, in _config_optional
    [ERROR] 20230407 17:22:11 | hyperglass.exceptions:38 | __init__ → [WARNING]
    config = yaml.safe_load(cf) or {}
    File “/usr/local/lib/python3.9/dist-packages/yaml/__init__.py”, line 125, in safe_load
    return load(stream, SafeLoader)
    File “/usr/local/lib/python3.9/dist-packages/yaml/__init__.py”, line 81, in load
    return loader.get_single_data()
    File “/usr/local/lib/python3.9/dist-packages/yaml/constructor.py”, line 49, in get_single_data
    node = self.get_single_node()
    File “/usr/local/lib/python3.9/dist-packages/yaml/composer.py”, line 36, in get_single_node
    document = self.compose_document()
    File “/usr/local/lib/python3.9/dist-packages/yaml/composer.py”, line 58, in compose_document
    self.get_event()
    File “/usr/local/lib/python3.9/dist-packages/yaml/parser.py”, line 118, in get_event
    self.current_event = self.state()
    File “/usr/local/lib/python3.9/dist-packages/yaml/parser.py”, line 193, in parse_document_end
    token = self.peek_token()
    File “/usr/local/lib/python3.9/dist-packages/yaml/scanner.py”, line 129, in peek_token
    self.fetch_more_tokens()
    File “/usr/local/lib/python3.9/dist-packages/yaml/scanner.py”, line 223, in fetch_more_tokens
    return self.fetch_value()
    File “/usr/local/lib/python3.9/dist-packages/yaml/scanner.py”, line 577, in fetch_value
    raise ScannerError(None, None,
    yaml.scanner.ScannerError: mapping values are not allowed here
    in “/etc/hyperglass/commands.yaml”, line 2, column 15

    During handling of the above exception, another exception occurred:

    Traceback (most recent call last):
    File “/usr/local/bin/hyperglass”, line 8, in
    sys.exit(CLI())
    File “/usr/local/lib/python3.9/dist-packages/click/core.py”, line 1130, in __call__
    return self.main(*args, **kwargs)
    File “/usr/local/lib/python3.9/dist-packages/click/core.py”, line 1055, in main
    rv = self.invoke(ctx)
    File “/usr/local/lib/python3.9/dist-packages/click/core.py”, line 1657, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
    File “/usr/local/lib/python3.9/dist-packages/click/core.py”, line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
    File “/usr/local/lib/python3.9/dist-packages/click/core.py”, line 760, in invoke
    return __callback(*args, **kwargs)
    File “/usr/local/lib/python3.9/dist-packages/hyperglass/cli/commands.py”, line 70, in build_frontend
    return build_ui(timeout)
    File “/usr/local/lib/python3.9/dist-packages/hyperglass/cli/util.py”, line 68, in build_ui
    from hyperglass.configuration import CONFIG_PATH, params, frontend_params
    File “/usr/local/lib/python3.9/dist-packages/hyperglass/configuration/__init__.py”, line 4, in
    from .main import (
    File “/usr/local/lib/python3.9/dist-packages/hyperglass/configuration/main.py”, line 131, in
    _user_commands = _config_optional(CONFIG_COMMANDS)
    File “/usr/local/lib/python3.9/dist-packages/hyperglass/configuration/main.py”, line 108, in _config_optional
    raise ConfigError(error_msg=str(yaml_error))

  4. Paulo Morais disse:

    Excelente material como sempre, parabéns pelo conteúdo, espero colocar um desses pra rodar em breve.

  5. William disse:

    Show de bola, esse conteúdo já está com suporte a consulta por ipv6?

  6. Bruno disse:

    Muito bom o conteudo, está de parabens!!!
    Mas se puderem ajudar, fiz o procedimento, mas apresenta o erro:

    root@hyperglass:/etc/hyperglass# hyperglass build-ui
    [WARNING] 20230401 09:08:12 | hyperglass.models.config.vrf:239 | set_dynamic → You have set the VRF name to ‘default’. This is no longer the way to
    designate a VRF as the default (or global routing table) VRF. Instead,
    add ‘default: true’ to the VRF definition.

    [INFO] 20230401 09:08:12 | hyperglass.configuration.main:39 | → Configuration directory: /etc/hyperglass
    [ERROR] 20230401 09:08:12 | hyperglass.configuration.validation:47 | validate_config → 1 validation error for Device
    vrfs -> ipv6 -> source_address
    value is not a valid IPv6 address (type=value_error.ipv6address)
    [ERROR] 20230401 09:08:12 | hyperglass.exceptions:38 | __init__ → [WARNING]

    Field: vrfs → ipv6 → source_address
    Error: value is not a valid IPv6 address

    Traceback (most recent call last):
    File “/usr/local/bin/hyperglass”, line 8, in
    sys.exit(CLI())
    File “/usr/local/lib/python3.9/dist-packages/click/core.py”, line 1130, in __call__
    return self.main(*args, **kwargs)
    File “/usr/local/lib/python3.9/dist-packages/click/core.py”, line 1055, in main
    rv = self.invoke(ctx)
    File “/usr/local/lib/python3.9/dist-packages/click/core.py”, line 1657, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
    File “/usr/local/lib/python3.9/dist-packages/click/core.py”, line 1404, in invoke
    return ctx.invoke(self.callback, **ctx.params)
    File “/usr/local/lib/python3.9/dist-packages/click/core.py”, line 760, in invoke
    return __callback(*args, **kwargs)
    File “/usr/local/lib/python3.9/dist-packages/hyperglass/cli/commands.py”, line 70, in build_frontend
    return build_ui(timeout)
    File “/usr/local/lib/python3.9/dist-packages/hyperglass/cli/util.py”, line 68, in build_ui
    from hyperglass.configuration import CONFIG_PATH, params, frontend_params
    File “/usr/local/lib/python3.9/dist-packages/hyperglass/configuration/__init__.py”, line 4, in
    from .main import (
    File “/usr/local/lib/python3.9/dist-packages/hyperglass/configuration/main.py”, line 138, in
    devices = validate_config(config=_user_devices.get(“routers”, []), importer=Devices)
    File “/usr/local/lib/python3.9/dist-packages/hyperglass/configuration/validation.py”, line 48, in validate_config
    raise ConfigInvalid(err.errors()) from None
    hyperglass.exceptions.ConfigInvalid:

    Field: vrfs → ipv6 → source_address
    Error: value is not a valid IPv6 address

  7. João Paulo disse:

    Muito bom!, obrigado por compartilhar mais uma vez!!!

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *