четверг, 11 декабря 2008 г.

PPPoE сервер на cisco

Как сделать из циски клиента PPPoE я вкратце рассказывал в этом сообщении. Сегодня у нас задача создать PPPoE-концентратор на cisco, который будет терминировать сессии. Делать это будем через механизм bba-group по-новому, а не по-старому с использованием vpdn-group.
Разница состоит в том, что при новом механизме у нас есть возможность использовать несколько профилей PPPoE. Обычно хватает одного, но всё-же vpdn-group уже считается legacy. И в моем примере рассматривается простой случай. Поэтому профиль будет один для роутера (default).
Итак, пусть у нас есть некий роутер с, например, двумя интерфейсами:
FastEthernet0/0
ip address 72.14.205.100 255.255.255.252
!
FastEthernet0/1
ip address 10.10.10.1 255.255.255.0
!
Из них fa0/0 смотрит в одну сеть (например, внешнюю), а fa0/1 - в другую (внутреннюю). Мы хотим пускать клиентов, присоединившихся по PPPoE в первую сеть через NAT. Пусть у них будет сеть 10.10.100.0/24. Раздавать будем через механизм DHCP:
ip dhcp pool PPPoEpool
network 10.10.100.0 255.255.255.0
domain-name google.com
dns-server 216.239.32.10 216.239.34.10
default-router 10.10.100.1
!
Создаём для клиентов вот такой виртуальный интерфейс:
interface Virtual-Template1
ip address 10.10.100.1 255.255.255.0
ip nat inside
ip virtual-reassembly
peer default ip address dhcp-pool PPPoEpool
ppp authentication chap ms-chap # чтобы работало также с клиентами MS Windows
!

Включаем поддержку PPPoE на роутере (тут как раз пресловутое bba-group):
bba-group pppoe global
virtual-template 1 # (см.выше)
sessions max limit 100 # у меня в примере клиентов не больше сотни
sessions per-mac limit 1 # на всякий случай ;-)
sessions auto cleanup
!

Не забываем включить концентратор PPPoE на интерфейсе:
FastEthernet0/1
ip address 10.10.10.1 255.255.255.0
pppoe enable group global
!

А теперь лирическое отступление. Посмотрим, как аутентифицироваться и учитывать подключившихся. Вот пара вариантов для размышлений:

1) Локальная аутентификация. То есть пользователи хранятся в конфиге. Тут всё просто:
aaa new-model
!
aaa authentication ppp default local
aaa authorization network default local

...

username pppoeuser privilege 0 password 7 pppoepassword

2) Внешняя аутентификация. В данном случае циска не знает пользователей в логин всегда сверяется с внешним сервером по протоколу TACACS или RADIUS (более распространено). Минусы очевидны: есть необходимость в дополнительной органицации и поддержке RADIUS-сервера, а при его недоступности доступ в сеть будет запрещён. Однако при масштабировании системы, добавлении новых серверов доcтупа или резервных серверов RADIUS..
Как поднять и настроить сервер с пользователями и паролями поговорим в следующий раз, на циске это делается следующим образом (используется дефолтный профиль):
aaa new-model
!
aaa authentication ppp default group radius
aaa authorization exec default local # чтообы на exec заходили только локальные пользователи
aaa authorization network default group radius
aaa accounting network default start-stop group radius # если предполагается учет трафика средствами RADIUS
...

ip radius source-interface FastEthernet0/1 # У меня RADIUS-сервер внутри сети
!
radius-server host 10.10.10.2 auth-port 1812 acct-port 1813 key 7 radiussecret

Раздавать определённые IP-адреса клиентам по логину можно также через RADIUS.

Ну вот и всё! Мой пример осталось завершить NAT-ом для клиентов PPPoE:
ip nat inside source list 1 interface FastEthernet0/0 overload
access-list 1 permit 10.10.100.0 0.0.0.255

среда, 19 ноября 2008 г.

Загрузить IOS через tftp из ROMMOM на cisco

Отформатировали флешку командой
format flash:
и перегрузились? Теперь не знаете что делать, видя rommon> ? При этом бэкап иоса лежит на TFTP-сервере? Ничего страшного, сейчас расскажу что необходимо сделать.

Способов несколько, я рассмотрю один из них, при котором мы скачаем образ IOS-а из ROMMON с tftp и положим его на флешку. Потом загрузимся в него.

Самое первое - это подключить циску к сети, если конечно ещё не подключили ;-).
Пусть для примера мы дадим ей IP 10.10.10.1/24, а tftp-сервер у нас будет 10.10.10.10/24.

Зададим IP следующими командами. Внимание, грабли! Все параметры необходимы (даже шлюз по умолчанию, который по логике не нужен)!

rommon 1 > set IP_ADDRESS=10.10.10.1
rommon 1 > set IP_SUBNET_MASK=255.255.255.0
rommon 1 > set DEFAULT_GATEWAY=10.10.10.10
rommon 1 > set TFTP_SERVER=10.10.10.10
rommon 1 > set TFTP_FILE=ios.bin
rommon 1 > sync

Дальше нужно собственно только скачать иос и положить его на флешку:

rommon 1 > tftpdnld

Загрузиться так:

rommon 1 > boot

У меня получилось ;-)

среда, 29 октября 2008 г.

PPPoE клиент на cisco

