Установка И Использование Лаборатории Виртуальной Сети Eve-Ng Совместно С Ansible. Первый Опыт



Установка и использование лаборатории виртуальной сети EVE-NG совместно с Ansible. Первый опыт

В данной статье описан опыт сетевого инженера по развертыванию виртуальной лаборатории.

ЕВА-НГ дома, с целью подготовки к экспертным экзаменам Cisco. Я постарался собрать все основные этапы настройки, разбросанные по статьям в Интернете, и постарался добавить их в топологию, параллельно изучая ansible — систему управления конфигурациями.

Черновик статьи появился случайно, так как мне стало жаль терять накопленный опыт и я решил сохранить его в отдельный файл.

Вот что я представляю на ваш суд. Все решения, приведенные в статье, не претендуют на оптимальность, но абсолютно работают.



Установка EVE-NG



Подготовка хоста

В качестве хоста я использую следующую систему: Intel Xeon X3240, 32 ГБ ОЗУ под управлением Gentoo. Настройка KVM на Gentoo довольно тривиальна и, честно говоря, я не помню, с какими подводными камнями мне пришлось столкнуться при его развертывании.

Это было давно.

Главное, что катастрофически влияет на производительность лабораторного стенда типа EVE-NG, — это параметр ядра, позволяющий использовать вложенная виртуализация (вложенная виртуализация).

Для процессоров Intel:

  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
  
   

kvm-intel.nested=1

Вы можете прочитать больше на связь .



Подключение образов сетевых устройств

Образы сетевых устройств для подключения находятся в свободном доступе на самом cisco.com; для загрузки вам просто нужно иметь учетную запись начального уровня.

Нам понадобится XRv И КСО .

Загрузите по предоставленным ссылкам и следуйте рекомендациям в как .

Проблема, с которой я столкнулся при добавлении изображений, заключалась в том, как назвать каталоги, в которых должны быть размещены файлы.

hda.qcow2 .

Решение, как всегда, — реверс-инжиниринг.

Список заголовков, обработанных EVE-NG, хранится в файле:

/opt/unetlab/html/includes/init.php

Я процитирую это здесь:

