Netgate Discussion Forum
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Search
    • Register
    • Login

    H323 FreeBSD PFsense 2.2.2 its WORK!

    Scheduled Pinned Locked Moved Russian
    11 Posts 3 Posters 2.3k Views
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • F
      flagman
      last edited by

      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

      Копируйте себе, вставляйте, и пользуйтесь!

      scheme.jpg
      scheme.jpg_thumb

      Проектирование СКС, СОТ, ОПС, АСКУЭ, АСУТП http://www.linkpro.pro

      1 Reply Last reply Reply Quote 0
      • F
        flagman
        last edited by

        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 работает!

        И входящие звонки передаются на наше устройство и сеанс связи работает!!!!**

        Проектирование СКС, СОТ, ОПС, АСКУЭ, АСУТП http://www.linkpro.pro

        1 Reply Last reply Reply Quote 0
        • F
          flagman
          last edited by

          В прикрепленных архив, не знаю админ поругает или нет, но не знаю как выложить…
          В нем статья и сам пакет gnugk-3.8-freebsd-10.1-32.txz
          А также мои переводы мануала GNUGK 4 и 5 глава, правда 5 главу перевел не до конца...
          С уважением ко всем! Надеюсь эта статья поможет тем кто не может разрешить проблему с пробросом портов по протоколу H323

          GNUGatekeeper.zip.txt
          perevod.zip.txt

          Проектирование СКС, СОТ, ОПС, АСКУЭ, АСУТП http://www.linkpro.pro

          1 Reply Last reply Reply Quote 0
          • werterW
            werter
            last edited by

            Спасибо огромное!

            1 Reply Last reply Reply Quote 0
            • F
              flagman
              last edited by

              werter! Тебе тоже спасибо! Ты пытался мне помочь!!!
              Следующий мой этап в этом направлении, добавить в веб интерфейс PFsense модуль мониторинга для Gnugk!
              Тогда это будет полноценный мощный инструмент, а главное удобный!
              В этом направлении, бесплатные варианты:

              1. GkGui http://www.gnugk.org/gkgui.html выполнен на Java
              2. GnuGK Console Viewer https://www.vc.dfn.de/download/ (a graphical Console viewer in Perl)
                Но я в этом не силен, кто сможет помочь?
                Скачал GkGui, разархивировал, папка с файлами, стартовый gkgui.html , т.е. хороший вариант для добавления в PFsense!
                Но он не запускается, что нужно сделать не знаю…

              Проектирование СКС, СОТ, ОПС, АСКУЭ, АСУТП http://www.linkpro.pro

              1 Reply Last reply Reply Quote 0
              • werterW
                werter
                last edited by

                Попробуйте в англоветке разработчикам написать. Может и пакет сварганят с веб-фейсом.

                1 Reply Last reply Reply Quote 0
                • V
                  vokovigor
                  last edited by

                  "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 (как в панасонике)
                  ну а если нет белых ип то только впн поможет.
                  хотя это может и работает для меня, я наоборот стремлюсь все упростить и автоматизировать, но за проделанную работу все равно отлично.

                  1 Reply Last reply Reply Quote 0
                  • F
                    flagman
                    last edited by

                    "Q931PortRange=20000-20999 - Определить диапазон портов Q931
                    H245PortRange=30000-30999 - Определить диапазон портов H245"
                    В данных дипазонах указываются порты не те что просто слушает GNUGK, а те которые GNUGK будет сообщать устройству для работы именно в этом диапазоне…

                    "алиас ваших белых ип
                    алиас портов для h323 1718-1720, 5004, и для ртп 10000-20000
                    и указать в порт форварде алиас адресов, алиас портов редирект на ип в локалке"
                    Не совсем так, Polycom отказывался работать при такой конфигурации, может другие устройства и заработали бы но Polycom нет...
                    Он может работать при простом форвардинге, но тогда нужно отключить поддержку H323, а это не гуд...

                    Спасибо за оценку

                    Проектирование СКС, СОТ, ОПС, АСКУЭ, АСУТП http://www.linkpro.pro

                    1 Reply Last reply Reply Quote 0
                    • V
                      vokovigor
                      last edited by

                      для h323 первые порты 1718-1723 и 5004 это его сигнализация.
                      голос уже идет потом по портам 10000-20000
                      поэтому не вижу абсолютно никакого смысла ставить лишнюю прокладку. от устройства до устройства а с натом или без, железка будет решать по портам 1718-1723 и 5004 и эти порты для него самые важные.

                      Не совсем так, Polycom отказывался работать при такой конфигурации, может другие устройства и заработали бы но Polycom нет…

                      не видел вреднее железа чем плата ipfw-16 от панасоника. По началу я с ним намучался, придумывали самые разные схемы и остановились на таком примере как указал.
                      с Polycom не работал, хотя я не думаю что будет сильно отличаться от h323 протокола, хотя это больше похоже для видеоконференций. то может быть и правильно что использовался сторонний софт.

                      Он может работать при простом форвардинге, но тогда нужно отключить поддержку H323, а это не гуд…

                      так тут вроде как шла речь при работе устройства связи (голоса или видео) по протоколу h323. для видео может еще порты нужны, но вот для h323 нет.  а не пробовали ли вы его прошить под sip например как audiucodes mp-118, когда можно перепрошить его под нужную конфигурацию.

                      1 Reply Last reply Reply Quote 0
                      • F
                        flagman
                        last edited by

                        Перепрошить POLYCOM это опасно, без з/п остаться надолго и с записью в трудовую книжку о не соответствии с занимаемой должностью

                        Проектирование СКС, СОТ, ОПС, АСКУЭ, АСУТП http://www.linkpro.pro

                        1 Reply Last reply Reply Quote 0
                        • V
                          vokovigor
                          last edited by

                          ну не знаю, проблем с возвратом (если поставщик нормальный нет). А перепрошивка устройства не попадает под раздел

                          о не соответствии с занимаемой должностью

                          . Это одна из обязанностей. Вот если это делать без бесперебойника то тогда да.

                          1 Reply Last reply Reply Quote 0
                          • First post
                            Last post
                          Copyright 2025 Rubicon Communications LLC (Netgate). All rights reserved.