Zadarma · устойчивый SIP

Шлюз в Европе, гарнитура здесь

Обрыв на таком канале — обычный случай SIP. Провайдер портит UDP и разбирает SIP на порту 5060, а общий VPN, особенно по TCP, добавляет свои потери. Рабочая схема у Zadarma и у остальных АТС одна: шлюз с белым адресом в Европе регистрируется по TLS 5061 и SRTP, гарнитура ходит на шлюз через WebRTC. До абонента голос уходит уже с шлюза.

Гарнитура

Шлюз не подключён.

    Как поднимают шлюз

    1. Поставьте flyctl и войдите в аккаунт. В gateway/.env оставьте имя приложения и регион ams или fra.
    2. fly apps create zadarma-gateway, затем fly ips allocate-v4 -a zadarma-gateway. Адрес из fly ips list запишите в PUBLIC_IP. Общий IPv4 Fly для голоса не подходит.
    3. A-записи phone.syntiora.com и turn.syntiora.com должны смотреть на выделенный адрес из fly ips list, сейчас это 137.66.25.238. В кабинете Zadarma возьмите логин вида 1234-100 и его пароль. Ограничение по IP поставьте на этот адрес или снимите. Софтфон на этом номере выключите.
    4. fly volumes create gateway_data --region ams -s 1 -a zadarma-gateway -y. Регион тома и FLY_REGION должны совпасть.
    5. npm run gateway, затем fly secrets import -a zadarma-gateway < gateway/.env и из корня проекта fly deploy.
    6. Импортируйте gateway/generated/client.json, нажмите «Подключить» и позвоните на 4444. Слышите себя — путь живой. Машина одна: UDP на Fly не балансируется.

    Пока сервера нет, в приложении Zadarma поставьте транспорт TLS и порт 5061. В чужом софтфоне к TLS добавьте SRTP. Так Zadarma сама обходит блокировку SIP. Голос при этом всё ещё UDP, поэтому при деградации UDP нужен шлюз, а не ещё один VPN.

    Запасной путь: ключи API

    Callback оставляет голос на обычных телефонных линиях Zadarma. Он годится, когда гарнитуру поднять нельзя и ваш номер принимает входящий международный вызов. Ключ и секрет: Настройки → Интеграции и API. Секрет остаётся в data/config.json на этой машине.