This day is inspired by the article “Визуализация сетевых топологий, или зачем еще сетевому инженеру Python #2”. I wrote Golang program that analyzes the output of the cisco sh int, sh mac-address-table (for switches) or sh ip arp (for routers) commands and vizualizes network topology from mac address tables. I only used mac address information, not LLDP (CDP).
NeXt Ui (Github) is used for visualization.
For example, I received an output with self-made telnet client on Golang from a network of this topology:
...
Если осталась старая конфигурация, удалить и перезапустить
Cisco>enable
Cisco#erase startup-config
Cisco#reload
Cisco>enable
Новая конфигурация
Cisco#configure terminal
Назвать роутер
Cisco(config)#hostname R1
Хранить пароли в файле конфигурации в зашифрованном виде
R1(config)#service password-encryption
Отключить управление по http, https, CDP
R1(config)#no ip http server
R1(config)#no ip http secure-server
R1(config)#no cdp run
Отключить интерпретацию неправильно введенных команд как DNS-запрос
R1(config)#no ip domain lookup
Пароль на подключение по консольному порту
R1(config)#line console 0
R1(config-line)#password cisco
R1(config-line)#login local
R1(config-line)#exit
...
Настроить Event Manager для логгирования всех выполненных на роутере команд:
event manager applet CLIaccounting event cli pattern ".*" sync no skip no action 1.0 syslog priority informational msg "$_cli_msg" set 2.0 _exit_status 1 Включить логгирование:
archive log config logging enable logging size 1000 notify syslog hidekeys По умолчанию logging size 100 если этого достаточно, команду можно не вводить. Посмотреть лог:
show archive log config all
Все выполненные команды будут дублироваться на консоль. Если это не надо, отключить вывод:
no logging console
Включить:
logging console
...
Если при попытке подключиться выдает что-то похожее на “no matching key exchange method found”:
На Cisco (ip 192.168.2.2):
длина ключа RSA должна быть больше 1024 создаем учетную запись пользователя (здесь - cisco) В linux:
создаем ~/.ssh/config Host 192.168.2.2 KexAlgorithms +diffie-hellman-group1-sha1 Ciphers aes128-cbc,3des-cbc,aes192-cbc,aes256-cbc Алгоритмы могут быть другие, подходящие будут указаны в сообщении об ошибке.
проверяем
ssh 192.168.2.2 -l cisco При ошибке ‘connection refused’ помогает создание нового ключа:
crypto key generate rsa general-keys modulus 1024
В linux удаляю запись о старом ключе
ssh-keygen -f ~/.ssh/known_hosts -R "192.168.2.2"
и пробую поключиться
...
В Windows запущен GNS3 с роутером, доступным по telnet (ip 192.168.2.2), установлена Ubuntu в WSL. Как управлять роутером через Ansible?
Ставим Ansible
sudo apt install ansible
Создаем файлы в домашнем каталоге
myhosts
[cisco-routers] 192.168.2.2 ansible.cfg
[defaults] inventory = ./myhosts gathering = explicit telnet_command_show_ver.yml
(логин без ввода имени пользователя)
--- - name: Run show command on routers hosts: cisco-routers tasks: - name: run show commands telnet: login_prompt: "Password: " password: cisco prompts: - "[>#]" command: - terminal length 0 - show version Выполняем
ansible-playbook telnet_command_show_ver.yml
...