GNS3 в хмарі


Привіт!
Сьогодні я вам розповім, як налаштувати GNS3 сервер в хмарних сервісах. А в кінці буде невеликий FAQ по GNS3.
Для прикладу було обрано Google Compute Engine (GCE) (через безкоштовного двомісячного тріалу і більш низьких цін на виртуалки в Європі порівняно з AWS).

Чому взагалі варто морочитися?
Один раз спробувавши, я більше не запускаю GNS3 локально. Немає сенсу забивати оперативку свого ноутбука лабою. Крім того, я можу запускати свої CCIE лаби з будь-якого комп'ютера (в моєму випадку робочий і домашній ноутбуки) — неважливо, скільки RAM/який CPU. При цьому, локальні файли лаб я зберігаю в Dropbox, що дозволяє мені продовжувати працювати над тією ж лабою з різних пристроїв.
Під катом ви знайдете докладну інструкцію з встановлення GNS3 в GCE.


Підготовка VM

1. Реєстрація

Зареєструватися можна тут.

2. Створення проекту

Після реєстрації нам необхідно створити проект за допомогою кнопки Create Project.


3. Створення віртуальної машини (инстанса)

Після створення проекту ми потрапляємо в меню Google Cloud Platform.
Для створення виртуалки натискаємо у верхньому лівому куті Menu -> Compute Engine:
image

Натискаємо на Create instance:


Параметри:
Name: gns3server
Zone: будь-яка в Європі
Machine type: n1-standard-2 (2 vCPU 7.5 GB RAM) або краще
Boot disk: 10-15 GB standard persistent disk, image Debian 8.3 jessie (або Ubuntu)
Внизу натискаємо Networking -> External IP: New Static IP. Вводимо будь-яке ім'я.


Натискання на Create створить віртуалку.

4. Перевірка імені користувача

Після того, як виртуалка створиться, заходимо на неї з допомогою браузерного SSH клієнта: SSH -> Open in browser window
Перевіряємо ім'я користувача за допомогою whoami. Якщо ім'я користувача gns3, то необхідно його змінити:
Settings -> Change Linux Username -> вводимо gns3 -> ok

5. Налаштування SSH доступу до сервера

Тепер налаштуємо доступ для улюбленого клієнта SSH, в моєму випадку це SecureCRT.
Нам необхідно створити приватний ключ (якщо у вас ще немає). Це можна зробити за допомогою ssh-keygen або PuTTYgen (Windows), або безпосередньо в SecureCRT з допомогою Tools -> Create Public Key.
Ключ повинен бути у OpenSSH форматі з коментарем gns3. Не забудьте поставити пароль для приватного ключа (зашифрувати).
Тепер необхідно додати створений публічний ключ в GCE з допомогою меню:
Compute Engine -> Metadata -> SSH keys -> Edit


Натискаємо Add item, додаємо вміст файлу id_rsa.pub і натискаємо Save.
Після цього необхідно перевірити, що ми можемо зайти на сервер з допомогою обраного SSH клієнта.

6. Налаштування мережевого доступу/Firewall

Заходимо у Menu -> Networking, потім Firewall Rules:
Прибираємо 0.0.0.0/0 скрізь, крім ICMP.
Правило default-allow-ssh, додаємо свій IP IP ranges. Не забудьте додати потім інші IP, з яких ви будете користуватися GNS3 сервером.
Можна також додати це правило Google IP (74.125.0.0/16), щоб можна було заходити по SSH через браузер.

Нам необхідно створити ще одне правило з допомогою кнопки Create Firewall Rule:
Name — allow-gns-traffic
Source IP ranges — ваші IP адреси
Allowed protocols and ports — tcp:8000; tcp:2000-3100; udp:10000-11000


Опціонально: відключення password-less sudo (рут без пароля)На GCE за замовчуванням включається password-less sudo, що особисто мене турбує. Для того, щоб це вимкнути, необхідно виконати наступні команди:
sudo passwd gns3
# вводимо пароль для користувача gns3
# заходимо під рутом
sudo su
visudo

Міняємо рядок
gns3 ALL=NOPASSWD: ALL
на
gns3 ALL=(ALL) ALL

Опціонально: управління виртуалкой локально за допомогою PythonНам буде потрібно локально встановлений Python 3 і бібліотека Google API client, яку можна встановити за допомогою pip:
sudo pip3 install --upgrade google api-python-client

Створимо ключ для авторизації для цього заходимо в Google Cloud Platform Menu -> API Manager -> Credentials. Потім натискаємо на Create Credentials -> Service account key -> JSON:


Зберігаємо JSON файл локально на комп'ютері і додаємо локальну змінну середовища:
GOOGLE_APPLICATION_CREDENTIALS="шлях-до-json"

Тепер створіть наступні сценарії:
tools.py
from oauth2client.client import GoogleCredentials
from googleapiclient.discovery import build

# змінити такі змінні, якщо необхідно
# ім'я проекту буде у форматі gns3 -####
PROJECT = 'gns3-0000'
ZONE = 'europe-west1-d'
INSTANCE = 'gns3server'

