Если вы подняли SIP-сервер дома — например, на базе Asterisk или FreeSWITCH — то наверняка столкнулись с одной и той же проблемой: ваш внешний IP-адрес меняется. Провайдер выдаёт динамический IP, и каждый раз, когда он меняется, телефоны за NAT перестают регистрироваться, а входящие звонки с внешних линий пропадают. Решение — динамический DNS (DDNS). Разберёмся, как это работает и как настроить так, чтобы всё работало стабильно.
- Почему SIP и динамический IP — плохая компания
- Что понадобится для настройки
- Выбор провайдера динамического DNS
- Вариант 1: Настройка DDNS на роутере
- Вариант 2: Настройка DDNS через скрипт на сервере
- Для DuckDNS
- Для No-IP
- Для Cloudflare (если у вас свой домен)
- Настройка SIP-сервера для работы с DDNS
- В Asterisk (sip.conf или pjsip.conf)
- В FreeSWITCH
- Настройка SIP-клиентов
- Что выбрать в зависимости от ситуации
- Частые ошибки
- Как проверить, что всё работает
- Дополнительные рекомендации
- Итог
Почему SIP и динамический IP — плохая компания
SIP-протокол чувствителен к сетевым параметрам. Когда ваш внешний IP меняется, ломается сразу несколько вещей:
- IP-телефоны за NAT теряют регистрацию на сервере;
- Если вы используете SIP-провайдера для звонков на городские и мобильные номера, он перестаёт видеть ваш сервер;
- Входящие вызовы с внешних линий не доходят;
- Если вы подключаетесь к серверу удалённо — теряете доступ.
Статический IP от провайдера решает проблему, но стоит денег, и не каждый провайдер его предоставляет. Динамический DNS — бесплатная или очень дешёвая альтернатива. Суть простая: вместо IP-адреса вы используете доменное имя, а специальная утилита на вашем сервере или роутере обновляет DNS-запись каждый раз, когда IP меняется.
Что понадобится для настройки
Прежде чем начать, убедитесь, что у вас есть:
- Работающий SIP-сервер (Asterisk, FreeSWITCH, 3CX — неважно);
- Доступ к настройкам роутера или возможность установить софт на сервер;
- Аккаунт у провайдера динамического DNS (о них ниже);
- Открытый порт 5060 (UDP/TCP) на роутере, проброшенный на SIP-сервер;
- Желательно — открытый диапазон RTP-портов (обычно 10000–20000 UDP) для передачи голоса.
Выбор провайдера динамического DNS
Существует несколько сервисов DDNS. Они отличаются надёжностью, частотой обновлений и удобством настройки. Вот основные варианты, которые реально работают:
| Сервис | Бесплатные домены | Частота обновления | Поддержка роутерами | Особенности |
|---|---|---|---|---|
| No-IP | 3 домена (нужно подтверждать раз в 30 дней) | Каждые 5 минут | Да, встроена в большинство роутеров | Самый популярный, но требует периодического подтверждения |
| DuckDNS | Неограниченно | Каждые 5 минут | Через скрипты | Полностью бесплатный, без подтверждений |
| Dynu | 4 бесплатных домена | Каждые 1–2 минуты | Да | Быстрое обновление, удобный интерфейс |
| FreeDNS (afraid.org) | Неограниченно | Зависит от клиента | Через скрипты | Огромный выбор доменов, но интерфейс устаревший |
| Cloudflare API | Если у вас свой домен | Мгновенно | Через скрипты | Максимальный контроль, но требует своего домена |
Если у вас уже есть свой домен — используйте Cloudflare. Это самый надёжный вариант. Если нет — DuckDNS или No-IP для быстрого старта.
Вариант 1: Настройка DDNS на роутере
Самый простой способ — если ваш роутер поддерживает клиент динамического DNS. Большинство современных роутеров от TP-Link, Asus, MikroTik, Keenetic имеют эту функцию.
Общий порядок действий (детали зависят от модели роутера):
- Зарегистрируйтесь у провайдера DDNS и создайте имя хоста, например
mysip.ddns.net. - Зайдите в веб-интерфейс роутера (обычно
192.168.1.1или192.168.0.1). - Найдите раздел «Динамический DNS» или «DDNS» — обычно в разделе «Интернет» или «Дополнительные настройки».
- Выберите провайдера из списка или укажите «Пользовательский».
- Введите логин, пароль и имя хоста.
- Сохраните настройки и проверьте статус — должно отображаться «Подключено» или «Обновлено».
После этого ваш роутер будет автоматически обновлять DNS-запись при смене IP. В SIP-клиентах и настройках провайдера указывайте не IP, а доменное имя — mysip.ddns.net.
Вариант 2: Настройка DDNS через скрипт на сервере
Если роутер не поддерживает DDNS или вы хотите больше контроля — установите клиент обновления прямо на SIP-сервер.
Для DuckDNS
Создайте файл /usr/local/bin/duckdns.sh:
#!/bin/bash
echo url="https://www.duckdns.org/update?domains=ВАШДОМЕН&token=ВАШТОКЕН&ip=" | curl -k -o /var/log/duckdns.log -K -
Сделайте исполняемым и добавьте в cron для обновления каждые 5 минут:
chmod +x /usr/local/bin/duckdns.sh
crontab -e
*/5 * * * * /usr/local/bin/duckdns.sh
Для No-IP
Установите официальный клиент:
cd /usr/local/src
wget http://www.no-ip.com/client/linux/noip-duc-linux.tar.gz
tar xzf noip-duc-linux.tar.gz
cd noip-2.1.9-1/
make install
При установке клиент попросит логин, пароль и имя хоста. После этого добавьте его в автозагрузку.
Для Cloudflare (если у вас свой домен)
Скрипт обновления A-записи через API:
#!/bin/bash
ZONE_ID="ваш_zone_id"
RECORD_ID="ваш_record_id"
API_TOKEN="ваш_api_token"
DOMAIN="sip.example.com"
CURRENT_IP=$(curl -s https://ifconfig.me)
curl -X PUT "https://api.cloudflare.com/client/v4/zones/ZONE_ID/dns_records/RECORD_ID" \
-H "Authorization: Bearer $API_TOKEN" \
-H "Content-Type: application/json" \
--data "{\"type\":\"A\",\"name\":\"DOMAIN","content":"CURRENT_IP\",\"ttl\":120}"
Токен API создаётся в панели Cloudflare с правами на редактирование DNS вашей зоны. Zone ID и Record ID можно получить через API или посмотреть в документации Cloudflare.
Настройка SIP-сервера для работы с DDNS
Одного DDNS недостаточно — нужно правильно настроить сам SIP-сервер, чтобы он корректно работал за NAT.
В Asterisk (sip.conf или pjsip.conf)
Для chan_sip в sip.conf:
[general] externhost=mysip.ddns.net externrefresh=10 localnet=192.168.1.0/255.255.255.0 nat=yesКлючевые параметры:
externhost— ваш DDNS-хост, по которому сервер будет представляться внешнему миру;externrefresh— как часто проверять внешний IP (в секундах);localnet— ваша локальная подсеть, чтобы Asterisk понимал, какие устройства за NAT;nat=yes— включает механизмы обхода NAT.
Для PJSIP в pjsip.conf:
[transport-udp]
type=transport
protocol=udp
bind=0.0.0.0
external_media_address=mysip.ddns.net
external_signaling_address=mysip.ddns.net
local_net=192.168.1.0/24
В FreeSWITCH
В файле vars.xml или в профиле SIP:
<X-PRE-PROCESS cmd="set" data="external_sip_ip=mysip.ddns.net"/>
<X-PRE-PROCESS cmd="set" data="external_rtp_ip=mysip.ddns.net"/>
FreeSWITCH автоматически определяет внешний IP, но при использовании DDNS лучше указать его явно, чтобы избежать задержек при определении.
Настройка SIP-клиентов
На каждом IP-телефоне или софтфоне, который подключается к вашему серверу извне, в качестве адреса сервера указывайте не IP, а ваш DDNS-хост. Например: mysip.ddns.net или sip.example.com.
Также убедитесь, что на клиентах включены настройки NAT traversal:
- STUN-сервер — укажите публичный STUN, например
stun.l.google.com:19302; - Keep-alive — включите отправку keep-alive пакетов каждые 20–30 секунд, чтобы NAT-таблица на роутере не закрывала соединение;
- Outbound proxy — укажите ваш DDNS-хост как прокси для регистрации.
Что выбрать в зависимости от ситуации
У вас обычный домашний роутер и нет своего домена. Берите DuckDNS — он полностью бесплатный, не требует подтверждений раз в месяц и работает стабильно. Настройка через скрипт на сервере занимает 10 минут.
Роутер поддерживает DDNS из коробки. Используйте встроенный клиент — это самый простой путь. No-IP или Dynu обычно есть в списке поддерживаемых провайдеров.
У вас есть свой домен. Используйте Cloudflare API. Это даёт максимальную надёжность и скорость обновления. Задержка при смене IP будет минимальной.
Вы используете MikroTik. В RouterOS есть встроенный клиент DDNS, который работает с несколькими провайдерами. Настройка через CLI:
/ip dns set allow-remote-requests=yes
/ip cloud set ddns-enabled=yes
MikroTik автоматически создаст имя вида XXXX.sn.mynetname.net и будет обновлять его.
Частые ошибки
Вот что обычно идёт не так и как этого избежать:
- Забыли пробросить порты. DDNS обновляется, но звонки не проходят. Проверьте, что порт 5060 проброшен на SIP-сервер, а RTP-порты (10000–20000) открыты для UDP.
- Указали IP вместо домена в настройках SIP. Если в
externhostили настройках провайдера стоит конкретный IP, а не домен — DDNS бесполезен. Везде используйте доменное имя. - Не настроили NAT traversal на сервере. Без
nat=yesв Asterisk или аналогичных настроек в других серверах голос может быть односторонним или отсутствовать полностью. - Слишком большой TTL у DNS-записи. Если TTL стоит 86400 (24 часа), после смены IP клиенты будут пытаться звонить на старый IP целые дня. Ставьте TTL 60–120 секунд.
- Не включите keep-alive на клиентах. NAT-таблица роутера закрывает неактивные соединения через 30–60 секунд. Без keep-alive регистрация будет пропадать.
- Используете TCP для SIP без необходимости. UDP работает быстрее и проще проходит через NAT. TCP добавляет накладные расходы и может вызывать проблемы с таймаутами.
Как проверить, что всё работает
После настройки выполните проверки:
- Убедитесь, что DDNS-хост резолвится в ваш текущий внешний IP:
dig mysip.ddns.netилиnslookup mysip.ddns.net. - Проверьте регистрацию SIP-клиентов — наберите в Asterisk
sip show peersилиpjsip show endpoints. - Сделайте тестовый звонок с внешнего номера на ваш SIP.
- Сымитируйте смену IP — перезагрузите роутер или отключите/подключите WAN-кабель. Через 5–10 минут проверьте, обновился ли DDNS и работают ли звонки.
- Проверьте двусторонний голос — односторонний звук обычно означает проблему с NAT или RTP-портами.
Дополнительные рекомендации
- Мониторинг. Настройте простую проверку, которая раз в минуту проверяет, совпадает ли внешний IP с DNS-записью. Можно сделать через cron-скрипт, который при расхождении отправляет уведомление в Telegram.
- Резервный канал. Если звонки критичны — подумайте о резервном интернет-соединении (4G-модем) с автоматическим переключением.
- TLS и SRTP. Для безопасности трафика настройте SIP over TLS (порт 5061) и шифрование голоса через SRTP. Это особенно важно, если сервер доступен из интернета.
- Firewall. Ограничьте доступ к порту 5060 по IP, если ваш SIP-провайдер имеет статические адреса. Это снизит риск сканирования и атак.
Итог
Динамический DNS для SIP-сервера — это не сложно, но требует внимания к деталям. Алгоритм простой:
- Выберите провайдера DDNS — DuckDNS для быстрого старта, Cloudflare если есть свой домен.
- Настройте обновление — через роутер или скрипт на сервере.
- Укажите DDNS-хост везде: в настройках SIP-сервера, на клиентах, у SIP-провайдера.
- Правильно настройте NAT traversal — это половина успеха.
- Проверьте двусторонний голос и устойчивость к смене IP.
Если всё сделано правильно — ваш SIP-сервер будет доступен по доменному имени независимо от того, сколько раз провайдер поменяет вам IP. Звонки будут работать, клиенты — регистрироваться, а вы забудете о проблеме.
