Вы купили Raspberry Pi, хотите подключить к ней SIP-телефоны или привязать внешнего провайдера, но не знаете, как всё это собрать воедино. Задача вполне реальная: на одном маленьком компьютере можно поднять полноценную АТС и заставить её регистрировать телефоны по SIP. Ниже — тот путь, который я прошёл сам и который объясняю клиентам. Без воды, с конкретными командами и типичными граблями.
- Что мы вообще собираем
- Железо и подготовка
- Установка базовой системы
- Установка Asterisk
- Установка FreePBX
- Настройка SIP-экстеншена в FreePBX
- Настройка SIP-транка к провайдеру
- Маршрутизация звонков
- Настройка телефона для регистрации
- Брандмауэр и NAT
- Сравнение подходов: chan_sip vs chan_pjsip
- Частые ошибки и как их ловить
- Что делать в зависимости от вашей ситуации
- Практические рекомендации
- Итог
Что мы вообще собираем
Сначала определимся в терминах, чтобы не путаться дальше.
- Asterisk — это ядро АТС, программа, которая маршрутизирует звонки, обрабатывает регистрации, держит диалплан.
- FreePBX — веб-интерфейс поверх Asterisk, который позволяет настраивать всё через браузер, а не править конфиги вручную.
- SIP-регистрация — это процесс, при котором телефон (или другой клиент) говорит серверу: «Я здесь, мой адрес такой-то, принимай звонки сюда».
Итого схема такая: Raspberry Pi → на него ставится ОС → Asterisk + FreePBX → в FreePBX создаём SIP-транки и экстеншены → телефоны регистрируются на эту конструкцию.
Железо и подготовка
Я пробовал на Pi 3B+, Pi 4 и Pi 5. На третьей модели работает, но при нескольких одновременных звонках уже начинает задыхаться. Для чего-то серьёзного — только Pi 4 с 4 ГБ оперативки или Pi 5.
Что понадобится:
- Raspberry Pi 4/5 с 4+ ГБ RAM
- Карта памяти минимум 32 ГБ (лучше 64 ГБ, и не Class 10 — возьмите A2, скорость записи имеет значение)
- Блок питания с запасом — Pi 4 тянет до 3 А, слабый блок даёт просадки и телефоны отваливаются от регистрации
- Ethernet-кабель — Wi-Fi не зло, но для голоса по возможности только провод
ОС — я использую Raspberry Pi OS Lite (64-bit, без рабочего стола). Графике тут делать нечего, ресурсы лучше отдать под АТС.
Установка базовой системы
После первого загрузки — стандартные шаги, которые все делают, но я напомню ключевые моменты, влияющие на SIP.
- Обновление системы:
sudo apt update && sudo apt upgrade -y
- Статический IP. Это критично. Если IP будет меняться — телефоны потеряют сервер регистрации и начнут отваливаться. Задаём через dhcpcd:
sudo nano /etc/dhcpcd.conf
Добавляем (подставляйте свои значения):
interface eth0 static ip_address=192.168.1.100/24 static routers=192.168.1.1 static domain_name_servers=192.168.1.1
- Отключаем то, что мешает. На Raspberry Pi может быть встроен сервис, который резервирует порты или конфликтует с сетевыми настройками. Проверьте, что нет лишних SIP-демонов и что порт 5060 свободен:
sudo lsof -i :5060Установка Asterisk
Тут два пути: собрать из исходников или взять из репозитория. Я рекомендую репозиторий для начала — меньше боли с зависимостями.
sudo apt install asterisk -yПосле установки проверяем:
sudo asterisk -rvvvЕсли видим версию и консоль — Asterisk жив. Выходим командой
exit.Добавляем автозапуск:
sudo systemctl enable asterisk sudo systemctl start asteriskУстановка FreePBX
FreePBX ставится поверх Asterisk скриптом. Порядок такой:
- Устанавливаем веб-сервер и PHP:
sudo apt install apache2 libapache2-mod-php php php-mysql php-curl php-cli php-mbstring php-xml php-bcmath php-zip php-gd php-sqlite3 -y
- Устанавливаем MariaDB (вместо MySQL):
sudo apt install mariadb-server mariadb-client -y sudo mysql_secure_installationВ процессе задаём root-пароль и отвечаем «Y» на все вопросы безопасности.
- Скачиваем и запускаем установщик FreePBX:
cd /tmp wget http://mirror.freepbx.org/modules/packages/freepbx/freepbx-16.0-latest.tgz tar xzf freepbx-16.0-latest.tgz cd freepbx sudo ./start_asterisk start sudo ./install -nФлаг
-nозначает «не спрашивать пароль базы, использовать стандартный». Если ставили MariaDB с другим паролем — уберите-nи введите его.После установки открываем в браузере
http://192.168.1.100и видим мастер первоначальной настройки FreePBX. Задаём логин/пароль администратора, настраиваем почту для уведомлений (по желанию) и дожидаемся применения всех конфигов.Настройка SIP-экстеншена в FreePBX
Теперь самое интересное — создаём внутренний номер, на который сможет зарегистрироваться телефон.
- В веб-интерфейсе: Applications → Extensions → Add Extension → SIP.
- Заполняем:
- Extension Number: 1001 (ваш внутренний номер)
- Display Name: Офисный телефон
- Secret: пароль для регистрации — минимум 16 символов, смешанные буквы, цифры, спецсимволы. Не используйте «1234» или «password» — бот-сканеры атакуют SIP-порт каждую минуту.
- На вкладке Advanced проверяем:
- NAT: yes (если телефон за NAT, а он почти всегда за NAT)
- Transport: UDP (для начала, потом можно добавить TLS)
- DTMF Mode: rfc4733
- Нажимаем Submit → красная кнопка Apply Config вверху страницы.
Настройка SIP-транка к провайдеру
Если нужно принимать звонки извне или звонить на городские номера, настраиваем транк. У каждого провайдера свои параметры, но общая структура такая:
- Connectivity → Trunks → Add SIP (chan_pjsip) Trunk
- Вкладка General:
- Trunk Name: название провайдера
- Outbound CallerID: ваш номер
- Maximum Channels: сколько одновременных линий
- Вкладка Outgoing — Peer Details:
type=peer host=sip.provider.com port=5060 context=from-trunk transport=udp dtmf=rfc4733 insecure=port,invite qualify=yesВ поле
host— адрес вашего SIP-провайдера. Всё остальное — типичный набор, который работает у большинства провайдеров в РФ и СНГ.
- Вкладка Incoming — USER Context и USER Details заполняются по аналогии, но если провайдер присылает регистрацию на ваш сервер, то в USER Details указываем логин и пароль от провайдера.
Если провайдер работает по модели «мы звоним на ваш IP» (без регистрации с вашей стороны), то вкладку Incoming можно оставить пустой, а маршрутизацию настраивать через входящий маршрут с любым DID.
Маршрутизация звонков
Без маршрутов FreePBX не знает, что делать с вызовами. Настраиваем:
- Connectivity → Inbound Routes — входящие: какой DID → на какой экстеншен или ринг-группу.
- Connectivity → Outbound Routes — исходящие: какие номера через какой транк отправлять.
Для простого теста: создайте исходящий маршрут, который все вызовы отправляет через ваш транк, и попробуйте позвонить на любой мобильный номер.
Настройка телефона для регистрации
Возьмём любой SIP-клиент: аппаратный телефон (Grandstream, Yealink), софтфон на ПК (MicroSIP, Zoiper) или приложение на смартфоне (Linphone, Zoiper).
Параметры регистрации везде одинаковые:
- Server / Domain: 192.168.1.100 (IP вашего Raspberry Pi)
- Username: 1001 (номер экстеншена)
- Password: тот самый Secret, который задали в FreePBX
- Transport: UDP
- Port: 5060
Если всё настроено верно, через 10–20 секунд телефон покажет статус «Registered». Если нет — читаем раздел про ошибки.
Брандмауэр и NAT
Это то, на чём спотыкается 80% новичков. Asterisk использует два типа портов:
- Сигнализация (SIP): UDP 5060 — телефон говорит «я хочу зарегистрироваться»
- Медиа (RTP): UDP 10000–20000 — сам голос, который идёт отдельным потоком
Если порт RTP не открыт — регистрация будет, а звука не будет. Или будет в одну сторону.
На Raspberry Pi настраиваем iptables:
sudo iptables -A INPUT -p udp --dport 5060 -j ACCEPT
sudo iptables -A INPUT -p udp --dport 10000:20000 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 5060 -j ACCEPT
sudo apt install iptables-persistent -y
sudo netfilter-persistent save
Если ваш Raspberry Pi стоит за роутером — пробросьте эти порты на его IP в настройках роутера. И не забудьте про статический IP на Pi, о котором я говорил выше.
В FreePBX тоже нужно указать NAT-настройки: Settings → Asterisk SIP Settings. В секции External Address указывайте внешний IP роутера, а в Local Networks — вашу локальную подсеть (например, 192.168.1.0/255.255.255.0).
Сравнение подходов: chan_sip vs chan_pjsip
Asterisk поддерживает два SIP-драйвера. Это важно понимать, потому что от выбора зависит конфигурация.
| Параметр | chan_sip | chan_pjsip |
|---|---|---|
| Статус разработки | Устаревает, поддержка ограничена | Активно развивается, рекомендуется |
| Производительность | Ниже | Выше, лучше масштабируется |
| Поддержка кодеков | Базовая | Широкая, включая Opus |
| TLS/SRTP | Ограниченно | Полная поддержка |
| Совместимость | Максимальная | Высокая, но старые устройства могут капризничать |
| Рекомендация | Только если pjsip не работает | Выбирайте по умолчанию |
FreePBX 16+ по умолчанию использует pjsip. Если у вас старый телефон, который не регистрируется на pjsip — можно включить модуль chan_sip через Admin → Modules и переключить транк.
Частые ошибки и как их ловить
Вот реальный список проблем, с которыми я сталкивался и которые вижу у клиентов регулярно:
- «Телефон не регистрируется» — в 90% случаев это неправильный пароль или закрытый порт 5060. Проверьте:
sudo asterisk -rx "pjsip show endpoints"— увидите статус всех эндпоинтов. - «Регистрация есть, но звука нет» — не открыты порты RTP (10000–20000) или не настроен NAT в Asterisk. Проверьте:
sudo asterisk -rx "rtp set debug on"и смотрите, приходят ли пакеты. - «Звонок идёт 2 секунды и обрывается» — обычно это таймаут NAT. В настройках транка добавьте
nat=yesиqualify=yes. - «FreePBX не загружается» — не хватило памяти на Pi. Проверьте свободную память:
free -h. Если swap почти забит — уменьшите веб-интерфейс или переходите на Pi 4/5. - «Двойная регистрация или конфликт» — два телефона с одним экстеншеном. FreePBX это не запрещает, но звонок придёт на оба. Если нужно одно устройство — используйте разные номера.
Что делать в зависимости от вашей ситуации
У вас домашний офис, 2–3 телефона, один провайдер: ставьте FreePBX 16 с chan_pjsip, создайте 2–3 экстеншена, один транк к провайдеру. Не заморачивайтесь с TLS — в локальной сети это избыточно. Откройте порты на роутере и пользуйтесь.
У вас малый офис, 10–20 сотрудников: обязательно Pi 4 с 4 ГБ или Pi 5. Настройте ринг-группы, IVR (голосовое меню), очереди вызовов. Отдельно настройте fail2ban — он уже встроен в FreePBX, включите его в Admin → System Admin → Intrusion Detection. Без этого через неделю начнутся атаки перебором паролей.
Хотите шифрование (TLS/SRTP): вам понадобится сертификат. Можно использовать Let's Encrypt через встроенный модуль FreePBX. Учтите: все телефоны тоже должны поддерживать TLS. Не все дешёвые модели это умеют.
Нужна отказоустойчивость: на Raspberry Pi это сложно. Я бы не стал строить критичную телефонию на одной плате. Максимум — держать второй Pi с синхронизацией конфигов и быстро поднимать в случае падения.
Практические рекомендации
- Пароли. Минимум 16 символов для каждого экстеншена. FreePBX умеет генерировать — используйте эту кнопку.
- Обновления. Регулярно обновляйте модули через Admin → Module Admin. Обновления безопасности выходят часто.
- Бэкапы. Настройте резервное копирование в Admin → Backup & Restore. Хотя бы раз в неделю. При обновлении FreePBX — обязательно бэкап перед обновлением.
- Мониторинг. Подключите хотя бы базовый мониторинг через команду
sudo asterisk -rx "core show channels"— покажет активные вызовы. Для продвинутого — настройте Zabbix или Prometheus с экспортером метрик Asterisk. - Логи. Если что-то не работает — смотрите
/var/log/asterisk/full. Там всё написано, нужно только уметь читать.
Итог
Настройка SIP-регистрации на Raspberry Pi с Asterisk и FreePBX — задача полностью реальная и хорошо документированная. Ключевые моменты: статический IP, правильный NAT, открытые порты RTP, надёжные пароли и актуальная версия FreePBX с chan_pjsip.
Если начинаете с нуля — возьмите Pi 4 с 4 ГБ, поставьте Raspberry Pi OS Lite, Asterisk из репозитория и FreePBX скриптом. Создайте один экстеншен, подключите один телефон, добейтесь регистрации. Потом добавляйте транк к провайдеру и стройте дальше. Не пытайтесь настроить всё сразу — идите от простого к сложному, и всё заработает.