credentials = GoogleCredentials.get_application_default()
compute = build('compute', 'v1', credentials=credentials)



def start_instance(compute):
return compute.instances().start(
project=PROJECT,
zone=ZONE,
instance=INSTANCE).execute()

def stop_instance(compute):
return compute.instances().stop(
project=PROJECT,
zone=ZONE,
instance=INSTANCE).execute()

def check_status(compute):
return compute.instances().get(
project=PROJECT,
zone=ZONE,
instance=INSTANCE).execute()['status']

start.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from tools import compute, start_instance

def main():
print(start_instance(compute))

if __name__ == '__main__':
main()

stop.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from tools import compute, stop_instance

def main():
print(stop_instance(compute))

if __name__ == '__main__':
main()

check.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from tools import compute, check_status

def main():
print(check_status(compute))

if __name__ == '__main__':
main()

Тепер ви можете запускати, зупиняти і перевіряти поточний стан виртуалки з допомогою відповідних скриптів start.py, stop.py, check.py


Установка GNS3 server безпосередньо на віртуалку

7. Додавання репозиторію (PPA) з пакетами GNS3

Необхідно внести зміни в наступний файл:
sudo nano /etc/apt/sources.list

Додаємо в кінець файлу наступне:
deb http://ppa.launchpad.net/gns3/ppa/ubuntu trusty main
deb-src http://ppa.launchpad.net/gns3/ppa/ubuntu trusty main

Додамо ключ для PPA:
sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys A2E3EF7B


8. Установка необхідних пакетів

Спочатку оновимо встановлені пакети:
sudo dpkg --add-architecture i386 && sudo apt-get update && sudo apt-get upgrade

Встановимо все необхідне для GNS3 сервера:
sudo apt-get install git python3 python3-pip gns3-server gns3-iou


9. Зміна максимальної довжини черги для датаграм

Це необхідно, щоб позбутися від EXCESSCOLL помилки під час роботи з лабою. Вносимо зміни в наступний файл:
sudo nano /etc/sysctl.conf

Додайте в кінці:
# Prevent EXCESSCOLL error
net.unix.max_dgram_qlen=1000000


Примітка: якщо ви збираєтеся використовувати IOL, то необхідно також покласти файл ліцензії в домашню директорію (~/.iourc). Нагадаю, що легально його можна отримати, тільки якщо ви є співробітником Cisco.

10. Автоматичний запуск сервера GNS3 при запуску виртуалки.

Нагадаю, що в останній версії Debian використовується systemd init system/service manager.
Підготовка:
Створюємо лог файл і передаємо права на нього користувачеві gns3
sudo touch /var/log/gns3.log
sudo chown gns3 /var/log/gns3.log

Необхідно також створити кілька директорій в момент старту. Для цього вносимо зміни в наступний файл:
sudo nano /etc/tmpfiles.d/gns3.conf

Додаємо:
d /var/run/gns3 0755 gns3 gns3 
d /var/cache/gns3 0755 gns3 gns3 


Створюємо конфігураційний файл демона gns3server:
sudo nano /etc/systemd/system/gns3.service

Додаємо:
[Unit]
Description=GNS3 server

[Service]
Type=forking
Environment=statedir=/var/cache/gns3
PIDFile=/var/run/gns3/gns3.pid
ExecStart=/usr/bin/gns3server --log /var/log/gns3.log \
--pid /var/run/gns3/gns3.pid --daemon
Restart=on-abort
User=gns3

[Install]
WantedBy=multi-user.target


Запускаємо демон і перезавантажуємо віртуалку, щоб створилися директорії:
sudo systemctl enable gns3.service
sudo reboot now


11. Перевірка

Перевіримо, що gns3server працює і дізнаємося його версію:
➜ ~ systemctl check gns3
active
➜ ~ ps -aux | grep gns3server
gns3 574 0.0 0.3 172704 30396 ? Sl 16:02 0:00 /usr/share/gns3/gns3-server/bin/python /usr/bin/gns3server --log /var/log/gns3.log --pid /var/run/gns3/gns3.pid --daemon
➜ ~ gns3server --version
1.4.4


12. Доменні запису

Нам необхідно також створити доменні запису для сервера. Якщо у вас є свій домен, я раджу створити піддомен для GCE static IP.
Якщо у вас немає домену, то додайте наступний запис у ваш локальний hosts file:
<GCE static IP> gns3server

На GNS3 сервері необхідно також змінити /etc/hosts:
sudo nano /etc/hosts

Додаємо:
127.0.0.1 <обране доменне ім'я або gns3server>

На цьому налаштування серверної частини закінчена.

Налаштування локального клієнта GNS3

13. Завантаження клієнта