$node_templates = Array( 'a10' => 'A10 vThunder', 'clearpass' => 'Aruba ClearPass', 'timos' => 'Alcatel 7750 SR', 'veos' => 'Arista vEOS', 'barracuda' => 'Barraccuda NGIPS', 'brocadevadx' => 'Brocade vADX', 'cpsg' => 'CheckPoint Security Gateway VE', 'docker' => 'Docker.io', 'acs' => 'Cisco ACS', 'asa' => 'Cisco ASA', 'asav' => 'Cisco ASAv', 'cda' => 'Cisco Context Directory Agent', 'csr1000v' => 'Cisco CSR 1000V', 'csr1000vng' => 'Cisco CSR 1000V (Denali and Everest)', 'cips' => 'Cisco IPS', 'cucm' => 'Cisco CUCM', 'ise' => 'Cisco ISE', 'c1710' => 'Cisco IOS 1710 (Dynamips)', 'c3725' => 'Cisco IOS 3725 (Dynamips)', 'c7200' => 'Cisco IOS 7206VXR (Dynamips)', 'iol' => 'Cisco IOL', 'titanium' => 'Cisco NX-OSv (Titanium)', 'nxosv9k' => 'Cisco NX-OSv 9K', 'firepower' => 'Cisco FirePower', 'firepower6' => 'Cisco FirePower 6', 'ucspe' => 'Cisco UCS-PE', 'vios' => 'Cisco vIOS', 'viosl2' => 'Cisco vIOS L2', 'vnam' => 'Cisco vNAM', 'vwlc' => 'Cisco vWLC', 'vwaas' => 'Cisco vWAAS', 'phoebe' => 'Cisco Email Security Appliance (ESA)', 'coeus' => 'Cisco Web Security Appliance (WSA)', 'xrv' => 'Cisco XRv', 'xrv9k' => 'Cisco XRv 9000', 'nsvpx' => 'Citrix Netscaler', 'sonicwall' => 'Dell SonicWall', 'cumulus' => 'Cumulus VX', 'extremexos' => 'ExtremeXOS', 'bigip' => 'F5 BIG-IP LTM VE', 'fortinet' => 'Fortinet FortiGate', //'radware' => 'Radware Alteon', 'hpvsr' => 'HP VSR1000', 'olive' => 'Juniper Olive', 'vmx' => 'Juniper vMX', 'vmxvcp' => 'Juniper vMX VCP', 'vmxvfp' => 'Juniper vMX VFP', 'vsrx' => 'Juniper vSRX', 'vsrxng' => 'Juniper vSRX NextGen', 'vqfxre' => 'Juniper vQFX RE', 'vqfxpfe' => 'Juniper vQFX PFE', 'linux' => 'Linux', 'mikrotik' => 'MikroTik RouterOS', 'ostinato' => 'Ostinato', 'paloalto' => 'Palo Alto VM-100 Firewall', 'pfsense' => 'pfSense Firewall', 'riverbed' => 'Riverbed', 'sterra' => 'S-Terra', 'vyos' => 'VyOS', 'win' => 'Windows (Legacy template)', 'winstation' => 'Windows Workstation', 'winserver' => 'Windows Server', 'vpcs' => 'Virtual PC (VPCS)' );

То есть если нам нужно добавить образ с каким-либо Linux, как мы это сделаем ниже, то просто создаем каталог /opt/unetlab/addons/qemu/linux-whatever/ и поместите в него файл изображения hda.qcow2 .



Настройка среды

Под средой мы подразумеваем все, что делает нашу жизнь более удобной.



Доступ к консоли роутера

Несмотря на то, что в EVE-NG разработчики ввели возможность доступа к консолям сетевых устройств через сеть с помощью HTML5, доступ со сторонних клиентов более удобен и привычен.

Основное удобство, которое предоставляет putty в моем случае, — это возможность использовать буфер обмена.

Копирование/вставка не работает в веб-консоли.

Итак, процесс выглядит следующим образом: Установка шпаклевки на машину, с которой будет осуществляться доступ.

Я работаю на ПК с Ubuntu, поэтому:

sudo apt-get install putty

Но этого мало, нужно еще указать браузеру, в моем случае хрому, как реагировать на ссылки типа телнет:// .

Для этого вам нужно создать файл ~/.

local/share/applications/telnet.desktop следующее содержание:

[Desktop Entry] Version=1.0 Name=Telnet GenericName=Telnet Comment=Telnet Client Exec=/usr/bin/putty %U TryExec=/usr/bin/putty Terminal=false Type=Application Categories=TerminalEmulator;Network;Telnet;Internet;BBS; MimeType=x-scheme/telnet X-KDE-Protocols=telnet Keywords=Terminal;Emulator;Network;Internet;BBS;Telnet;Client;

Зарегистрируйте обработчик:

xdg-mime default telnet.desktop x-scheme-handler/telnet

После этого консоли прекрасно откроются в шпаклевке.

Задачу по переходу на gnome-терминал с вкладками или его аналог я оставлю на потом.



Запускаем сниффер трафика

Wireshark абсолютно необходим при изучении сетевых технологий.

О его использовании написано много.

Я не буду повторяться.

Опишу процесс настройки.

Установка на клиенте:

sudo apt-get install wireshark

Но опять браузер не понимает как обработать ссылку захватывать:// Вам придется объяснить ему это в три этапа: Эшаг 1: Как и в случае с консолями, файл ~/.

local/share/applications/wireshark.desktop тип:

[Desktop Entry] Name=Wireshark Exec=capture_chrom.sh %u MimeType=x-scheme-handler/capture; Type=Application

Зарегистрируйте обработчик:

xdg-mime default wireshark.desktop x-scheme-handler/capture

Эшаг 2: Обработчик — это bash-скрипт на клиентской машине в любом каталоге из списка PATH:

#!/bin/bash ip=`echo $@ | sed 's/.

*\/\/\(.

*\)\/\(.

*\)/\1/g'` interface=`echo $@ | sed 's/.

*\/\/\(.

*\)\/\(.

*\)/\2/g'` ssh root@$ip tcpdump -i $interface -U -w - | wireshark -k -i -

Эшаг 3: Ключ доступа по SSH между клиентской машиной и EVE-NG. На клиентской машине (вместо ip_eve ставим адрес EVE-NG):

ssh-keygen -t rsa ssh root@_ip_eve_ mkdir -p .

ssh cat ~/.

ssh/id_eve_ng.pub | ssh root@ip_eve 'cat >> .

ssh/authorized_keys2'

После этого захват трафика в Wireshark на стороне клиента заработает. Это именно то, что нам нужно.

На этом скромный пользователь может остановиться, но совершенству нет предела и мы продолжаем.



Настройка экземпляра ansible сервера

Необходимость Ansible для топологий виртуальных лабораторий для меня не была очевидна в начале пути.

Но со временем, во вторых десяти лабораторных часах, в голову приходит мысль: а не стоит ли автоматизировать загрузку стартовых топологий в устройства, не перегружая их, тем самым экономя время? Итак, с чего начать? С доступными ограничениями! Да, они действительно существуют. Для меня, довольно далекого от программирования, предложение на одном из форумов оказалось слишком жестоким — самому добавить обработчик телнета.

Telnet нужен был для простого решения — настроить ansible на виртуальной машине EVE-NG и подключаться по telnet к консольным портам виртуальных маршрутизаторов.

Но не тут то было - работает только ssh. Но мы старые инженеры и не привыкли отступать! Если гора не идет к Мухаммеду, то будем двигаться к ней — в самой топологии настроим отдельный инстанс с убубту, благо для этого есть возможность.

Я не буду показывать вам, как развернуть образ, загруженный с ubuntu.com, в KVM. Я сделал это на отдельной машине, настроил и загрузил в EVE-NG. После установки нам потребуются пакеты с телнет-сервером и настройкой статического IP-адреса.



Настройка телнет-сервера

Мне не удалось заставить EVE-NG показать мне консоль сервера стандартным способом, нажав на устройство.

Чтобы не копать слишком глубоко, я пошел в обход и настроил телнет-сервер.

SSH v2, конечно, тоже имеется и работает с CSR, но он очень медленный для интерактивной работы, да и бесполезен — стенд у нас лабораторный, а не производственный.

Потом необходимость в сервере отпала, но запись в шпаргалке осталась, так что тоже дам.

Итак, начнем:

sudo apt-get install xinetd telnetd

После автоматического запуска ксинетд Разумеется, ничего не произошло, как нам обещали в Интернете.

Нужно добавить в /etc/xinetd.d файл телнет следующее содержание:

service telnet { disable = no flags = REUSE socket_type = stream wait = no user = root server = /usr/sbin/in.telnetd }

и перезапусти сервер ксинетд :

sudo service xinetd restart

Проверка telnet локально:

@ansible-server:~$ telnet 127.0.0.1 Trying 127.0.0.1. Connected to 127.0.0.1. Escape character is '^]'.

Ubuntu 16.04.2 LTS ansible-server login:

Работает! Загружаем полученный образ в виртуальную машину EVE-NG и пытаемся собрать топологию.

Теперь мы можем, настроив адрес из подсети сервера на соседнем компьютере по топологии, дозвониться до него по телнету.

Все работает быстро, в отличие от SSH.

Коллекция топологий

Здесь все предельно просто.

Моя топология выглядит так:

Установка и использование лаборатории виртуальной сети EVE-NG совместно с Ansible. Первый опыт



Развертывание подсистемы ansible



Настройка CSR для работы с ansible

Выделим на каждом роутере отдельный порт для управления и подключим его к общему хабу с сервером ansibleports. Ги2 .

Выберем подсеть для управления, у меня это 192.168.0.0/24. И на портах назначим IP-адреса в соответствии с номером роутера.

Эмы введем ту же информацию в /etc/хосты серверы:

192.168.0.1 R1 192.168.0.2 R2 192.168.0.3 R3 192.168.0.4 R4 192.168.0.5 R5 192.168.0.6 R6 192.168.0.7 R7 192.168.0.8 R8 192.168.0.9 R9 192.168.0.10 R10 192.168.0.11 XR1 192.168.0.12 XR2 192.168.0.20 SW1

На каждом роутере настроим SSH v2 согласно ссылки .

Всё тривиально, скажу лишь, что для запуска необходимого SSHv2 нам необходимо сгенерировать ключ размером более 768 бит, я выбрал размер 2048. Проверяем доступ с сервера к роутерам по SSH, попутно собирая ключи в хранилище.

Сохраняем конфигурацию на роутере:

R1#wr Building configuration. [OK]

И экспортируем конфигурацию в EVE-NG, чтобы не перенастраивать устройства при перезагрузке:

Установка и использование лаборатории виртуальной сети EVE-NG совместно с Ansible. Первый опыт

Эта функция в EVE-NG, как и в Unetlab до нее, работает с разной степенью успеха.

Но будем надеяться.



Создание первой рабочей книги

Как мы помнить Структура Ansible состоит из двух основных частей — описания устройств (инвентаря) и рабочей книги, которая собственно и содержит логику системы.

В нашем случае инвентарь достаточно примитивен и файл его содержащий( /etc/ansible/хосты ) принимает вид:

[ios] R[1:10]

Что показывает список имен хостов от R1 до R10 (помните, что мы уже указали /etc/hosts для разрешения имен).

А вот с варбуком придется повозиться.

Первым шагом, чтобы загрузить на виртуальный маршрутизатор IOS конфигурацию, представляющую для нас лабораторный интерес, нам необходимо выполнить откат к исходному нулю, содержащему только настройки IP управления и VTY. Для этого попробуем использовать модуль ios_command. Основой всей работы по изменению конфигурации в IOS-устройствах для нас будет функционал команды привилегированного режима роутера:

configure replace scp://[PATH ] force

Нулевые конфигурации мы будем хранить на сервере в домашнем каталоге нового пользователя под именем маршрутизатор в каталоге /home/router/default_configs/ .

Забегая вперед скажу, что файлы будут иметь те же имена, что и в инвентаре, т.е.

в нашем случае это R1, R2 и т.д. Давайте создадим в /opt/ансибль файл откат.yml тип:

- name: rollback hosts: ios serial: 1 connection: local gather_facts: false remote_user: cisco tasks: - name: Performing rollback to default configuration. ios_command: commands: configure replace scp://router:[email protected]:~/default_configs/ {{ inventory_hostname }} force timeout: 30

Итак, по порядку: Название игровой книги:

- name: rollback

Название использованного инвентаря:

hosts: ios

Количество параллельно настраиваемых устройств из инвентаря.

Важная часть последующей оптимизации производительности.



serial: 1

Я так понимаю, это указывает на подключение к локальному обработчику заданий.

Я могу ошибаться.



connection: local

Отключение сбора информации о хосте:

gather_facts: false

Имя пользователя для подключения к устройствам:

remote_user: cisco

Вызов модуля:

ios_command:

Отправка команды на устройство из инвентаря:

commands: configure replace scp://router:[email protected]:~/default_configs/ {{ inventory_hostname }} force

Таймаут ответа в секундах:

timeout: 30

Ничего особенно сложного, как видим, но есть одно! Попробуем запустить.



ansible-playbook .

/rollover.yml -k -vvvv

Получаем ошибку!

"msg": "ios_command does not support running config mode commands. Please use ios_config instead"

Google мало что нам расскажет об этом, поэтому вооружаемся изобретательностью и пытаемся найти, кто нам это сказал.

И находим файл используемого нами модуля: /usr/local/lib/python2.7/dist-packages/ansible-2.3.0-py2.7.egg/ansible/modules/network/ios/ios_command.py , содержащий следующий код:

if module.check_mode and not item['command'].

startswith('show'): warnings.append( 'only show commands are supported when using check mode, not ' 'executing `%s`' % item['command'] ) elif item['command'].

startswith('conf'): module.fail_json( msg='ios_command does not support running config mode ' 'commands. Please use ios_config instead' )

Очевидно, что разработчики немного переборщили, назначив все параметры configure режиму конфигурации, поэтому добавим в соответствующую строку:

elif item['command'].

startswith('configure terminal'):

Работает!

root@ansible-server:/opt/ansible# ansible-playbook .

/rollback.yml -k SSH password: PLAY RECAP ****************************************************** R1 : ok=1 changed=0 unreachable=0 failed=0 R10 : ok=1 changed=0 unreachable=0 failed=0 R2 : ok=1 changed=0 unreachable=0 failed=0 R3 : ok=1 changed=0 unreachable=0 failed=0 R4 : ok=1 changed=0 unreachable=0 failed=0 R5 : ok=1 changed=0 unreachable=0 failed=0 R6 : ok=1 changed=0 unreachable=0 failed=0 R7 : ok=1 changed=0 unreachable=0 failed=0 R8 : ok=1 changed=0 unreachable=0 failed=0 R9 : ok=1 changed=0 unreachable=0 failed=



Создание второй книги

Я не буду описывать ее так подробно, как на предыдущем этапе, просто приведу пример рабочей тетради, заполняющей тематическую начальную конфигурацию лабораторных работ одного известного бренда с тремя буквами в названии: /etc/ansible/hosts

[ios] R[1:10] [ios.base.ipv4] R[1:6]

/opt/ansible/base.ipv4.yml

- name: base.ipv4 hosts: ios.base.ipv4 connection: local gather_facts: false remote_user: cisco serial: 1 tasks: - name: base.ipv4 configuration load ios_config: src: .

/IOS-XE-initials/base.ipv4/{{ inventory_hostname }}

Файлы начальной конфигурации находятся в папке /opt/ansible/IOS-XE-initials/base.ipv4 , соответственно.

Основное отличие этого сценария — использование функционала модуля ios_config и передачу права интерпретировать те команды, которые необходимо выполнить на устройствах.

На этом все, спасибо за внимание.

Если статья достойна продолжения, то следующей темой будет настройка взаимодействия IOS XR и ansible. Теги: #*nix #cisco #cisco #Виртуализация #eve-ng cisco ansible

Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.