Рассмотрим как можно использовать cisco в качестве PPPoE клиента. Это бывает необходимо в некоторых случаях, самым распространённым на мой взгляд из которых является подключение к оператору связи по ADSL. Поэтому все это в большей степени относится к cisco 877, cisco 1801 (с ADSL портом) и других моделей с WIC-1ADSL (HWIC-1ADSL или других). Однако для других моделей с Ethernet-портами данное описание тоже подходит.
Первым делом нужно создать виртуальный Dialer-интерфейс, который собственно и будет поднимать PPPoE:
interface Dialer1
ip address negotiated
(ip выдаёт провайдер)
ip mtu 1492
(стандартныое значение MTU для PPPoE)
ip nat outside
(если используем NAT)
ip virtual-reassembly
encapsulation ppp
ip tcp adjust-mss 1432
(очень полезная строка в тех случаях, если пакеты большие 1492 отбразываются, вследствие чего многие популярные сайти типа odnoklassniki.ru или mail.ru не работают через cisco)
dialer pool 1
(этой строкой мы задаём номер pool для использования на физическом интерфейсе)
no cdp enable
ppp chap hostname логин
ppp chap password 7 пароль
(имя пользователя и пароль)

Теперь, чтобы использовать этот Dialer на интерфейсе нужно добавить только:

 pppoe-client dial-pool-number 1

подробнее как поднять ADSL с несколькими pvc на cisco я рассказываю тут..
С Ethernet-интерфейсами поступаем таким же образом:

interface FastEthernet4
no ip address
ip virtual-reassembly
duplex auto
speed auto
no cdp enable
pppoe-client dial-pool-number 1

Отметим кстати, что cisco не поддерживает опцию PPPoE-клиента с сабинтерфейсов Ethetnet, таким образом PPPoE-клиент с dot1q-интерфейсов на cisco поднять неудастся. Однако у меня получилось сделать несколько PPPoE-клиентов в разных dot1q VLAN-ах, используя cisco 870 серии, но об этом я расскажу в следующий раз.

суббота, 18 октября 2008 г.

Dynamips - эмулятор cisco

Dynamips - это программный эмулятор аппаратной части маршрутизаторов сisco. Проект разрабатывался начиная с 2005 года как эмулятор cisco 7200 на обычном компьютере.
Впоследствие появилась поддержка других платформ. Сейчас (2008) список такой: Cisco 3600 series (3620, 3640 и 3660), 3700 series (3725, 3745) и 2600 series (по 2610 по 2650XM, 2691).
Заглянем глубже и попытаемся понять как он работает и что с ним можно делать.


Dynamips хорош в случаях, когда необходимо:
  • быстро проверить конфигурацию маршрутизатора для непосредственного её применения последствие на реальной железке;
  • получить лабораторный стенд малой кровью, однако достаточно мощный для обучения или демонстрации;
  • опробовать преимущества и возможности операционной системы Cisco IOS без необходимости покупки самого маршрутизатора.
Первая мысль которая может прийти в голову на этом месте: а не может ли эмулятор cisco заменить сам маршрутизатор? В какой то степени да, но лишь при очень малой нагрузке. Сам автор проекта указывает что производительность реального маршрутизатора выше приблизительно раз в 100 (производительность Dynamips около 1 килопакета в секунду в то время как даже самая ранняя модель NPE-100 даёт 100 килопакет/сек).
Помимо аппаратного обеспечения маршрутизаторов cisco существует возможность эмулировать сетевые устройства, такие как:
  • мост (используя который можно соединить эмулированный маршрутизатор с реальной сетью или другому виртуальному маршрутизатору);
  • Ethernet-коммутатор;
  • ATM-коммутатор;
  • ATM-мост (Ethernet <-> ATM);
  • коммутатор Frame-Relay.
Замечательной способностью Dynamips-а является то, что он может работать в режиме гипервизора. То есть одновременно есть возможность запускать не одну виртуальную циску, а целую сеть со всеми возможностями dynamips: коммутаторами, маршрутизаторами, мостами.. Таким образом появляется возможность выполнять лабы без реального оборудования. Или же демонстрационные стенды. Причём практически любой сложности. В таком управление гипервизором осуществляется по сети TCP/IP, а сам dynampis запускается примерно таким образом:

dynamips -H 7200

где 7200 - порт для связи с гипервизором.

Следует заметить, что запущенный по умолчанию, эмулятор сильно загружает компьютер. Даже на 100%. Чтобы снизить нагрузку создана опция "Idle PC". С её помощью можно снизить нагрузку на процессор и, таким образом, запустить второй, третий и более эмуляторов cisco одновременно без существенной нагрузки процессора. Значение IdlePC специфично для каждого образа IOS. Необходимое значение выбирается опытным путём. Непосредственно с Dynamips это делается следующим образом: после загрузки маршрутизатора желательно с пустой конфигурацией после приглашения Press RETURN to get started! Нужно секунд через 5 нажать "Ctrl-] + i". Начнёт собираться статистика загруженности процессора. По истечении этого процесса (порядка 10 секунд) будет выведено несколько значений, из которых потенциально лучшие будут помечены. Возможно, придётся попробовать несколько значений прежде чем нагрузка процессора спадёт со 100% до примерно 5% (на разных компьютерах по-разному).

