SIP

Phonebook

SIP на Android

При всём богатстве выбора, Linphone — самая достойная опция. По состоянию на осень 2025 Android давно закопал встроенный SIP, поэтому если попробовтаь другие софтфоны, оказывается,

что… (aka. обзор софтфонов 2025)

  • 🔴 X-Lite — увы, gone, “X-Lite is now Bria Solo

  • 🔴 CSipSimple — увы, “проект CSipSimple был закрыт“, в Google Play его нет

  • 🔴 Bria - VoIP SIP Softphone — увы, vendor-only

  • 🔴 Bria Mobile: VoIP Softphone — увы, “Google Play’s billing system is currently paused in Russia“

  • 🔴 PortSIP Softphone — увы, сломан абсолютно, даже сигнальный трафик не генерирует

  • 🔴 MizuDroid — увы, очень конфигурируем, но звонок с конфигом “по-умолчанию” сразу ловит BYE

  • 🔴 Zoiper — кодеки и ZRTP за 💵, но, увы, Registration failed (DNS Timeout (503)) (?!)

  • 🟡 Sipdroid — “Works”, но старые кодеки, нет автоподстройки громкости (tel:100 “тихий”), UI доисторический, “сброс” звонка в UI не работает 🤣

  • 🟡 Sipnetic — “Works”, QR=data, ZRTP=💵, SIP URI 👌, ⚠️ использует 8.8.8.8 вместо системного DNS, ⚠️ за ночь с настройками “по-умолчанию” съел батарейку в 0%, да ещё и очень назойливо требует permissions

  • 🟢 Linphone — “Works”, QR=URL, FOSS

  • ⚠️ 3CX Phone — ONLY QR-code provisioning

  • ⚠️ Telphin — ONLY QR-code provisioning


iOS & macOS

Linphone. For macOS you may also consider Telephone for its quick debugging capabilities.

Добавляем мобильный софтфон с TLS и SRTP

  1. Добавляем учётную запись SIP — в Asterisk:

    1. Идём в Teleport;

    2. Через Teleport или ssh идём на phonebooth.int.bksp.in;

    3. В ~/deployments/asterisk/conf/pjsip.conf добавляем номер телефона по образу и подобию тех, что с секцией (ext-tls-mandatory-srtp-client);

    4. cd ~/deployments/asterisk/ && docker compose restart

  2. Настраиваем софтфон:

    1. Устанавливаем Linphone;

    2. Permissions:

      1. Pictures & video — ни к чему;

      2. Record audio — “while using the app”, конечно, нужно, никак иначе;

      3. Contacts — без пользы;

      4. Notifications — по вкусу;

    3. “[Use a third party SIP account]” вместо @linphone.org;

    4. “[I understand]”, что так и надо;

    5. Account:

      1. Username: {номер телефона}

      2. Password: ********

      3. ⚠️ Домен: sip.bksp.in

      4. ⚠️Транспорт: TLS — не UDP и не TCP

    6. ⚙️ Settings 🔽

      1. Calls 🔽 Enable Video — 🚫

      2. Contacts 🔽 Subscribe to presence info — 🚫

      3. User interface 🔽 Automatically open dialpad —

      4. Advanced settings 🔽

        1. ⚠️ Calls / Media encryption SRTP, иначе исходящие сломаются

        2. Start when device boots — 🚫

        3. Keep app alive using Service — 🚫

