GNS3 и dynamips на удаленном сервере

    Сегодня мы рассмотрим разнесение на разные компьютеры оболочки GNS3 и эмулятора Cisco IOS Dynamips.

    Дано:
    мощный сервер (дом/работа/Hetzner/Amazone) и достаточно слабое рабочее место (ноутбук/нетбук/etc.).
    Задача:
    перенести нагрузку от эмуляции большого числа IOS на сервер для комфортной работы.
    Решение:
    Будут рассмотрены несколько вариантов — штатный (! Да, вы не замечали в настройках вкладку «Гипервизоры»? ) и работающие с костылями [unix way], но на мой взгляд несколько удобней.

    Для работы будем использовать следующее ПО:
    — GNS3 0.8.2-BETA, но должно работать и на ветке 0.7.x
    — Dinamips 0.2.8-RC2
    — Linux Ununtu 11.10 / Windows 7
    — bash, tmux, ssh


    Вариант 1 — штатный


    Как это работает.
    На сервере запускается dynamips в режиме гипервизора. На клиенте (рабочая станция с GNS3) отключается управление локальными гипервизорами и прописываются удаленные.

    Server: Linux


    $ sudo apt-get install dynamips
    $ cd /tmp
    $ dynamips -H 7220
    Cisco Router Simulation Platform (version 0.2.8-RC2-amd64)
    Copyright (c) 2005-2007 Christophe Fillot.
    Build date: Jan 18 2011 19:25:29
    
    Hypervisor TCP control server started (port 7220).
    

    Если вы видите подобное сообщение о запуске сервера — все работает.
    Перед запуском гипервизора необходимо перейти в «рабочую» директорию, т.к. в процессе работы он создает много временных файлов. В данном случае они нас не интересуют, поэтому будем работать в папке tmp.
    Можно оставить сервер и перейти в другой терминал или остановить гипервизор.
    ^CHypervisor: closing control sockets.
    Hypervisor: closing remote client connections.
    Shutdown in progress...
    Shutdown completed.
    

    Для удобства советую использовать tmux.

    Также при использовании брандмауэра не забудьте сделать в нем исключения на входящий порт гипервизора (в данном случае TCP 7220) и консольные соединения (настраиваются в GNS3).

    Гипервизор готов, осталось подготовить образы IOS.
    Скачиваем образ с сайта cisco.com или, в случает отсутствия подписки, с известного торрент трекера.
    Не забываем для ускорения загрузки распаковывать образы, для этого с сайта GNS3 скачиваем "Cisco image unpacker 0.1 source code".

    $ mkdir ~/IOS
    $ cd ~/IOS
    $ mv ~/Downloads/Unpack-0.1_src.tar.bz2 ./
    $ mv ~/Downloads/c2600-ipbasek9-mz.124-17.bin  ./
    $ tar -xjf Unpack-0.1_src.tar.bz2
    $ rm Unpack-0.1_src.tar.bz2
    $ python ./Unpack/unpack.py --format=IOS c2600-ipbasek9-mz.124-17.bin 
    warning [c2600-ipbasek9-mz.124-17.bin]:  17812 extra bytes at beginning or within zipfile
    (attempting to process anyway)
    IOS binary image successfully unpacked in c2600-ipbasek9-mz.124-17.bin.unpacked
    

    Server: Windows


    Как говорят знающие люди — dynamips под win работает стабильно хуже, но приступим к установке.
    Качаем "GNS3 v0.8.2 BETA all-in-one".
    После установки открываем папку с GNS3 и dynamips и находим .bat файл для запуска гипервизора.



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

    Далее в редакторе правим порт с стандартного 7200 на 7220:

    rem Launch a local copy of dynamips 
    set dynamips=%CD%\dynamips.exe
    cd %TEMP%
    start /belownormal /B /wait "Dynamips" "%dynamips%" -H 7220
    pause
    

    После запуска окно консоли должно выглядеть подобным образом



    Все остальные действия не сильно отличаются от таковых под Linux (см. выше):
    — открыть порты в брандмауэре;
    — скачать образы IOS;
    — распаковать образ, распаковщик.

    Client: Linux


    В Ubuntu можно установить GNS3 через пакеты

    $ sudo apt-get install gns3
    

    Но там довольно старая версия (0.7.4), поэтому скачаем исходники. Компилировать ничего не придется, т.к. он написан на питоне. Для удовлетворения всех зависимостей сначала установим GNS3 из пакета, затем скачаем последнюю версию из репазитория.

    $ sudo apt-get install gns3
    $ sudo apt-get install mercurial
    $ cd ~/IOS/
    $ hg clone http://code.gns3.net/gns3-devel
    $ cd gns3-devel
    $ ./gns3.pyw
    



    Edit->Preferences проверяем настройки локального динамипса.
    Не забываем нажать «Test Settings»



    Edit->IOS images and hypervisors
    В поле HOST вводим ip адрес нашего сервера с dynamips, PORT — порт, выбранный для ручного запуска dynamips.



    Теперь во вкладке IOS images добавляем образ.



    ВАЖНО. Путь к «Image file» и «Base config» указываются на сервере. Для пользователя, из-под которого запущен dynamips, эти файлы должны быть доступны на чтение.
    Локально таких файлов может не существовать.
    Убираем пункт «Use the hypervisor manager» и выделяем нужный сервер.
    После чего сохраняем. В списке образов мы видим что обращение будут идти не на локальный гипервизор, а на таковой на сервере 172.16.1.1.
    Долее как обычно создаем топологию и работаем.

    Client: Windows


    Отсюда качаем и устанавливаем "GNS3 v0.8.2 BETA all-in-one" — собранную последюю версию GNS3.
    Все настройки соответствуют клиенту под Linux.

    Вариант 2 — unix way


    Минусов у штатного решения два:
    — необходимость вручную логиниться на удаленный сервер для запуска гипервизора;
    — открытый канал управляющего соединения с гипирвизором и консолями.

    При запуске гипирвизора с ключем "-H 7220" dynamips открывает прослушивающий сокет на всех доступных адресах:

    $ sudo netstat --numeric --listening --program | grep dynamips
    tcp        0      0 0.0.0.0:7220            0.0.0.0:*               LISTEN      12756/dynamips
    

    Никакой авторизации и шифрования не предусмотрено и, при включенном режиме «паранойя», такое в интернет не выставляется. Возможности повесить гипервизор на определенный ip, например 127.0.0.1, нет, и порт в любом случае необходимо закрывать брандмауэром.
    На первый взгляд, необходимо использовать VPN, что выходит за рамки данной стати.

    Так же при локальной работе менеджер гипирвизоров при некоторых обстоятельствах запускает несколько копий dynamips на разных портах.

    Вариант решения — настраиваем GNS3 на работу с локальным dynamips, но создаем прослойку, которая открывает удаленное соединение по ssh до сервера, автоматически запускает там гипервизор и пробрасывает порты поверх своего шифрованного соединения. Фактически это будет один скрип, запускаемый с разными ключами — для управляющего соединения и для удаленной консоли.

    Приступим!

    NOTE. Для корректной работы должна быть настроена аутентификация в SSH по ключам || править скрипт.

    NOTE. Версия GNS3 должна быть выше 0.8.2 beta2(например из репазитория), т.к. в ней присутвует баг, при котором управляющий скрипт не может правильно погасить удаленный dynamips.

    Edit->Preferences в настройки локального dynamips и вместо его бинарника пишем путь до нашего скрипта
    /home/%username%/IOS/rdyn.sh

    Также изменяем строку подключения к консоли
    gnome-terminal -t %d -e '/home/%username%/rdyn.sh -R %p' >/dev/null 2>&1 &

    Не забываем выставитт полный путь к файлу в комманде и заменить переменные в скрипте.

    #!/usr/bin/env bash
    
    HOST=host.tld
    #HOST=2001:470::1
    PORT=4444
    USER=username
    
    #######################################
    
    WRKDIR='/tmp'
    DYNAMIPS='/usr/bin/dynamips'
    
    RCMD=$1
    RPORT=$2
    SSHOPT="-a -T -q -x -o ExitOnForwardFailure=yes -o TCPKeepAlive=yes -o BatchMode=yes -o ControlPersist=10 -o ControlPath=/tmp/rdyn.%h.%p.%r -p $PORT $USER@$HOST "
    TELNETCMD="ssh -N -f -L 127.0.0.1:$2:127.0.0.1:$2 $SSHOPT"
    
    ########################################
    trap quit INT TERM HUP KILL
    
    function quit {
    if [ $RCMD = '-H' ] ; then
      ssh $SSHOPT "pkill -f \"$DYNAMIPS -H $RPORT\"" &
    else
      pkill -f "$TELNETCMD"
    fi
    exit
    }
    ########################################
    
    if [ "$1" = '' ] ; then
      echo 'Error: script expects some commands.'
      exit
    fi
    
    ssh -M -f $SSHOPT exit > /dev/null 2>&1
    
    if [ "$1" = '--help' ] ; then
      ssh $SSHOPT "$DYNAMIPS --help"
    else
      if [ "$1" = '-H' ] ; then
        ssh -L 127.0.0.1:$2:127.0.0.1:$2 $SSHOPT "cd $WRKDIR ; $DYNAMIPS -H $2" 2> /dev/null &
        while :  ; do
          wait;
          sleep 1;
        done
      else
        $TELNETCMD > /dev/null 2>&1
        telnet 127.0.0.1 $2
        pkill -f "$TELNETCMD"
        read
      fi
    fi
    

    Принцип работы:
    — попытка запустить мастер соединение с сервером (завершается по idle таймауту автоматически);
    в процессе работы создается достаточно много dynamips-over-ssh и telnet-over-ssh сессий и мультиплексирование, в данном случае, заметно ускоряет работу.
    — создание ловушки для корректной остановки удаленного dynamips;
    — запуск гипервизора или telnet соединения.

    Вариант 3 — unix way/ part 2


    Проброс X11 GUI приложения.

    Плюсы: работает, причем все и «из коробки».
    Минусы: медленно. Удовлетворительный результат только в пределах LAN при маленьких задержках и больших скоростях.

    $ ssh -X -C username@host.tld gns3

    -C включает сжатие
    -X активирует проброс X11 сессии /не забываем включить 'X11Forwarding yes' в sshd_config/

    Но в случае использования X11 Forwording мы, фактически, лишаемся возможности загружать .net файлы и просматривать сохраненные конфигурации локально.
    Для пользователи тяжелых оболочек могут воспользоватся встроенными функциями. Например Nautilus умеет добавлять в закладки sftp линки.

    Возможен более универсальный вариант в связке fuse+ssh= sshfs.
    Эта тема уже обсуждалась на хабре, поэтому будет только идея.

    Создаем в домашнем каталоге основную папку для работы с GNS и вспомогательный скрипт.
    $ sshfs username@host.tld:/home/%username%/CISCO ~/CISCO
    $ cat << ENDL > ~/CISCO/rgns3
    ssh -X -C username@host.tld gns3 \$1
    ENDL
    $ chmod +x ~/CISCO/rgns3
    

    Модель работы:
    — Скачиваем, например, лабораторную. Допустим, ROUTE: EIGRP.
    — Монтируем sshfs.
    — Распаковываем архив в ~/CISCO
    — Запускаем

    $ ~/CISCO/rgns3 ~/CISCO/EIGRP/topology.net


    PS1
    baseconfig.txt
    !
    hostname %h
    no ip domain-lookup
    line con 0
    exec-timeout 0 0
    logging synchronous
    privilege level 15
    
    service timestamps debug datetime msec
    
    line vty 0 15
    no login
    exec-timeout 0 0
    logging synchronous
    privilege level 15
    

    Это не боевая конфигурация и имеет проблемы с безопасностью, но для обучения удобна.

    PS2
    Настройка tmux для работы с консолями dynamips.
    В tmux я создаю отдельную сессию для консолей, а из GNS3 только добавляю соединение к существующей.
    $ cat gconsole.sh
    unset TMUX;
    tmux new-session -d -s GNS3 >/dev/null 2>&1
    gnome-terminal -e '/usr/bin/tmux attach-session -t GNS3'
    

    GNS3 Edit->Preferences «Terminal command»
    unset TMUX; tmux new-window -t GNS3 -n '%d' 'telnet %h %p ; cat' >/dev/null 2>&1 &
    и при использование dynamips-over-ssh варианта
    unset TMUX; tmux new-window -t GNS3 -n '%d' '/home/%username%/IOS/rdyn.sh -R %p' >/dev/null 2>&1 &


    Материалы:
    forum.gns3.net
    — man dynamips
    — man tmux
    • +3
    • 20.8k
    • 6
    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 6

      0
      Статья то что надо. Спасибо большое.
      Но чаще всего просто достаточно настроить Idle PC, под минимальное потребление ресурсов компа, на каждом виртуальном устройстве в GNS.
        0
        это понятно, но на ноуте с 1 гигом оперативы, при запущенном браузере и доках, средней руки лаба по CCNP роутингу уже тормозит. дело не только в процессере.
      • UFO just landed and posted this here
          0
          Никто с этим не спорит, я даже описал в 3 варианте проброс X11 приложения. Я даже знаю, что проще купить мощный компьютер и не искать себе проблем. Хотя еще проще купить пачку реальных cisco (как и было сделано) — почти все качественные проблемы и проблемы с производительностью исчезают.

          А по вашему варианту:
          1. «терминальная сессия» в моем понимании — это windows. Больше половины статьи — решения с упором на linux/unix.
          2. Вот есть удаленный сервер… например с debian, под некие нужды. 99% что там нет и не будет графической подсистемы, о каком GNS3 может идти речь?
          • UFO just landed and posted this here
          0
          Годно, спасибо. Вот только нет ли необходимости (и есть ли возможность) в настройке idle pc так же и на сервере с dynamips? Сколько там cpu ест процесс dynamips после запуска 7200 ios'a?

          Only users with full accounts can post comments. Log in, please.