Dynamips представляет из себя один исполняемый файл. Причём есть варианты под Linux, Mac OS и Windows. Но при запуске принимает множество аргументов, для задания особых параметров эмуляции. Подробнее об аргументах можно почитать тут на странице проекта xgu.ru.

Однако частенько требуется быстро развернуть виртуальную сеть, а использовать (изучать, набирать) dynamips со всеми необходимыми аргументами для запуска проблематично, если ещё и учесть необходимость создания конфигурационного файла, описывающего виртуальную сеть. Вот пример такого файла:

IF:E0:udp:10000:127.0.0.1:10001
IF:E1:udp:10002:127.0.0.1:10003
IF:E2:gen_eth:eth0

DOT1Q:E0:1
ACCESS:E1:4
DOT1Q:E2:1

..и это только конфиг, описывающий простой коммутатор. А если есть необходимость эмуляции магистралей Frame Relay или ATM?... В общем можете сами дорисовать картину и попробовать распланировать все свои необходимые действия для эмуляции сети cisco с использованием только голого dynamips.

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

Dynagen (сайт проекта dynagen.org). Использует CLI-like (интерфейс командной строки) для управления dynamips, который запускается в режиме гипервизора. Необходимо всё-таки создать конфигурационный файл типа INI и dynagen через сеть (см. запуск гипервизора) будет управлять dynamips. Это говорит о том, что сам гипервизор может быть запущен за удалённом компьютере. Пример такого конфига:
[localhost]

[[7200]]
image = \Program Files\Dynamips\images\c7200-jk9o3s-mz.124-7a.image
# On Linux / Unix use forward slashes:
#image = /opt/7200-images/c7200-jk9o3s-mz.124-7a.image
npe = npe-400
ram = 160

[[ROUTER R1]]
s1/0 = F1 1

[[ROUTER R2]]
s1/0 = F1 2

[[ROUTER R3]]
s1/0 = F1 3

[[FRSW F1]]
1:102 = 2:201
1:103 = 3:301
2:203 = 3:302

Подсчитать значение Idle PC и уменьшить загрузку процессора в dynamips в можно с помощью команды idlepc. Список команд - ?.
Dynagen и dynamips можно скачать с сайта проекта dynagen.

Dynagui (dynagui.sourceforge.net). Продолжение развития dynagen. Использует библиотеку dyna-gen для взаимодействия с гипервизором dynamips.


Последняя версия вышла в 13.12.07. Многие вещи до сих пор находятся в TODO-листе. Можно поэтому сделать вывод, что проект развивается довольно медленно.

GNS3(gns3.net). Является графическим симулятором сетей cisco. На сегодняшний день на мой взгляд является наиболее удобным инструментом для эмуляции cisco. Работает под Windows, Linux и Mac OS. Её уже включают в репозитарии дистрибутивов Linux. Версия под Windows включает в себя и dinamips, так что дополнительно скачать придётся только образ IOS. Имеет интуитивно понятный интерфейс (к примеру подсчёт значения IdlePC можно запустить, нажав правой кнопкой на виртуальном маршрутизаторе и выбрав соответствующий пункт меню). Подробнее о GNS3 я рассказываю здесь. Скачать gns3 для любой ОС можно непосредственно с сайта.



Xenomips и Xentaur. Эти проекты пошли ещё дальше.
Xenomips
объединяет эмуляцию cisco и виртуализацию Xen. Таким образом, список виртуальных устройств dynamips расширяется возможностями Xen. И на одном физическом компьютере как хост-системе можно создать лабораторный стенд из виртуальных маршрутизаторов cisco, коммутаторов, Ethernet-мостов, магистралей Frame Relay и ATM, межсетевых экранов Cisco PIX (используя параллельный проект Pemu), серверов и рабочих станций Linux, FreeBSD, Windows, MacOS и так далее.
Цель проекта Xentaur — разработка инструментов и методов быстрого построения виртуальных сетей и исследования их работы. Сети могут быть не только чисто виртуальными, но и смешанными: наряду с виртуальными узлами в них могут работать и обычные компьютеры и сетевые устройства.
Подробнее про эти проекты можно почитать на сайте проекта xgu.ru: Xenomips, Xentaur.

Таким образом для эмуляции сетей cisco нам нужно выбрать, для каких целей нам это нужно. Для многих случаев достаточно GNS3. Если необходимо создать крупный проект и рассмотреть (или демонстрировать) взаимосвязи между виртуальными серверами, рабочими станциями и сетевыми устройствами, то стоит обратить внимание на Xenomips.

Удачи в изучении!

P.S. Остаётся порой задаться вот каким вопросом. Все описанные инструментальные средства распространяются по лицензии GPL и/или бесплатны и свободны для загрузки. Однако не сам образ ОС IOS. Так что вопрос, где скачать Cisco IOS остаётся открытым. Это ПО распространяется Сisco на коммерческой основе. Однако если задаться целью, то скачать IOS для учебных целей можно со поискать тут - можно найти легко. ;-)

понедельник, 29 сентября 2008 г.

Подружим Cisco IP Phone и Asterisk

Самый попурярный канал Asterisk, используемый в качестве канала подключения для клиентов это, конечно, SIP. Существует масса недорогих программных и аппаратных SIP-телефонов, легко интегрируемых в Asterisk. Но что делать, если нам в наследство (или в подарок!) достался один из замечательных VoIP-телефонов производства Cisco Systems, который в большинстве своём работают по собственному протоколу SCCP?


