Домашний сервер: прокси для SIP

    У меня есть стационарный ip телефон, и раутер под ubuntu-server раздающий интернет. Проблема в том, что телефон отдает свой локальный ип (192.168.0.6) sip серверу, и соответственно дозвонится мне уже не возможно. Проброска портов здесь тоже не поможет.
    Первое что пришло в голову — завести Asterisk PBX (программная АТС), но данное решение кажется избыточным для дома с одним телефоном, одним SIP провайдером и без FXO интерфейса. Совершенно случайно нашел небольшую утилиту реализующую как раз-то, что нужно: siproxd. Данная программа есть в репозитории дебиана и убунты.

    Настройка siproxd.conf:

    # Интерфейс на котором висят sip телефоны и клиенты (да, siproxd может проксировать множество клиентов)
    if_inbound  = eth0
    # Интерфейс к которому подключен интернет (важно чтобы интерфейс имел реальный ip адрес,
    # т.к. именно на него будут поступать звонки). В моём случае это интерфейс PPPoE, к которому
    # подключается сервер через adsl
    if_outbound = ppp0
    # Подсети с которых могут подключатся sip клиенты (через запятую, без пробелов)
    hosts_allow_reg = 192.168.0.0/24
    # Подсети с которых разрешен SIP трафик, т.е. звонящие на телефон.
    #hosts_allow_sip = 123.45.0.0/16,123.46.0.0/16
    # Подсети с которых запрещен SIP трафик.
    #hosts_deny_sip  = 10.0.0.0/8,11.0.0.0/8
    

    Остальные опции менять не нужно. Так же можно настроить быстрый набор:

    # Включаем необходимый плагин
    pi_shortdial_enable = 1
    # Задаем промежуток для номеров быстрого набора (*00 -- от *01 до *99)
    pi_shortdial_akey = *00
    # номер для записи выбирается по порядку добавления в конфигурационном файле.
    # т.е. для промежутка от *01 до *99 первая запись будет *01,
    pi_shortdial_entry = 11111@test.com
    # а вторая *02
    pi_shortdial_entry = 22222@test.com
    

    Как выглядит настройка на телефоне Cisco 7912g (настройки для других телефон скорее всего будут подобными):
    • OutBoundProxy: адрес сервера с siproxd
    • Proxy: адрес sip сервера провайдера
    • UID: Ваш UID у sip провайдера
    • PWD: Ваш пароль
    Если в Proxy написать адрес сервера с siproxd, то можно звонить между подключенными к данному серверу телефонами. Довольно удобная вещь.
    В чем плюсы данного подхода:
    1. Нет необходимости запускать и настраивать полноценную АТС
    2. Довольно легко настраивать
    3. Прокси поддерживает авторизацию, соответственно можно сделать небольшой прокси сервер внутри организации с возможностью звонков между телефонами по короткому номеру.
    4. Можно использовать аппаратные sip телефоны за NAT (программные в основном и так прекрасно работают, благодаря STUN и другим технологиям)


    кросс пост с моего блога
    Метки:
    Поделиться публикацией
    Комментарии 24
    • +2
      Вопрос к хабрасообществу: стоит ли писать подобные статьи о настройке домашнего сервера?
      • +2
        Конечно стоит, очень часто попадаешь в ситуацию, когда хочется что-то завести на домашней машине, но основные варианты и решения — из продакш класса и для дома избыточны, а найти что-то маленькое и легкое зачастую сложно.
        • +1
          еще как стоит
          • 0
            Да отдельный топик — «Домашний сервер» пора создавать.
        • +1
          насколько я понял SIP сервер у вас внешний, от провайдера, не в локалке?
          Все устройства ходя в инет через роутер который тоже имеет внешний IP шник.
          Тогда как телефон может отдавать внешнему адресату свой локальный IP адрес? Он же за раутером, который подставит свой в соответсвии с NAT.
          • 0
            SIP не работает с NAT судя по всему, т.к. ип адрес устройства отдает само устроство при подключении к SIP серверу.
            • 0
              Вообще, это обходится через STUN протокол, но многие аппаратные телефоны его не умеют.
              • 0
                Да многие его умеют, но всё же шняга какая-то получалась. Я с ходу не разобрался. Раньше бы эту статью бы, где-то на полгода.
          • +2
            А разве socks proxy сервер не справится с этой задачей? обязательно необходим специальный?
            • 0
              Не все аппаратные телефоны их умеют. Конкретно мой умеет только SIP прокси.
            • 0
              Нашел еще один подобный сервер, но с большей функциональностью: PartySIP. Вообще, если есть внешний статический ip адрес, то можно поступить проще: установить внешний ip адрес на телефоне, и сделать проброс портов на телефон. Но в таком случае за прокси может находится только один телефон (если не назначать различные порты и прочее)
              • +1
                А вот если телефон с wi-fi, тогда можно его по всему дому таскать. Очень удобно. Получается радио-ip-телефон :-)
                • 0
                  есть такие, D-Link DPH-540 и Linksys WIP330, и еще вроде что-то было у Cisco.
                • +3
                  сейчас занимаюсь реализацией проекта Asterisk + Железка (Ещё не купил поэтому «Железка») на 4 FXO и Ethernet. Роутинг входящих и исходящих вызовов + sipnet.ru Как дешёвая международная междугородная связь. Как доделую обязательно отпишу на Хабре.
                  • 0
                    А сколько планируется телефонов подключать?
                    • +1
                      4FXO предполагают минимум 4 аппарата, если непосредственно в гейт. Однако упоминание астериска в сочетании с FXO-железкой позволяет предположить, что будет задействована АТС. В принципе, можно и без астериска :). Но не столь удобно.
                  • +1
                    Кто-нибудь знает как дешево звонить в Беларусь через sip? Минимально, что видел 0.25$ в минуту.
                  • +1
                    у меня cisco 7940 за раутером стоит и звонки с и на телефон идут без проблем. собвственно вопрос: что я не так сделал? или это зависит от провайдера?
                    • 0
                      И от прова и от шелесяки вашей. Рад за Вас, честно. Но проблемы всё же возникают.
                    • 0
                      Хмм… Работаю в провайдере, предоставляем телефонию (asterisk), половина железок висят за nat, половина на статических ip, все нормально работает. Дома отлично работает с сипнетом linksys spa941 через роутер. Странно как то у вас все.
                      • 0
                        Из чистого любопытства — а как вы со своим астериском вопросы с Минсвязи решили? Или есть какая-то софтина/железка «для виду», а астериск уже в ее тени трудится?
                      • 0
                        Вообще это опция софт-свича поддерживать клиентов за NAT. Если у вашего провайдера VoIP это не работет… меняйте провайдера.
                        • НЛО прилетело и опубликовало эту надпись здесь

                          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.