Завантажити клієнт можна тут.
Необхідно встановити GNS3 клієнт такої ж версії, як і gns3server (див. крок #11).

14. Запуск і настроювання клієнта

При запуску клієнта з'явиться Setup Wizard.
Натискаємо don't show this again, потім Cancel


Потім на вікні вибору проекту знову натискаємо Cancel.

Заходимо в меню Preferences.
Клікаємо на розділ Server, знімаємо галку Enable local server.
Натискаємо на вкладку Remote Servers, додаємо доменне ім'я вашого GNS3 сервера або gns3server, натискаємо Add


Клікаємо на розділ VPCS, знімаємо галку Enable local server.
Клікаємо на розділ Dynamips, знімаємо галку Enable local server.
Натискаємо на Apply внизу вікна.
Клікаємо на розділ Dynamips -> IOS routers. Натискаємо на New. Повинно з'явитися таке вікно:


Знімаємо галку Load Balance і вибираємо потрібний сервер.
Далі вибираємо локальний спосіб, який хочемо використовувати — він завантажиться автоматично на сервер. Далі прямуємо діалогового вікна.
В результаті вибраний образ Dynamips IOS повинен з'явитися у списку:


IOL образи додаються точно так само за допомогою розділу IOS on UNIX -> IOU Devices.
Після додавання всіх образів натискаємо OK.

15. Перевірка

Побудуємо для тіста невелику топологію, що складається з комутатора і трьох маршрутизаторів:


Щоб запустити топологію, використовуйте кнопку Start/Resume all devices на панелі.
Після запуску всіх пристроїв можна підключитися до консольних портах, натиснувши на Console connect to all devices.
Вітаю, тепер ваші лаби можуть бути запущені в хмарі!

FAQ
Я ще не використовую GNS3, але хочу почати. Яку версію мені варто використовувати?
— Останню стабільну. На момент написання статті — це 1.4.4.

Як поміняти додаток за замовчуванням для консольного доступу?
Preferences -> General -> Console Applications -> Edit

Як налаштувати Wireshark Live Capture?
— Встановіть Wireshark версії 2.x, у GNS3 Preferences -> Packet Capture переконайтеся, що ви використовуєте правильний шлях до Wireshark.

При запуску GUI у мене з'являється таке повідомлення: => Client version X differs with server version Y.
Чи обов'язково використовувати однакову версію клієнта і сервера?

-Краще використовувати однакову, але в більшості випадків, якщо клієнт і сервер з однієї гілки (наприклад, 1.4), то навіть незважаючи на попередження, все буде працювати нормально.

чи Є легальний спосіб використовувати IOL в GNS3 для тих, хто не є інженером Cisco?
— Ні. В такому випадку, єдиний легальний спосіб використовувати IOL для своїх топологій — це CCIE Lab Builder від Cisco.

чи Можна використовувати Qemu (KVM) образи в хмарі?
— Теоретично можна, якщо ваш хмарний сервіс підтримує Nested Virtualization/KVM hardware acceleration. На жаль, ні в AWS, ні в GCE це не можна включити.

Додавати QEMU образи також складно, як і раніше?
— Ні, 1.4 додали Appliances — це спеціальні файли з преконфигурацией, доступні для скачування. Від вас потрібно тільки надати потрібний образ.

чи Можна експортувати/імпортувати різні конфіги для однієї і тієї ж лаби, якщо я використовую IOL?
— Так, з допомогою опції File -> Import/Export configs. Не забудьте тільки зупинити всі пристрої (перед імпортом/експортом), а перед експортом також необхідно зберегти проект.

Коли запускається IOL пристрій мені показується initial configuration dialog, чи можна цього уникнути?
— Так. Для цього необхідно в файлі startup-config.cfg вказати всі фізичні інтерфейси, відповідно до кількості ethernet, serial адаптерів, враховуючи що один адаптер містить 4 інтерфейсу. Мінімальний конфіг для 1 ethernet і 1 serial адаптерів:
interface Ethernet0/0
!
interface Ethernet0/1
!
interface Ethernet0/2
!
interface Ethernet0/3
!
interface Serial1/0
!
interface Serial1/1
!
interface Serial1/2
!
interface Serial1/3
!


У мене є фізичний сервер або сервер, де я хочу запускати GNS3. Мені теж необхідно виконати стільки кроків, щоб GNS3 працював?
— Ні. Просто скачайте GNS3 VM, де всі встановлено, і додайте Remote Server, як показано в останній частині статті.

чи Підтримується багатокористувацький режим?
— Швидше ні, ніж так. Ще дуже багато потрібно зробити, щоб можна було додати в список підтримуваних функцій. Тим не менш, в поточній версії GNS3 порти для консольних підключень вибираються автоматично, якщо обраний порт зайнятий, що дозволяє декільком юзерам робити лаби одночасно.

Куди рухається GNS3?
— У 1.5.x очікується підтримка Docker. Також планується Web GUI (можна буде вибрати окремий додаток або Web GUI) і багатокористувацький режим. На жаль, якщо я не помиляюся, обидві ці фічі не плануються 1.5.x

У мене є пропозиції по поліпшенню GNS3. Куди писати?
— GNS3 — open source проект, код викладений на Github. Якщо ви розробник, то можете відправити їм свій pull request. Якщо у вас немає можливості допомогти кодом, то можете написати про знайдені баги і свої побажання на GNS3 форум або безпосередньо на GUI github->issues або Server github->issues. З розробниками також можна поспілкуватися в IRC каналі irc.freenode.net #gns3: noplay, grossmj.

Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.