У меня так в руках оказался Cisco 7902, но без CallManager-а. Вот и решил проверить работоспособность аппарата с помощью Asterisk.

В Asterisk изначально есть канал skinny, однако рекомендуется всё-таки использовать более совершенный chan-sccp-b. Сообщается, что поддерживаются также устройства:

  • 12 — Cisco IP Phone 12SP+
  • 30 — Cisco IP Phone 30VIP
  • 7902 — Cisco IP Phone 7902G
  • 7905 — Cisco IP Phone 7905G - Fully supported
  • 7910 — Cisco IP Phone 7910
  • 7912 — Cisco IP Phone 7912G
  • 7920 — Cisco IP Wireless Phone 7920 - All basic features
  • 7935 — Cisco IP Conference Station 7935
  • 7936 — Cisco IP Conference Station 7936 - Fully supported
  • 7940 — Cisco IP Phone 7940 - Fully supported
  • 7941 — Cisco IP Phone 7941 - Initial Support
  • 7960 — Cisco IP Phone 7960 - Fully supported
  • 7961 — Cisco IP Phone 7961 - Initial Support / Reported to work
  • 7970 — Cisco IP Phone 7970 - Fully supported
  • 7971 — Cisco IP Phone 7971 - Fully supported
  • 7961GE
  • 7941GE
  • 7911
  • 7980 — Cisco IP Communicator
  • 7985
  • 7914 — Cisco IP Phone 7960 with 1 or 2 7914 addons
  • ata — Cisco ATA
  • KIRK — Kirk is a wireless phone that uses sccp

Его и поставим.
Сходим на страницу проекта, скачаем последнюю версию (в моём случае это chan_sccp_20071213.tar.gz).
# wget "http://downloads.sourceforge.net/chan-sccp-b/chan_sccp_20071213.tar.gz?modtime=1197572506&big_mirror=0"
# tar xf chan_sccp_20071213.tar.gz


Соберём модуль:

# cd chan_sccp_20071213/
# make
sh ./create_config.sh "/usr/include"
Creating config file
====================
Checking Asterisk version...
* found asterisk 1.4
Build PARK functions (y/n)[n]?y
Build PICKUP functions (y/n)[n]?y
Use realtime functionality (y/n)[n]?y
* found 'struct ast_channel_tech'
* found 'ast_bridged_channel'
* found 'struct ast_callerid'

<...>
Now compiling .... sccp_softkeys.c 558 lines
Now compiling .... sccp_socket.c 394 lines
Now compiling .... sccp_indicate.c 329 lines
Linking chan_sccp.so

Последняя строка говорит нам о том, что модуль собрался и готов к использованию. а нам это и надо, устанавливаем его простым копированием (туда, где модули Астериска, у меня в примере - по умолчанию).

cp chan_sccp.so /usr/lib/asterisk/modules/

Установили, теперь нужно убедить Asterisk в использовании его вместо стандартного. Для этого в /etc/asterisk/modules.conf пишем:

noload => chan_skinny.so
load => chan_sccp.so
Теперь необходимо создать конфиг модуля по образу и подобию со страницы описания. Добпвляем телефоны (аппараты - по MAC-адресу) и линии (номера - по екстеншену). В extensions.conf корректируем диалплан чтобы приходили входящие вызовы.

Ну и осталось дело за малым. Но немаловажным! TFTP-сервер.
У меня дистрибутив Gentoo, поэтому установка свелась к следующему:
# emerge net-ftp/tftp-hpa
# mkdir /tftproot
# /etc/init.d/in.tftpd start
# rc-update add in.tftpd default

В /tftproot должен находиться хотя бы XmlDefault.cnf.xml содержанием:

<callManager>
<ports>
<ethernetPhonePort>2000</ethernetPhonePort>
</ports>
<processNodeName>IP Астериска</processNodeName>
</callManager>
</member>
</members>
</callManagerGroup>
</Default>

Также для каждого аппарата можно положить свой конфиг с именем типа SEP.cnf.xml. Необходимость - только если особое время/язык прошивки. Пример тут.

MAC-адрес написан на каждом телефоне на обратной стороне. Cisco IP Communicator использует MAC используемой сетевой карты.

среда, 24 сентября 2008 г.

Ad-hoc сеть средствами Windows

Многие частенько задумываются, как быстро связать два устройства на базе Windows (типичный пример - два ноутбука) по Wi-Fi. Бывает, что сходу и не вспомнишь/не угадаешь в галочках в настройках и свойствах.
Делаю шпаргалку..

Итак.. Вся разница только в том, что Ad-hoc в отличие от инфраструктуры - не клиент-серверная архитектура (клиент-сервер, конечно, немного не из этой оперы, однако суть та же). Это точка-точка. Соответственно нужно настроить на обоих концах wifi-адаптеры и должно заработать. Microsoft нас обрадовала тем, что можно сделать ad-hoc соединение проще, а именно:
- настроить на одном устройстве подключение;
- найти его другим устройством (если конечно включено вещание SSID);
- вбить необходимые настройка на втором адаптере.
То есть та же схема, что и при работе с точками доступа.

