15.09.2016 @ 13:10 Подключение роутера из GNS3 к сети VirtualBox cisco, GNS3, VirtualBox Сегодня мы поговорим о том, как дополнить ваш домашний парк виртуальных машин cisco-роутером при помощи эмулятора GNS3. Зачастую очень полезно иметь под рукой роутер, работающий на IOS для тестирования конфигурации или в качестве площадки для практики во время обучения. Преимуществом перед использованием симулятора, вроде Cisco Packet Tracer, в том, что с GNS3 мы имеем роутер непосредственно в сети с нашими виртуальными машинами, и он является полноценным участником сети. Сразу приведу ссылку на официальный сайт: www.gns3.com Для данной статьи я использовал дистрибутив Ubuntu Server 16.04.1 LTS запущенный на VritualBox и GNS3 Version 1.5.2. VirtualBox запущен под Windows. Также вам понадобится ISO образ одного из cisco-роутеров. Я использовал образ роутера Cisco c3725. Приступим! Что мы хотим У нас есть виртуальная машина Kali Linux и мы хотим иметь с нее доступ к cisco-роутеру по ssh. Также мы хотим получать от роутера cdp-пакеты и использовать протокол SNMP. Установка Установка из репозитария проходит достаточно просто и описана на официальном сайте. Заключается она в добавлении репозитария GNS и установки из него пакетов. sudo add-apt-repository ppa:gns3/ppa sudo apt-get update sudo apt-get install gns3-gui после установки, GNS3 можно запустить командой gns3 (для запуска необходима графическая оболочка, я использовал LXDE) В случае возникновения каких-то проблем, вы всегда найдете актуальную инструкцию на официальном сайте: https://gns3.com/support/docs/linux-installation Настройка виртуальных машин Для начала настроим наши виртуальные машины Kali Linux и Ubuntu Server для работы в одной сети. Останавливаем машины. Я хочу, чтобы они работали в виртуальной сети, недоступной для внешнего мира. Для этого я использую тип подключения «Внутренняя сеть», имя можно оставить стандартное. То же саме делаем и для виртуальной машины с установленным GNS3. Следите, чтобы имя сети было тем же. Я считаю, что очень экономит время, когда в нашей внутренней сети IP адреса раздаются DHCP сервером. Это очень легко сделать при помощи VirtualBox. Открываем cmd и выполняем команду VBoxManage dhcpserver add --netname intnet --ip 192.168.1.0 --netmask 255.255.255.0 --lowerip 192.168.1.1 --upperip 192.168.1.254 –enable Если команда VBoxManage не распознается, значит, вы забыли прописать путь в переменной окружения PATH. Запускаем обе машины. Проверяем, раздались ли IP адреса root@kalix64:~# ping 192.168.1.1 PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data. 64 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=1.07 ms 64 bytes from 192.168.1.1: icmp_seq=2 ttl=64 time=0.552 ms 64 bytes from 192.168.1.1: icmp_seq=3 ttl=64 time=0.987 ms Как видим, машины видят друг друга. Запускаем GNS3 Пришло время добавить наш роутер в сеть. Запускаем gns3 на хосте Ubuntu server. После запуска выбираем Local, а не GNS3 VM. На вопрос о добавлении роутера отвечаем отрицательно. Создаем проект. Заходим в настройки Edit=>Preferences Будем загружать IOS образ. Выбираем IOS routers и жмем New Выбираем New image и жмем Browse, указываем iso файл с образом и жмем Оpen. Далее нам будет предложено изменить имя роутера, имя платформы, объем RAM. Все это можно оставить без изменения. На странице с выбором Slot стоит выбрать доступный FE (Fast-Ethernet) модуль. У меня это модуль GT96100-FE WIC-интерфейс не указываем. Idle-PC оставляем без изменений. Жмем Finish и выходим из настроек GNS3. На панели слева нажимаем большую кнопку Browse Routers и видим на панели Routers добавленный нами роутер. Хватаем и перетаскиваем его на поле справа Я оставил название без изменения – R1 Справа, в секции Topology Summary мы видим, что R1 горит красным, что означает, что наш роутер выключен. Скоро мы исправим это. Настройка роутера в GNS3 Кликаем правой кнопкой на роутер и выбираем Start. Значок в Topology summary должен позеленеть. Наводим курсор на роутер и видим, что консольный порт у нас 5000 Давайте подключимся к нему. Открываем консоль и выполняем telnet 127.0.0.1 5000 получаем строку приглашения Давайте посмотрим, какие интерфейсы у нас доступны R1#sh ip interface brief Interface IP-Address OK? Method Status Protocol FastEthernet0/0 unassigned YES unset administratively down down FastEthernet0/1 unassigned YES unset administratively down down У нас есть два интерфейса, оба, пока, в выключенном состоянии. Давайте включим интерфейс FastEthernet0/1 и присвоим ему IP из нашей подсети. R1#config t Enter configuration commands, one per line. End with CNTL/Z. R1(config)#interface fa0/1 R1(config-if)#ip addr R1(config-if)#ip add 192.168.1.200 255.255.255.0 R1(config-if)#no shut *Mar 1 00:05:23.983: %LINK-3-UPDOWN: Interface FastEthernet0/0, changed state to up *Mar 1 00:05:24.983: %LINEPROTO-5-UPDOWN: Line protocol on Interface FastEthernet0/1, changed state to up R1(config-if)#end R1# *Mar 1 00:05:53.055: %SYS-5-CONFIG_I: Configured from console by console R1#wr Building configuration... [OK] R1#copy running-config startup-config Destination filename [startup-config]? Building configuration… Проверим статус интерфейса R1#sh ip interface brief Interface IP-Address OK? Method Status Protocol FastEthernet0/0 unassigned YES unset administratively down down FastEthernet0/1 192.168.1.200 YES manual up up Хорошо, интерфейс получил IP, но давайте взглянем на нашу топологию в GNS3 Выглядит так, будто наш роутер никак не связан с чем-либо. Так оно и есть. Интерфейсу присвоен IP, но сам интерфейс ни к чему не подключен. Давайте исправим это недоразумение. Добавляем в нашу топологию объект Cloud Нажимаем правой кнопкой и выбираем Configure. Нам предлагается присвоить один из интерфейсов. Generic Ethernet NIO отличается от Linux Ethernet NIO лишь реализацией на уровне кода (использованием библиотеки pcap или нет). Я выбираю Generic Ethernet NIO и добавляю адаптер, который подключен к виртуальной сети 192.168.1.0/24. Жмем ОК и выходим из режима редактирования. В левой части главного окна выбираем Add a link Курсор примет крестообразный вид. Левой кнопкой мыши кликаем на облаке и выбираем интерфейс, далее кликаем на роутере и выбираем сконфигурированный нами FastEthernet 0/1 Должна получиться такая картина. На техническом уровне подключение к облаку, грубо говоря, равнозначно подключению роутера в коммутатор, к которому были бы подключены и наши виртуальные машины. Давайте попробуем пропинговать наш роутер с Kali. Не работает. Давайте разбираться, что происходит с нашими пакетами. Для наглядности я запустил wireshark, чтобы посмотреть, что происходит при выполнении команды ping. Как видим на скриншоте ниже, выполняется широковещательный ARP-запрос и ищется владелец IP-адреса 192.168.1.200. Сетевой интерфейс виртуальной машины Ubuntu server, получив такой пакет отвечает на его MAC-адресом cisco-роутера MAC-адрес правильный, его мы можем проверить в конфигурации роутера R1. Так же сервер Ubuntu отвечает и на свой ARP запрос по IP 192.168.1.1 Получается что-то вроде виртуальных интерфейсов в Linux-системах. Если запустить wireshark на Ubuntu server, мы не увидим никаких пакетов, кроме широковещательных ARP-запросов и CDP-пакетов. ICMP пакеты почему-то не проходят. Давайте разбираться. По сути, наш роутер «прячется» за интерфейсом с MAC-адресом 08:00:27:b6:79:62, хоть и имеет MAC-адрес c2:01:0f:fa:00:01. В обычном режиме работы сетевой интерфейс принимает все пакеты, предназначающиеся своему MAC-адресу и широковещательные пакеты с адресом назначения ff:ff:ff:ff:ff:ff (которыми являются ARP-запросы). Получается, наш интерфейс должен принимать пакеты, как со своим MAC-адресом, так и с MAC-адресом роутера. Похоже, что пакет, с MAC-адресом роутера отбрасывается, т.к. не предназначается непосредственно интерфейсу виртуальной машины. Нужно заставить ОС принять этот пакет, чтобы позволить ему обработаться нашим роутером на сетевом уровне (пакет отбрасывается уже на канальном уровне). Для этого нужно, чтобы наш интерфейс работал в так называемом «неразборчивом режиме» (обрабатывал все пакеты, даже если они не предназначены MAC-адресу сетевого интерфеса хоста.) Для этого в настройках виртуальной машины Ubuntu Server ставим соответствующую настройку Перезапускаем виртуальную машину. Пробуем пропинговать снова. Работает! Wireshark так же указывает нам, что приходят ICMP-ответы Настройка доступа по SSH Мы настроим доступ по SSH и активируем SNMP, чтобы убедиться в том, что наш роутер не только виден в сети, но и ведет себя как настоящий. Теперь наш роутер доступен для сети 192.168.1.0/24 Просканировав порты nmap, мы видим, что открыт доступ по telnet root@kalix64:~# nmap -n -sS -T5 192.168.1.200 Starting Nmap 7.25BETA2 ( https://nmap.org ) at 2016-09-14 11:35 EDT Nmap scan report for 192.168.1.200 Host is up (0.13s latency). Not shown: 999 closed ports PORT STATE SERVICE 23/tcp open telnet MAC Address: C2:01:0F:FA:00:01 (Unknown) Это не очень безопасно, так что лучше заменить telnet на SSH. Подключаемся к роутеру с Ubuntu Server и настраиваем. R1#conf t Enter configuration commands, one per line. End with CNTL/Z. R1(config)#ip domain name cisco.vbox R1(config)#crypto key generate rsa The name for the keys will be: R1.cisco.vbox Choose the size of the key modulus in the range of 360 to 2048 for your General Purpose Keys. Choosing a key modulus greater than 512 may take a few minutes. How many bits in the modulus [512]: 2048 % Generating 2048 bit RSA keys, keys will be non-exportable...[OK] *Mar 1 00:05:53.339: %SSH-5-ENABLED: SSH 1.9 has been enabled R1(config)#service password-encryption R1(config)#username user privilege 15 password Pa$$w0rd R1(config)#aaa new-model R1(config)#line vty 0 4 R1(config-line)#transport input ssh R1(config-line)#logging synchronous R1(config-line)#exec-timeout 60 0 R1(config-line)#privilege level 15 R1(config-line)#exit R1(config)#ip ssh version 2 R1#wr R1#copy running-config sta R1#copy running-config startup-config Destination filename [startup-config]? Building configuration... [OK] Снова сканируем nmap root@kalix64:~# nmap -n -sS -T5 192.168.1.200 Starting Nmap 7.25BETA2 ( https://nmap.org ) at 2016-09-14 11:40 EDT Nmap scan report for 192.168.1.200 Host is up (0.13s latency). Not shown: 999 closed ports PORT STATE SERVICE 22/tcp open ssh MAC Address: C2:01:0F:FA:00:01 (Unknown) Попробуем подключиться root@kalix64:~# ssh -oKexAlgorithms=+diffie-hellman-group1-sha1 user@192.168.1.200 Password: R1> К сожалению, как я понял, мой роутер поддерживает устаревший алгоритм diffie-hellman-group1-sha1, так что, метод, описанный здесь не претендует на использование в боевых условиях , а лишь показывает пример настройки. Подробнее можно прочитать тут: http://www.openssh.com/legacy.html Активация SNMP CDP-пакеты вы уже могли видеть на скриншотах wireshark, так что осталось лишь настроить SNMP. Логинимся на роутер по SSH. R1>sh snmp %SNMP agent not enabled Как видим, SNMP не настроен. Настраиваем. R1#conf t Enter configuration commands, one per line. End with CNTL/Z. R1(config)#snmp-server community public RO R1(config)#snmp-server community private RW R1(config)#exit R1#wr R1# copy running-config startup-config R1>sh snmp R1#sh snmp Chassis: FTX0945W0MY 0 SNMP packets input 0 Bad SNMP version errors 0 Unknown community name 0 Illegal operation for community name supplied 0 Encoding errors 0 Number of requested variables 0 Number of altered variables 0 Get-request PDUs 0 Get-next PDUs 0 Set-request PDUs 0 Input queue packet drops (Maximum queue size 1000) 0 SNMP packets output 0 Too big errors (Maximum packet size 1500) 0 No such name errors 0 Bad values errors 0 General errors 0 Response PDUs 0 Trap PDUs SNMP Trap Queue: 0 dropped due to resource failure. SNMP logging: disabled Проверяем открыт ли теперь 161 порт root@kalix64:~# nmap -n -sU -p 161 192.168.1.200 Starting Nmap 7.25BETA2 ( https://nmap.org ) at 2016-09-15 05:36 EDT Nmap scan report for 192.168.1.200 Host is up (0.0083s latency). PORT STATE SERVICE 161/udp open snmp MAC Address: C2:01:0F:FA:00:01 (Unknown) Nmap done: 1 IP address (1 host up) scanned in 0.10 seconds Порт доступен и мы можем работать с роутером по протоколу SNMP. Заключение При помощи GNS3 можно создавать гораздо более сложные топологии, подключать ваши виртуальные роутеры к реальным сетям и Интернет. Применений можно найти массу. GNS3 доступна не только для Linux, но и для Windows и MAC. Спасибо за внимание и до новых встреч! antgorka 22015 Network security Читать дальше >>