Добавляем мобильный софтфон с WireGuard (без NAT)

  1. Идём в Vaultwarden на https://passwd.bksp.in/ и берём пароль для BKSP Uxie

  2. Идём в OPNsense на uxie.int.bksp.in в VPN / WireGuard / Peer Generator

  3. WireGuard даст IP-связность без NAT, добавляем в 2sp4ce:

    1. Endpoint: lanskoe.loc.bksp.in:44392;

    2. Name: {username}-{device}, {username} пусть совпадает с Username в Свинке;

    3. Смотрим уже выделенные адреса в 2sp4ce в VPN / WireGuard / Peers для устройства 2sp4ce

    4. Address: выбираем свободный из подсети 10.91.66.128/25 (end2sp4ce в Networking),
      например 10.91.66.257/32;

    5. Pre-shared key не забыть сгенерировать;

    6. Allowed IPs: 10.91.66.0/24, 10.0.2.0/23, 10.133.7.0/24 (2sp4ce, Internal, SIPRNET)

    7. Keepalive interval оставляем пустым, чтоб не тратить батарейку

    8. DNS Servers оставляем пустыми

    9. Нажимаем [Store and generate next]

    10. Нажимаем [Apply] ‼️

  4. WireGuard — на телефон:

    1. Устанавливаем WireGuard;

    2. Сканируем QR-код из интерфейса OPNsense в приложении, добавляем тоннель 2sp4ce, тоннель можно держать включенным всегда

  5. Учётную запись SIP — в Asterisk:

    1. Идём в Teleport;

    2. Через Teleport или ssh идём на phonebooth.int.bksp.in;

    3. В ~/deployments/asterisk/conf/pjsip.conf добавляем номер телефона по образу и подобию тех, что с секцией (client);;

    4. cd ~/deployments/asterisk/ && docker compose restart

  6. Настраиваем софтфон:

    1. Устанавливаем Linphone;

    2. Permissions:

      1. Pictures & video — ни к чему;

      2. Record audio — “while using the app”, конечно, нужно, никак иначе;

      3. Contacts — без пользы;

      4. Notifications — по вкусу;

    3. “[Use a third party SIP account]” вместо @linphone.org;

    4. “[I understand]”, что так и надо;

    5. Account:

      1. Username: {номер телефона}

      2. Password: ********

      3. ⚠️ Домен: sip.svc.bksp.in

      4. ⚠️ Транспорт: UDP — не TLS и не TCP

    6. ⚙️ Settings 🔽

      1. Calls 🔽 Enable Video — 🚫

      2. Contacts 🔽 Subscribe to presence info — 🚫

      3. User interface 🔽 Automatically open dialpad —

      4. Advanced settings 🔽

        1. Start when device boots — 🚫

        2. Keep app alive using Service — 🚫

Когда софтфон готов

  1. Для работы sip URL на https://dial.bksp.in/ при клике из Telegram в Android необходимо добавить dial.bksp.in в исключения встроенного в Telegram web-браузера, иначе Linphone будет открываться, но звонок не будет инициироваться, т.к. Telegram передаёт только схему URL’а.

  2. Let’s just make a normal call just to see that the system works... Hello, Mike! — Hello, Joe!


Creating a SIP account

This section is experimental and is subject to change.

Log-in to phonebooth instance using either Teleport CLI or Teleport Web.

# Connect using Teleport CLI
tsh ssh root@phonebooth

# Navigate to PBX directory
cd ~/deployments/asterisk

# Get list of all prefixes already used
./bin/list-prefixes

# Choose an unoccupied prefix. 
# Let's assume that it's 1234.

# Then, determine how you'd connect to PBX:
#  - (client-local) Local insecure (within B4CK network, or Uxie-based VPN).
#  - (client-siprnet) Via SIPRNET Tunnel (Smol).
#  - (client-ext-tls) Via Direct External TLS+SRTP (at sip.bksp.in:5061).

# Create a new prefix.
# ./bin/create-prefix -t <type> -u <user> -n <name> <prefix>
#   -t / --type  Connection type (client-local, client-siprnet, client-ext-tls)
#   -u / --user  Resident name for `pjsip_clients/{user}.conf` filename.
#   -n / --name  Caller ID name to be displayed during calls
#   <prefix>
./bin/create-prefix -t client-ext-tls -u johndoe -n "John Doe" 1234

# Reload PJSIP to apply changes
./bin/pjsip-reload