Сейчас настроим первое устройство. Для этого по большому счёту нужно просто добавить беспроводную сеть на первом устройстве, указать, что это точка-точка. Адаптер заработает сразу.

Для этого перейдём в сетевые подключения (обычно Пуск-Настройка-Сетевые подключения).


Там на беспроводном подключении - правой кнопкой - в контекстное меню Свойства.
В появившемся окне перейдём на вкладку Беспроводные сети.


Нужно Добавить новую сеть.


Появляется окно для настройки новой беспроводной сети, где нам следует придумать имя для сети (SSID - идентификатор), не забыть поставить галочку "это прямое подключение компьютер-компьютер", и выбрать ключ шифрования. Рекомендую использовать WPA.. Так, на всякий случай. Там только один нюанс - ключ может быть 5 или 13 символов.


Жмём ОК.
После этого наша сеть появится в беспроводных соединениях.


Потом на другом устройстве ищем эту сеть в беспроводном окружении (если не выключено вещание SSID). И подключаемся как к обычной точке доступа. Или повторяем процедуру, непосредственно вбив настройки, повторяя все пункты точно так же, подключение установится само.

Небольшое замечание - Wi-Fi устанавливает соединение 1 и 2го уровня, IP-адреса следует настроить вручную, чтобы увидеть другое устройство в сети ping-ом (и остальными программами).

понедельник, 25 августа 2008 г.

Asterisk - бесплатное VoIP-ядро для IP-телефонии

Есть прекрасные сайты, работающие по принципу википедии, например http://voip-info.org, рассказывающие о том, что такое Asterisk и с чем его есть. Я хочу остановиться на паре подводных камней которые ждут тех, кто хочет поставить Asterisk впервые.

Итак, что мы имеем? Компьютер под управлением GNU/Linux, желание обзавестись своим мощным, да и ещё бесплатным софтсвичом, некривые руки и немного терпения.

Что нужно ещё? Ах да, немного знаний и инструментов. Инструменты будут простыми - исходные тексты Астериска с http://www.asterisk.org, пара библиотек (об этом подробнее ниже) и консолька нашего сервера.

Но сначала пару слов теории в качестве лирического отступления.

Asterisk является модульной системой, причём эта модульность во многом определяет его функциональность и работоспособность. Как и такие же модульные программы (MirandaIM, Foobar2000, Far...), при добавлении/удалении модулей с соответствующей настройкой, можно добиться совершенства. Своего совершенства, конечно.

Он поддерживает работу с различными протоколами VoIP, как широко распространёнными (H.323, SIP), так и менее используемые и специфические (собственные: IAX, IAX2; проприетарные, как SCCP (Cisco Skinny Client Control Protocol); ТФОП-основанные: Zap, VPB; специфические: MGCP, Agent, Local). В мире Asterisk соединения по какому-либо из протоколов называется каналом. Существует (я это особо подчеркну) коммутация вызовов из одного канала в другой, при этом конвертируя звуковой поток из одного кодека в другой. При переводе звонка (или объединения в конференции) можно без проблем подключить третий канал/кодек и так далее.

Таким образом, наши возможности кажутся безграничными. Главным в этой ситуации я скажу необходимость ответить для себя - что конкретно планируется. Это поможет избежать дополнительных настроек и вообще выполнять много лишней работы.

Астериск немного своеобразный продукт и многое что связано с его происхождением дало отпечаток на дальнейшую судьбу. Проект создавался и ведётся под крылом коммерческой компании Digium. Digium живёт за счёт разработки оборудования в качестве аппаратной платформы для Asterisk, в частности плат PSTN для возможности "приземлять" звонки из IP или наоборот, перенаправлять вызовы с обычных телефонов на VoIP. Однако из-за этого проект Asterisk распространяется по двойной лицензии, так что в нём могут присутствовать закрытые модули. Самый яркий пример - патентованный кодек G.729.


Итак, самый первый подводный камень - использование стандартного менеждера пакетов для установки Asterisk. Получаем версию двухлетней (а в gentoo на состояние 2008 года и того более) версию. С теми ещё косяками. Даже если и версия будет новая, все настройки будут по умолчанию, со всеми ненужными модулями. А самое страшное - с отсутствием нужных. Выход - скачать исходники (цылка), либо изменить дерево пакетов/портов для поддержки актуальной версии asterisk.

