пятница, 16 ноября 2012 г.

Эмуляция сетей: dynamips & dynagen & Cisco GNS.


    За неимением реальных дорогостоящих и шумных железок Cisco, мы можем использовать эмулятор, для того чтобы протестировать некоторые функции реальных устройств.
    Ценность подобного программного продукта очень велика, особенно, когда тестовое окружение должно включать в себя множество различных роутеров, и топология сети постоянно изменяется. При этом эмулятор позволяет получать далеко не все функции реальных устройств, съедает много памяти и процессора (образы Cisco IOS загружаются прямо в оперативную память вашей машины). Но оно того стоит, в некоторых случаях.

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

    Но какие есть плюсы для тестировщиков кроме самых очевидных?
Это можно автоматизировать! На Python! ) (dynagen написан на питоне и вы можете непосредственно изменять его, редактируя текстовым редактором файл /urs/bin/dynagen ;) ну или на bash, кому что)
Полезное примечание: мы можем создавать конфигурацию оборудования и топологии сети в графическом редакторе Cisco GNS, сохраняя всю сеть в файл конфигурации, а потом в процессе тестирования подгружать различные конфигурации и получать по запросу различные топологии с уже настроенными устройствами. Этим данная технология вызывает у меня восторг ).

    Смотрим для начала:
1. http://unixadmins.su/index.php?topic=122.0

2. http://adminofsystem.net/2010/08/%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%B5%D0%BC-%D0%BB%D0%B0%D0%B1%D0%BE%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B8%D1%8E-cisco-%D1%81-%D0%BF%D1%80%D0%B8%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5%D0%BC-dynamips/

3. http://7200emu.hacki.at/

4. http://unixadmins.su/index.php/topic,905.0.html

Используя эту технологию, мы можем создавать сложные сети, включающие виртуальные машины и роутеры Cisco. При этом роутеры cisco могут взаимодействовать с виртуальными машинами, если создать необходимые бриджи и виртуальные интерфейсы в системе.
Примечание: Для того, чтобы dynamips не съедал весь процессор, нужно использовать значения idlepc для каждого эмулируемого роутера.

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

sudo tunctl -t tap1
sudo ifconfig tap1 up
sudo brctl addif virt_br2 tap1

Используются утилы командной строки linux, возможно, вам необходимо их будет доустановить в систему, чтобы всё работало.

import time
from subprocess import Popen, PIPE

 
conf  = '/home/user/configuration_of_cisco_routers.conf'
Popen('killall dynamips', shell=True, stdout=PIPE, stderr=PIPE)
time.sleep(2)
Popen('dynamips -H 7200', shell=True, stdout=PIPE, stderr=PIPE)
time.sleep(5)
Popen('dynagen ' + conf, shell=True, stderr=PIPE, stdout=PIPE)
time.sleep(60)

Этот скрипт перезапускает dynamips и dynagen. (чтобы всё это работало, надо применить хак: sudo vi /usr/bin/dynagen  - строка 1521 - закомментировать несколько строчек кода, чтобы при загрузке конфигурации dynagen не запрашивал подтверждения) Можно и без этого, но тогда придётся через pexpect - кому как нравится.

Далее делаем конфигурацию dynagen:

autostart = True
[localhost:7200]
    workingdir = /tmp
    [[7200]]
        image = /home/user/CiscoIOS/cisco.bin
        ghostios = True
        sparsemem = True
        idlepc = 0x60507884
    [[ETHSW sw1]]
        1 = access 10 NIO_tap:tap1
        2 = access 10
        4 = access 20 NIO_tap:tap2
        5 = access 20
    [[ROUTER R1]]
        console = 2000
        f0/0 = sw1 2
        f0/1 = sw1 5
        model = 7200

вот и всё, теперь осталось только настроить cisco роутеры и сохранить конфигурацию.

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

у всего этого есть графический интерфейс, в котором можно "нарисовать сеть", мониторить состояние узлов, снимать трафик для анализа пакетов и многое другое - Cisco GNS. Есть под винду, линукс и мак.