H323 FreeBSD PFsense 2.2.2 its WORK!
-
H323 (video&audio VoIP) в FreeBSD 10.1
14.05.2015
Редакция статьи ver: 0.1
Аксёнов Алексей /flagman/
(infoгавlinkpro.pro)
Доброго времени суток всем!
Данная статья относится к ОС FreeBSD 10.1, в частности, PFsense 2.2.2 i386 х32 (на момент написания). Данная статья написана максимально понятно для начинающих, я сам таким и являюсь.
Главная Цель: Обеспечить прием входящих звонков на устройство h323.
Сказ:
В моей локальной сети появилось устройство Polycom HDX6000,
я его подключил, настроил сеть, для первого опыта прокинул на него все порты - NAT 1:1. Совершил исходящий звонок удаленному абоненту в другой город, работает! Думаю, ну хорошо, что все работает, говорю собеседнику:
-«Звони теперь ты мне!»
-«Да, конечно, сейчас!»
Вижу,- звонит, нажимаю на Поликоме «принять вызов», а он продолжает звонить и все… сеанс связи не образовывается! Единственным выходом из положения, согласно инструкции, отключить поддержку h323 на Поликоме… Проверил, да действительно,- без h323 сеанс связи есть, но при этом требуется NAT (1024-65000), т.е. :- прощай все остальные сервисы, смотрящие наружу.
- и к тому же, любой пакет (например сканер портов), пришедший на порт 1720 выводит Поликом из состояния спячки, один раз позвонит и все…. А это очень раздражает руководство!
Не наш выход!
После долгих поисков подходящих решений, для организации связи, остановился на GNU Gatekeeper! http://www.gnugk.org
Краткая характеристика (см. сайт изготовителя): - может работать на Linux, Windows, MacOS X, Solaris, FreeBSD, OpenBSD and NetBSD
- support for NAT traversal (H.460.17, H.460.18, H.460.19, H.460.23 and H.460.24)
- full H.323 proxy
Вот что нужно!
Процесс Работы:
После запуска GNUGK, Ваше устройство должно быть настроено для работы с gatekeeper, полазьте в настройках вашего устройства, и укажите локальный IP адрес шлюза:1719, на котором установлен GNUGK, там же найдите где прописывается Доб. номер H.323 (E.164). Под этим номером, ваше устройство будет регистрироваться у привратника, порт регистраций 1719.
- Дополнительно к GNUGK, NAT в PFsense настраивать не нужно!
- Необходимо открыть входящие порты на WAN которые вы можете определить сами (см. функции диапазонов), следуйте эмпирическим путем…
- Необходимо открыть входящие порты на LAN c Вашего устройства H323, желательно все, следуйте эмпирическим путем…
-Т.е. теперь чтобы кто-то с внешнего устройства дозвонился на ваше устройство, набор номера должен быть таким: вашIP##доб. номер, например 8.8.8.8##5693.
- Если внешний абонент не знает вашего доб. номера его вызов будет отбрасываться GNUGK. Таким образом «шальные пакеты: 1720» не будут тревожить наше устройство. Своеобразная защита.
-Если вам нужно позвонить кому-то, за пределы вашей локальной сети, то просто набираете IP адрес нужного абонента (если конечно он не использует доб. номер, если использует, то аналогично,- IP##доб. номер)
- А также много других конфигураций режимов работы GNUGK вас ожидают, см. оригинальное руководствоИнструкция к действию, относится к PFsense 2.2.2 i386 х32:
1) Установка:
Тут нас ожидает проблема, в портах FreeBSD 10.1 отсутствует Gatekeeper! Для FreeBSD 10.1 нужен пакет формата .TXZ.
После вежливого обращения к производителю Jan Willamowius, им был собран готовый пакет для установки на FreeBSD 10.1 i386 х32!
gnugk-3.8-freebsd-10.1-32.txz
Также он может собрать пакет и для х64, данные услуги стоят 20 евро, для каждого пакета…
Итак, пакет у нас есть на нашем админском ПК, далее в PFsense разрешаем подключение к SSH (System-Advanced-Enable Secure Shell).
Нам потребуется ПО: «PuTTY» и «WinSCP»-
Подключаемся через «PuTTY» по SSH к PFsense, используем имя пользователя “root” пароль к нему такой же как у “admin”.
-
Видим встроенное меню PFsense, выбираем 8 пункт, входим в Shell.
-
Устанавливаем менеджер пакетов PKGNG,- в командной строке введите pkg
(pfsense спросит установить или нет, соглашаетесь.) -
Затем проверяем,
pkg info
(увидите версию пакетного менеджера) -
Обновляем репозиторий,
pkg update -f
(увидите как скачивает и обновляет) -
Подключаемся через «WinSCP» по SSH к PFsense, копируем пакет gnugk-3.8-freebsd-10.1-32.txz в удобную для нас директорию, для примера пусть будет в /root
-
Используя «PuTTY» заходим в каталог /root
-
Просматриваем каталог, убеждаясь что наш пакет там лежит:
ls -
Производим установку пакета,-
pkg install gnugk-3.8-freebsd-10.1-32.txz
(Запрашивает установку дополнительных пакетов, соглашаемся)
Дополнительные пакеты (на всякий случай они прикреплены в архиве):
libedit-3.1.20150325_1
libssh-0.6.4
lua52-5.2.4
openldap-client-2.4.40_1
openssl-1.0.2_1 -
После завершения установки всех пакетов, проверяем gatekeeper, в командной строке вводим:
gnugk
(Должны увидеть информационное сообщение о том что не может найти файл конфигурации и принимает настройки по умолчанию)
Проверить вы его также можете в Diagnostics: Sockets
Процесс установки завершен
2) Настройка:
Вся настройка сводится к конфигурированию файла gatekeeper.ini (или gnugk.ini - это как настроите, об этом позже)
Для первоначальной настройки, удобнее всего, запускать gatekeeper из командной строки, введя команду gnugk
При этом gnugk будет искать конфигурационный файл в той директории, в который вы находились на момент набора команды gnugk
*Например, Вы зашли по SSH под root-ом, попали в домашнюю директорию /root, запускаете gnugk, и он ищет конфигурационный файл gatekeeper.ini в директории /root . Завершить процесс Ctrl+C или killall gnugk.
GNUGK слушает после брандмауэра, т.е. для проверки откройте все порты, потом после настройки затяните гайки…Краткий обзор конфигурационного файла.
Для начала небольшие вводные:
- САМОСТОЯТЕЛЬНО ОЗНАКОМТЕСЬ С ОРИГИНАЛЬНЫМ РУКОВОДСТВОМ!- Файл имеет простой текстовый формат, состоит из секций, в квадратных скобках.
- Ниже секций указаны функции со значениями относящиеся к этой секции.
- Символ «;» означает комментарий, данную строчку начинающуюся с «;» gnugk не читает
- ПРОБЕЛОВ НЕТ!
- После изменения параметров желательно перезагружать процесс gnugk (не во всех случаях см. оригинальное руководство)
Для примера, с объяснениями, мой конфиг:
[Gatekeeper::Main] - Секция глобальных фукций
Name=gatekeeper - Имя гейткипера, которое будут видеть ваши устройства
TraceLevel=5 - Уровень детализации информационных сообщений, которые
gnugk будет вам выводить в командной строке.
CompareAliasType=0 - Игнорирование разницы типа псевдонима E164
CompareAliasCase=0 - Игнорирование регистра имени алиаса
Home=192.168.93.1,192.168.94.1,внешний IP - Указаны адреса на которых gnugk слушает порты
ExternalIP=внешний IP - Указать Ваш внешний IP, без этого значения корректного приема входящих вызовов не будет
[RoutedMode] - Секция ответственна за параметры направления сигналов
GKRouted=1 - Включение направления сигналов
H245Routed=1 - Включение управления каналом h245
;H245TunnelingTranslation=1 - Разрешить только одной стороне использовать
туннелирование h245. При активации этой функции
у меня пропадал звук…
Q931PortRange=20000-20999 - Определить диапазон портов Q931
H245PortRange=30000-30999 - Определить диапазон портов H245
;RemoveH245AddressOnTunneling=1
;RemoveH245AddressFromSetup=1
;TreatUnregisteredNAT=1
AcceptNeighborsCalls=1 - Разрешить вызовы без проверки CallTable
;DisableRetryChecks=1
;ForwardOnFacility=1
;TranslateFacility=1
AcceptUnregisteredCalls=1 - Разрешить не зарегистрированные конечные точки
SupportNATedEndpoints=1 - Разрешить вызовы с конечных точек за NAT
EnableH450.2=1 - Включить поддержку H450 если нужно
;EnableH46017=1
;EnableH46018=1
;EnableH46026=1
;DropCallsByReleaseComplete=1 - Если сеанс не завершается самостоятельно
;SendReleaseCompleteOnDRQ=1 - Если сеанс не завершается самостоятельно
[Proxy] - Секция ответственна за ПРОКСИ режим, т.е.
Привратник направляет и управляет каналом H.245, а также
все медиа каналы, включая RTP/RTCP для аудио и видео,
и канал Т.120 для данных. В этом случае трафик не
передается напрямую между конечными точками.Enable=1 - Режим Прокси включен
ProxyAlways=1 - Проксировать все вызовы без исключенияТаким образом, мой gatekeeper.ini, с которым Polycom успешно работает, выглядит вот так (пока не занимался с диапазоном портов):
[Gatekeeper::Main]
Name=gatekeeper
TraceLevel=5
CompareAliasType=0
CompareAliasCase=0
Home=192.168.93.1,192.168.94.1,мой IP
ExternalIP=мой IP[RoutedMode]
GKRouted=1
H245Routed=1
AcceptNeighborsCalls=1
AcceptUnregisteredCalls=1
SupportNATedEndpoints=1
EnableH450.2=1
;EnableH46017=1
;EnableH46018=1
;EnableH46026=1
;DropCallsByReleaseComplete=1
;SendReleaseCompleteOnDRQ=1[Proxy]
Enable=1
ProxyAlways=1Копируйте себе, вставляйте, и пользуйтесь!
-
3) Мониторинг работы:
Здесь несколько способов:- При запуске с командной строки, дав команду gnugk, все логи действий отображаются прямо в консоли, увидите точно.
Уровень детализации информационных сообщений, которые gnugk будет вам выводить в командной строке, определяются значением (от 1 до 5) функции TraceLevel, в секции [Gatekeeper::Main]. Например, TraceLevel=3. - Если вы закрыли консоль, gnugk продолжает работу, а вы через некоторое время хотите увидеть как он там себя ведет, через консоль, то необходимо:
(Пока не знаю что) - Используйте соединение Telnet через “PuTTY” на 7000 порт, для этого изучите секцию [GkStatus::Auth]. Также ознакомьтесь с командами управления через Telnet.
Для начала сделайте так, добавьте ниже приведенную секцию в ваш конфиг:
[GkStatus::Auth]
rule=allow
Shutdown=allow
- Также обратите свое внимание на модули для мониторинга GNUGK на сайте разработчика, я думаю на базе них можно для PFsense и пакет для мониторинга собрать…
http://www.gnugk.org/gnugk-addon.html
4) Автозапуск GNUGK
Вводная от производителя была такая:
To let it start automatically on boot, you have to add
gnugk_enable="YES" to /etc/rc.conf.
And of course you should edit /etc/gnugk.ini to match your
requirements.
Regards,
Jan
…..
Теперь подробнее. После установки появляется файл gnugk в /etc/rc.d/
Если его попробуем запустить набрав в командной строке: /etc/rc.d/gnugk
Gnugk выдаст перечень команд:
Usage: /etc/rc.d/gnugk fast|force|one|quiet
Вводим:
/etc/rc.d/gnugk start
Gnugk не стартует и выдаст предупреждение:
WARNING: $gnugk_enable is not set properly - see rc.conf(5).
Cannot 'start' gnugk. Set gnugk_enable to YES in /etc/rc.conf or use 'onestart' instead of 'start'.
Открываем /etc/defaults/rc.conf . Добавляем в «Important initial Boot-time options»
после строчки rc_conf_files="/etc/rc.conf /etc/rc.conf.local" добавляем:
gnugk_enable="YES" Сохраняем, закрываем.
Вводим:
/etc/rc.d/gnugk start
Получаем:
Starting gnugk.
Смотрим в Diagnostics: Sockets, GNUGK работает!
ВАЖНО! При таком запуске GNUGK ищет конфигурационный файл в /etc/gnugk.ini . если его там нет, будет сообщение:
WARNING: Config file /etc/gnugk.ini doesn't exist! Use the -c switch to specify the config file.
Так что мы берем свой gatekeeper.ini ранее настроенный из /root, переименовываем в gnugk.ini и кладем в /etc/. Пусть там теперь и живет!
Теперь если мы изменили конфигурационный файл и нужно принять
изменения, вводим:
/etc/rc.d/gnugk restart или reload
Для остановки соответственно:
/etc/rc.d/gnugk stop
Также необходимо добавить в CRON
* * * * * root /etc/rc.d/gnugk start**Перезагружаем наш PFsense, после загрузки идем в Diagnostics: Sockets и видим что GNUGK работает!
И входящие звонки передаются на наше устройство и сеанс связи работает!!!!**
- При запуске с командной строки, дав команду gnugk, все логи действий отображаются прямо в консоли, увидите точно.
-
В прикрепленных архив, не знаю админ поругает или нет, но не знаю как выложить…
В нем статья и сам пакет gnugk-3.8-freebsd-10.1-32.txz
А также мои переводы мануала GNUGK 4 и 5 глава, правда 5 главу перевел не до конца...
С уважением ко всем! Надеюсь эта статья поможет тем кто не может разрешить проблему с пробросом портов по протоколу H323 -
Спасибо огромное!
-
werter! Тебе тоже спасибо! Ты пытался мне помочь!!!
Следующий мой этап в этом направлении, добавить в веб интерфейс PFsense модуль мониторинга для Gnugk!
Тогда это будет полноценный мощный инструмент, а главное удобный!
В этом направлении, бесплатные варианты:- GkGui http://www.gnugk.org/gkgui.html выполнен на Java
- GnuGK Console Viewer https://www.vc.dfn.de/download/ (a graphical Console viewer in Perl)
Но я в этом не силен, кто сможет помочь?
Скачал GkGui, разархивировал, папка с файлами, стартовый gkgui.html , т.е. хороший вариант для добавления в PFsense!
Но он не запускается, что нужно сделать не знаю…
-
Попробуйте в англоветке разработчикам написать. Может и пакет сварганят с веб-фейсом.
-
"Q931PortRange=20000-20999 - Определить диапазон портов Q931
H245PortRange=30000-30999 - Определить диапазон портов H245"Qsig сигнализация работает на порту 5004 (что у моего провайдера что у панасоника, с другими не имел дела, хотя это наверно все равно определено каким нибудь стандартом)
Р245 или RTP почти все оборудование которое встречалось работало на портах от 8000 до 20000 но в спецификации к передаче голоса определены порты 10000-20000 поэтому лучше указывать их.не проще ли сделать так
алиас ваших белых ип
алиас портов для h323 1718-1720, 5004, и для ртп 10000-20000
и указать в порт форварде алиас адресов, алиас портов редирект на ип в локалке
и с локалки ип алиас портов на алиас адресов
и зачем мучаться придумывать велосипед.
стоял раньше tda-200 c ipgw-16 между подразделениями гонял так трафик. Сейчас уехали панасоники по подразделениям и дальше продолжают свою работу по такой же схеме.
теперь еще и сип добавился. но опять же схема не намного усложнилась. добавил в алиас 5060-5061 и все.
ну а на оборудовании указывал что rtp начинать с 10000 (как в панасонике)
ну а если нет белых ип то только впн поможет.
хотя это может и работает для меня, я наоборот стремлюсь все упростить и автоматизировать, но за проделанную работу все равно отлично. -
"Q931PortRange=20000-20999 - Определить диапазон портов Q931
H245PortRange=30000-30999 - Определить диапазон портов H245"
В данных дипазонах указываются порты не те что просто слушает GNUGK, а те которые GNUGK будет сообщать устройству для работы именно в этом диапазоне…"алиас ваших белых ип
алиас портов для h323 1718-1720, 5004, и для ртп 10000-20000
и указать в порт форварде алиас адресов, алиас портов редирект на ип в локалке"
Не совсем так, Polycom отказывался работать при такой конфигурации, может другие устройства и заработали бы но Polycom нет...
Он может работать при простом форвардинге, но тогда нужно отключить поддержку H323, а это не гуд...Спасибо за оценку
-
для h323 первые порты 1718-1723 и 5004 это его сигнализация.
голос уже идет потом по портам 10000-20000
поэтому не вижу абсолютно никакого смысла ставить лишнюю прокладку. от устройства до устройства а с натом или без, железка будет решать по портам 1718-1723 и 5004 и эти порты для него самые важные.Не совсем так, Polycom отказывался работать при такой конфигурации, может другие устройства и заработали бы но Polycom нет…
не видел вреднее железа чем плата ipfw-16 от панасоника. По началу я с ним намучался, придумывали самые разные схемы и остановились на таком примере как указал.
с Polycom не работал, хотя я не думаю что будет сильно отличаться от h323 протокола, хотя это больше похоже для видеоконференций. то может быть и правильно что использовался сторонний софт.Он может работать при простом форвардинге, но тогда нужно отключить поддержку H323, а это не гуд…
так тут вроде как шла речь при работе устройства связи (голоса или видео) по протоколу h323. для видео может еще порты нужны, но вот для h323 нет. а не пробовали ли вы его прошить под sip например как audiucodes mp-118, когда можно перепрошить его под нужную конфигурацию.
-
Перепрошить POLYCOM это опасно, без з/п остаться надолго и с записью в трудовую книжку о не соответствии с занимаемой должностью
-
ну не знаю, проблем с возвратом (если поставщик нормальный нет). А перепрошивка устройства не попадает под раздел
о не соответствии с занимаемой должностью
. Это одна из обязанностей. Вот если это делать без бесперебойника то тогда да.