# SIP

## Phonebook

* `0` — КАРРАМБА! СВИСТАТЬ ВСЕХ НАВЕРХ!
* `100` — [Open Space](/doc/open-space-lzUNE3L3Bd)
* `101` — WC
* `102` — [Кухня](/doc/kuhnya-AxZAVB1ftt)
* `103` — [Хардварошная](/doc/hardvaroshnaya-FBt5kjfAyp)
* `104` — Резидентская комната

## SIP на Android

При всём богатстве выбора, [Linphone](https://play.google.com/store/apps/details?id=org.linphone) — самая достойная опция. По состоянию на осень 2025 Android давно закопал встроенный SIP, поэтому если попробовтаь другие софтфоны, оказывается,

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

* :red_circle: X-Lite — увы, gone, “[*X-Lite is now Bria Solo*](https://www.counterpath.com/x-lite/)”
* **🔴** 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](https://www.mizu-voip.com/Company/Aboutus.aspx) — увы, *очень* конфигурируем, но звонок с конфигом “по-умолчанию” сразу ловит `BYE`
* **🔴** Zoiper — кодеки и ZRTP за **💵**, но, увы, `Registration failed (DNS Timeout (503))` (?!)
* :large_yellow_circle: Sipdroid — “Works”, но старые кодеки, нет автоподстройки громкости (`tel:100` “тихий”), UI доисторический, “сброс” звонка в UI не работает **🤣**
* **🟡** Sipnetic — “Works”, QR=data, ZRTP=**💵**, SIP URI :ok_hand:, :warning: использует `8.8.8.8` вместо системного DNS, :warning: за ночь с настройками “по-умолчанию” съел батарейку в 0%, да ещё и очень назойливо требует permissions
* :large_green_circle: Linphone — “Works”, QR=URL, FOSS
* **⚠️** 3CX Phone — ONLY QR-code provisioning
* **⚠️** [Telphin](https://www.telphin.ru/products/virtual-atc/softfone) — ONLY QR-code provisioning


++++++++
## iOS & macOS

[Linphone](https://apps.apple.com/us/app/linphone/id360065638). For macOS you may also consider [Telephone](https://apps.apple.com/us/app/telephone/id406825478) for its quick debugging capabilities.

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


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

   
   1. Идём в [Teleport](https://t.bksp.in/);
   2. [Через Teleport](https://t.bksp.in/web/cluster/bksp/resources?search=phonebooth) или 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](https://www.linphone.org/en/download/#linphoneapp);
   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. :gear: Settings **🔽**

      
      1. Calls **🔽** Enable Video — 🚫
      2. Contacts 🔽 Subscribe to presence info — 🚫
      3. User interface 🔽 Automatically open dialpad — :white_check_mark:
      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](https://uxie.int.bksp.in/ui/wireguard/general#configbuilder)
3. WireGuard даст IP-связность без NAT, добавляем в `2sp4ce`:

   
    1. **Endpoint**: `lanskoe.loc.bksp.in:44392`;
    2. **Name**: `{username}-{device}`, {username} пусть совпадает с *Username* в [Свинке](https://swynca.bksp.in/);
    3. Смотрим уже выделенные адреса в `2sp4ce` в [VPN / WireGuard / Peers](https://10.0.2.1/ui/wireguard/general#peers) для устройства `2sp4ce`
    4. **Address**: выбираем свободный из подсети `10.91.66.128/25` (`end2sp4ce` в [Networking](/doc/90e0c665-4226-4ea5-9b93-073643e66e39)),  
       например `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]** :bangbang:
4. WireGuard — на телефон:

   
   1. Устанавливаем [WireGuard](https://www.wireguard.com/install/);
   2. Сканируем QR-код из интерфейса OPNsense в приложении, добавляем тоннель `2sp4ce`, тоннель можно держать включенным всегда
5. Учётную запись SIP — в Asterisk:

   
   1. Идём в [Teleport](https://t.bksp.in/);
   2. [Через Teleport](https://t.bksp.in/web/cluster/bksp/resources?search=phonebooth) или ssh идём на `phonebooth.int.bksp.in`;
   3. В `~/deployments/asterisk/conf/pjsip.conf` добавляем номер телефона по образу и подобию тех, что с секцией `(client)`;;
   4. `cd ~/deployments/asterisk/ && docker compose restart`
6. Настраиваем софтфон:

   
   1. Устанавливаем [Linphone](https://www.linphone.org/en/download/#linphoneapp);
   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. :gear: Settings **🔽**

      
      1. Calls **🔽** Enable Video — 🚫
      2. Contacts 🔽 Subscribe to presence info — 🚫
      3. User interface 🔽 Automatically open dialpad — :white_check_mark:
      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!](https://youtu.be/xrIjfIjssLE?si=qHaeoHTnonJzVrn5&t=205)

   [https://www.youtube.com/watch?v=Ue8qDY-4-ZA](https://www.youtube.com/watch?v=Ue8qDY-4-ZA)



## Creating a SIP account


:::warning
**This section is experimental and is subject to change.**

:::

Log-in to `phonebooth` instance using either [Teleport CLI or Teleport Web](/doc/teleport-xqDhiH6qZc).

```bash
# 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
```

---

**Documents**

- [BKSP 101](https://wiki.bksp.in/s/public/doc/bksp-101-HvrtlzB32F)
- [Проекты](https://wiki.bksp.in/s/public/doc/proekty-yjWZscgTvo)
- [Infrastructure](https://wiki.bksp.in/s/public/doc/infrastructure-VPKsJwVSVh)
- [Пространство](https://wiki.bksp.in/s/public/doc/prostranstvo-UF1eSbQDi5)
- [Equipment](https://wiki.bksp.in/s/public/doc/equipment-t5MYAVJ8l0)
- [Other](https://wiki.bksp.in/s/public/doc/other-uPW1YJQaRt)