Так что качаем исходники, распаковываем.. Перед make есть возможность сделать одну нужную вещь, а именно: make menuitems. Обязательно заходим в менюшку, шаримся по пунктам. Смело удаляем ненужное (мы же уже почитали хоть немного http://voip-info.org и представляем в общих чертах, что нам нужно). Переходим к make.

Сделали ./configure, make, make install и, как нам посоветовали, make samples. В итоге посмотрели в /etc/asterisk и от изобилия новых конфигов плюнули на всю IP-телефонию и решили, что разбираться со всем этим проще всего будет как нибудь в другой раз.

Мой совет: стоит новые конфиги перенести в другое место, обратно вернуть только основное по одному, жестоко удаляя после копирования всё-всё лишнее (ибо будет мешать восприятию). У меня для начала было это:
asterisk.conf
extensions.conf
modules.conf
cdr.conf
sip.conf
h323.conf
[добавить]

Забыли про поддержку H.323! Ведь он частенько необходим. Оказалось, что в исходниках есть отличное README (channels/h323/README). Оно говорит о том, что перед процессом сборки Астериска нужно заюзать дополнительные библиотеки: PwLib и OpenH323. Причём только определённых версий, ибо можем получить кучу проблем на голову в виде ошибок компиляции. Там же расписан правильный порядок сборки Asterisk если необходимо использовать H323.

cd /path/to/pwlib./configure
make clean opt
cd /path/to/openh323
./configuremake clean opt
cd /path/to/asterisk/channels/h323
make opt
cd /path/to/asterisk
make install


Вот собственно самые основные грабли при установке Asterisk.

От себя добавлю что в идеале сделать пользователя, скажем asterisk и от него выполнять сборку, чтобы впоследствие иметь изолированный сервис от непривилегированного пользователя. А если выделить ему отдельную папку, например /asterisk, то будет удобно удалять/добавлять руками нужные модули (при небоходимости, конечно), и писать дополнительные приложения самостоятельно для интеграции с чем-либо.. но это уже совсем другая история.

четверг, 29 мая 2008 г.

Разделяем поток на два канала для squid

Мы все хотим экономить. В том числе и на Интернет-трафике. Типичная ситуация: организация из 30+ человек и 1 скоростной (и, соответственно, помегабайтный) канал в Интернет, отсутствие безлимитного подключения (потому что скорость его не позволит нормально работать никому). Итог: большие расходы на интернет-трафик.
Конечно, самый простой выход - считать трафик и выделять каждому пользователю по потребности. Иногда от этого страдает больше всего системный администратор. А он тут не при чем.
Итак, для решения проблемы решено подключить второй безлимитный канал на небольшой скорости. И отправить туда весь несущественный, но составляющий большую часть, трафик: картинки, видео, флешки и т.д.

Нам необходимо: сервер я двумя интерфейсами (у меня для лабы eth0 и tun1), работающий squid, фаервол iptables и пакет route2.
Пусть на eth0 (скоростной канал) IP 192.168.0.2/255.255.255.0 шлюз 192.168.0.1
tun1 (медленный) 172.16.1.2/255.255.255.252 шлюз 172.16.1.1 тип P-t-P

eth0 был настроен и работает, добавляем настройки для tun1
Прежде всего необходимо создать второй равнозначный маршрут по уполчанию. Для этого нужно создать вторую таблицу маршрутизации (потом нужный трафик мы перекинем в неё).
ip route flush table 2
ip route show table main \
>| grep -Ev ^default \
>| while read ROUTE ; \
> do ip route add table 2 $ROUTE; \
> done
ip route add default via 172.16.1.2 table 2

(или dev tun1, так как канал P-t-P)

Теперь перехватываем исходящие с IP 172.16.1.2 пакеты и:
- средствами iptables маркируем его:
iptables -t mangle -A OUTPUT -s 172.16.1.0/30 -j MARK --set-mark 2
- средствами route2 отправляем в таблицу 2
ip rule add fwmark 2 table 2
С помощью tcpdump можно посмотреть результат.

Средствами squid можно только назначить исходящий адрес, поэтому такие ухищрения. Вот кусок /etc/squid/squid.conf:

acl SLOW_DOWN urlpath_regex -i \.exe$
acl SLOW_DOWN urlpath_regex -i \.avi$
acl SLOW_DOWN urlpath_regex -i \.mp3$
acl SLOW_DOWN urlpath_regex -i \.jpg$
acl SLOW_DOWN urlpath_regex -i \.gif$
acl SLOW_DOWN urlpath_regex -i \.swf$
acl SLOW_DOWN urlpath_regex -i \.png$

tcp_outgoing_address 172.16.1.1 SLOW_DOWN
tcp_outgoing_address 192.168.0.2


Способ кривой, так как дифференцирует только на основании строки запроса. То есть txt или doc файл размером 700 мегабайт проскочит в быстрый канал. address.com/file - туда же вне зависимости от типа. Но address.com/fille.without.swf - в медленный.

четверг, 15 мая 2008 г.

Поднимаем tap0 и br0 при загрузке

Собственно, можно и скриптик сделать чтобы поднять tap0 и общединить его в мост с eth0. Однако я планирую частенько использовать gns3 в целях обучения, причём нужны связи с реальной сетью..


Debian-образные могут почитать нечто вроде руководства в файлике /usr/share/doc/bridge-utils/README.Debian.gz. Однако суть сводится к редактированию /etc/network/interfaces ручками
У меня получилось примерно так:

~# cat /etc/network/interfaces
auto lo
iface lo inet loopback

iface eth0 inet manual
auto eth0

auto tap0
iface tap0 inet manual
up ifconfig $IFACE up

auto br0
iface br0 inet static
bridge_ports eth0 tap0
address 192.168.1.12
netmask 255.255.255.0
gateway 192.168.1.1


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

вторник, 13 мая 2008 г.

Проблема с соединением dynamips (в gns3) с реальной сетью

Даже разработчики dynagen согласились, что из-за отличий в реализациях winpcap и libpcap, на некоторых сетевых картах происходят косяки: из сети виртуальную сеть видно, но с того же компа - нет. Причём только под линуксом. tcpdump показывает arp трафик, но сетевая на него не отвечает.
На тех же версиях dynamips и gns3 под виндой - всё нормально.
Такая проблема меня постигла на ноуте HP Compaq nc6120.

~# lspci grep net
02:0e.0 Ethernet controller: Broadcom Corporation NetXtreme BCM5705M_2 Gigabit Ethernet (rev 03)


Пробовал Ubuntu 7.10, 8.04, openSUSE 10.3, Debian 4.0.
Решение нашлось (как и предполагалось) на форуме 7200emu.hacki.at. Предлагается создать виртуальный интерфейс tap0, объединить его с eth0 в мост и с этой конструкцией работать. Прежде всего
~# apt-get install bridge-utils
...
Распаковывается пакет bridge-utils (из файла .../bridge-utils_1.2-1build1_i386.deb)...
Настраивается пакет bridge-utils (1.2-1build1) ...

(или через Symantic, кому как больше нравится).

Необходимо не забыть убрать IP на eth0.
Далее запускаем GNS3 от рута (хоть и образовательная программа, однако для работы с реальной сетью без администраторских полномочий не справиться). Делаем простейшую лабу из облака и маршрутизатора. Заходим в настройки облака. Выбираем вкладку NIO TAP. В поле вбиваем tap0. Кнопаем "Добавить" и "ОК". Соединяем фастэзернетом рутер с облаком, запускаем лабу.

Дальше поднимаем интерфейс и создаём мост:
~# ifconfig tap0 up #(сам он почему-то не поднимается)
~# ifconfig tap0
tap0 Link encap:Ethernet HWaddr 00:FF:BF:D6:C0:2B
inet6 addr: fe80::2ff:bfff:fed6:c02b/64 Диапазон:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:500
RX bytes:0 (0.0 b) TX bytes:0 (0.0 b)

~# brctl addbr br0
~# ifconfig br0 172.16.1.13 netmask 255.255.0.0
~# brctl addif br0 tap0
~# brctl addif br0 eth0
~# brctl show
bridge name bridge id STP enabled interfaces
br0 8000.0014c2dc56b9 no tap0
eth0

Настраиваем роутер и вуаля!

Перегрузились, а моста уже нет? Читаем тут...

понедельник, 12 мая 2008 г.

GNS3 - графический симулятор сети cisco

Про dynamips и dynagen поговорим в следующий раз. Отличные программы для обучения. Стоило ожидать, что рано или поздно для будет создан GUI для эмулятора cisco. Таковым стал GNS3. Радует, что для развёртывания какой-либо лабы не нужно знать как устроен и работает dynamips.

Есть версии и под win, и под linux. Однако под линуксом работает чутка пошустрее.
Лабы можно формировать как внутри системы, так и выводить связи наружу. Таким образом, даже не обязательно иметь железки чтобы научиться чему-либо, сделать и показать хоть и виртуальную, но работающую сеть cisco.
Работа с GNS3 не сложна. После установки и первого запуска не нужно лезть за документацией и глубоко в неё вчитываться. Интерфейс интуитивно понятен. Интерфейс поддерживает русский язык, так что немцам и французам (или у кого любой другой отличный от английского второй язык) особенно будет приятно. Сложность понимания первого запуска только лишь в том, что для запуска тестовой виртуальной сети всё-таки необходимо кое-что дополнительное: образы ПО IOS -ибо программный комплекс эмулирует аппаратную часть, используя реальный образ ПО. Однако GNS3 уже содержит в себе dynamips и все необходимые интерфейсы для управления им. Так что дополнительно найти придётся только пару образов IOS.
На сегодняшний день эмулируются следующие платформы: 1700, 2600, 2691, 3600, 3700, 7200. Что для ознакомления обычно достаточно. Поддержка платформ 2800/3800 пока отсутствует, поэтому сэмулировать VoIP-сеть не получится. Будем надеяться, что проект dynamips будет продолжать развиваться, потому что эти ограничения GNS3 - ограничения самого ядра эмуляции - динамипса.

воскресенье, 11 мая 2008 г.

Перенаправление диапазона tcp и udp портов на Cisco IOS.

Опробовано на Cisco ISR серий 800, 1800, 2800, 3800. Cкорее всего
будет работать также на других маршрутизаторах.

ip nat pool superpool 192.168.1.2 192.168.1.2 netmask 255.255.255.0 type rotary
ip nat inside destination list 101 pool superpool
access-list 101 permit udp any any range 1000 2000

четверг, 8 мая 2008 г.

Поднимаем ADSL с двумя pvc на Cisco 877.

Cisco 877 (и семейство 870 вообще) представляет собой маршрутизатор класса SMB (СБМ - средний и малый бизнес). Его позиционируют как устройство для удалённых пользователей, позволяющее создать VPN с центральным офисом чтобы работник мог работать дома. Однако его возможностей может хватить даже для создания небольшого VPN-концентратора, довольно функционального и стабильного маршрутизатора.
В моём случае получился относительно сложный случай: один местный провайдер (ЮТК Ростовэлектросвязь) предоставляет доступ и в Интернет, и к своей локальной сети серез ADSL. Организована связь довольно просто, однако для неподготовленного инженера задача окажется нетривиальной:
Организуются два канала pvc: один для доступа в Интернет, другой - сеть провайдера.
  • PVC0 (Интернет) работает в режиме PPPoE.
  • PVC1 (локальная сеть провайдера) - в режиме моста (RFC1483/2684 bridged). Может возникнуть вопрос почему, но это действительно необходимо. Левые пакеты можно зарезать акцесс-листами.
Основные моменты конфигурирования - настройка WAN-интерфейса и объединение двух интерфейсов в мост.
Так как у нас 2 PVC, то WAN-интерфейс (назвается он ATM1) необходимо поделить на два сабинтерфейса.
interface ATM0
no ip address
no atm ilmi-keepalive
dsl operating-mode auto
!
interface ATM0.1
point-to-point
pvc inet 0/1
pppoe-client dial-pool-number 1
!
!
interface ATM0.2
point-to-point
pvc zona 0/2
encapsulation aal5snap
!
bridge-group 2
!
Так как на pvc0 необходимо поднять PPPoE-клиент, поднимается логический интерфейс Dialer.
interface Dialer1
ip address negotiated
ip mtu 1492
ip nat outside
ip virtual-reassembly
encapsulation ppp
dialer pool 1
no cdp enable
ppp pap sent-username user password 7 pass
!
В локалку смотрит VLAN
interface Vlan1
no ip address
bridge-group 2
!
Для возможности объединения нескольких интерфейсов в мост необходимо поднять ещё один виртуальный интерфейс - BVI.
interface BVI2
ip address 192.168.1.1 255.255.255.0
ip nat inside
!

среда, 7 мая 2008 г.

ADSL - и сколько в этих звуках?

Кто не знает, что такое ADSL? Высокоскоростной доступ в Интернет (сравнительно с диалапом и GPRS)!
Как это работает?..
Википедия даст нам общие сведения, однако слова "технология" и "стандарты" там - основная конкретика. На этом описание технологии заканчивается.
Покопаем немного глубже.
Чтобы работал Ethernet через DSL - необходимо как минимум два устройства: DSL-модем (или роутер, кому как больше нравится) и DSLAM (DSL Access Multiplexer). Причём второй устанавливается на стороне провайдера (обычно, это местная АТС).


На этом описания технологии обычно заканчиваются. Вот у нас имеется линия, фильтруемая сплиттерами. Есть заданные рабочие частоты. Что дальше? Как пустить по этому трафик? А дальше придётся вспоминать (или учить заново) сети ATM.
ATM создаёт несколько виртуальных каналов (pvc) - это некий аналог VLAN-ов. Таким образом, на одной линии можно организовать несколько различный неконкурентных каналов. Зачем? Разные каналы можно ограничить разными скоростями (что активно используется). Например, организовать доступ к сети провайдера (разнообразные "медиазоны") на высокой скорости, в то время, как доступ в Интернет ограничить низкой скоростью.
Каждый канал ATM описывается двумя характеристиками: vpi и vci. То есть для формирования одного pvc необходимы по сути только эти две настройки.
Поверх ATM накладывается Ethernet, дальше можно использовать любые технологии более высоких уровней.
DSLAM на входе принимает несколько (от 8 до тысяч) телефонных линий, выбирает ATM-каналы, преобразует в Ethernet и отправляет полученный сигнал на встроенный свич, аплинк (их может быть несколько) которого попадает в сеть провайдера.
ADSL-роутер по идее должен работать по IP - на то он и роутер. Однако это необязательно. Его задача - преобразовать ATM в Ethernet. Всё остальное появилось из-за желания поставщиков интегрировать сервисы. Сервисы нашли своих клиентов и в итоге мы имеем несколько режимов работы для ADSL-роутера, основные из которых:
  • Мост (Bridge). ATM преобразуется в Ethernet. Работа модема незаметна + сеть клиента обединяется с сетью провайдера. Некрасиво и опасно.
  • Маршрутизатор (этот режим по-разному называется в разных вендорах) . У роутера будет 2 IP-интерфейса: WAN (Ethernet преобразуется в ATM и уходит к провайдеру) и LAN (Ethernet в локальную сеть). Настраивается маршрутизация. В подавляющем большинстве случаев используется NAT. Минус в том, что пользователь авторизуется по IP-адресу. Хорошо, если провайдер будет также учитывать MAC-адреса.
  • PPPoE. То же что и предыдущий режим, только интерфейсе WAN меджу Ethernet и IP добавляется PPPoE. Этот режим позволяет аутентифицировать устройство клиента по логину и паролю, а также формировать канал между провайдерским сервером доступа и роутером у клиента. Так мы получаем достаточный уровень защиты.
На разных pvc на одном ADSL-роутере можно использовать разные режимы работы.

Например, ЮТК (провайдер в Ростове-на-Дону) сочетает второй и третий способы для доступа к своей "медиазоне" и Интернету.

понедельник, 5 мая 2008 г.

start

Итак, теперь я "инженер-системотехник". Странное название: присутствует и "инженер", и "техник". Принято считать, что техники - работники без высшего образвания, инженеры - с высшим. Но смысл на самом деле в том, что занимаюсь в какой-то степени всем: предлагаю идеи по проектированию сетей, конфигурирую сетевые устройства, помогаю админам с линуксом и лезу в IP-телефонию. В послемнее время таких людей как я стали называть системными инженерами, или того круче системными архитекторами.
Блог называю "заметки на полях", ибо эти заметки в блокнот не запишешь..