Разбираю, как в домашних условиях поднять мини-аналоговую телефонную сеть, эмулировать поведение старых АТС, поиграться с тоновой сигнализацией и понять, как вообще работал классический фрикинг на уровне электрических сигналов. Много схем, железа, немного боли, эксперименты с 2600 Гц и лабораторные атаки в полностью изолированной среде.

Зачем вообще поднимать аналоговую телефонию в 2026 году

Я давно хотел понять одну вещь: как реально работали старые телефонные уязвимости, о которых все слышали, но мало кто воспроизводил. Мы читаем про 2600 Гц, про blue box, про in-band сигнализацию — но что это значит на уровне проводов, напряжений и тонов?

Если честно, сначала это было просто любопытство. Потом стало инженерным челленджем. А потом я понял, что это отличная лаборатория для изучения архитектурных ошибок прошлого.

Вся идея фрикинга строилась на том, что управляющие сигналы передавались в том же канале, что и голос. Представьте себе систему, где команда на маршрутизацию звонка летит тем же аудиосигналом, что и разговор абонентов. Звучит странно? А ведь это работало десятилетиями.

Мне захотелось собрать полностью автономный стенд:

  • две аналоговые трубки

  • мини-АТС

  • возможность генерировать произвольные тоны

  • логирование сигнализации

  • и главное — изоляция от реальной сети

Ни в коем случае нельзя подключать такие эксперименты к живой линии оператора. Это не шутки. Всё должно быть полностью локальным.

И вот тут начинается самое интересное — оказывается, собрать такую сеть дома реально.

Архитектура стенда: железо, напряжения и немного магии

Базовая схема у меня получилась такой:

  • сервер с Linux

  • плата с FXS и FXO портами

  • Asterisk

  • две старые аналоговые трубки

  • аудиоинтерфейс для инжекции сигналов

FXS — это порт, который подаёт питание и эмулирует АТС. FXO — это порт, который ведёт себя как телефонный аппарат.

Напряжение в покое на линии — около 48 В постоянки. При снятии трубки ток увеличивается, станция это фиксирует и понимает, что линия занята. Звонок — это уже переменка около 70–90 В, 20–25 Гц. Первый раз, когда я это увидел на осциллографе, стало немного не по себе.

Внутри всё оказалось довольно изящно. Линия — это по сути токовая петля. Состояние определяется током, а не просто наличием сигнала.

Я использовал Digium-совместимую PCIe плату. Но можно и USB-FXS адаптеры. Главное — чтобы они поддерживались DAHDI.

После установки драйверов конфигурация DAHDI выглядела так:

# /etc/dahdi/system.conf
fxsks=1
fxsks=2
loadzone=us
defaultzone=us

И соответствующий блок в Asterisk:

; /etc/asterisk/chan_dahdi.conf
[channels]
language=ru
context=internal
signalling=fxs_ks
channel => 1
channel => 2

Дальше — стандартный dialplan, но с одной поправкой: мне нужно было иметь возможность перехватывать аудиопоток и анализировать его на уровне частот.

И вот тут я понял, что без генерации и анализа тонов всё это будет просто музейным экспонатом.

Генерация 2600 Гц и эксперименты с сигнализацией

Исторически 2600 Гц использовался как сигнал освобождения транка в некоторых аналоговых сетях. Если его подать в нужный момент, линия переходила в состояние, когда можно было передавать управляющие команды.

В лаборатории я решил воспроизвести это поведение.

Вот простой генератор тона на Python:

# language: Python
import numpy as np
import sounddevice as sd

fs = 44100
duration = 5
frequency = 2600

t = np.linspace(0, duration, int(fs * duration), False)
tone = 0.5 * np.sin(2 * np.pi * frequency * t)

sd.play(tone, fs)
sd.wait()

Я подключил аудиовыход к FXO через согласующий трансформатор. Без трансформатора лезть туда не советую — можно сжечь порт.

Когда тон подавался в определённой фазе соединения, Asterisk фиксировал изменение состояния канала. Конечно, современная цифровая логика не ведётся на такие трюки, но если в конфигурации вручную включить имитацию старого поведения, можно увидеть, как система реагирует.

А вы когда-нибудь слышали чистый 2600 Гц через старую трубку? Это довольно неприятный звук, кстати.

Лабораторный анализ сигналов: спектр, шум и паразитные эффекты

Один из самых интересных моментов — это анализ сигнала не на слух, а математически.

Я написал небольшой спектральный анализатор:

# language: Python
import numpy as np
import matplotlib.pyplot as plt
from scipy.fft import fft

fs = 44100
samples = np.fromfile("capture.raw", dtype=np.int16)
yf = fft(samples)
xf = np.linspace(0, fs/2, len(yf)//2)

plt.plot(xf, np.abs(yf[:len(yf)//2]))
plt.title("Spectrum")
plt.xlabel("Frequency (Hz)")
plt.ylabel("Amplitude")
plt.show()

Когда я начал смотреть реальные записи с линии, выяснилось интересное: идеального сигнала нет. Есть шум, гармоники, искажения. Старые сети были далеко не стерильными.

Это важно. Потому что фрикинг работал не в вакууме, а в реальных условиях с наводками, перекрёстными помехами и деградацией оборудования.

Ещё один сюрприз — дрейф частоты. Если генератор нестабилен, сигнал может уйти на десятки герц. Для некоторых схем это критично.

И вот тут начинаешь понимать, насколько тонко всё было настроено.

Эмуляция старой логики маршрутизации

Чтобы приблизиться к историческому поведению, я написал собственный модуль обработки тонов, который реагировал на последовательности частот.

Небольшой фрагмент на C, который анализирует поток аудиосэмплов:

// language: C
#include <math.h>
#define TARGET_FREQ 2600.0
#define SAMPLE_RATE 8000

int detect_2600(short *buffer, int len) {
    double real = 0.0, imag = 0.0;
    for (int i = 0; i < len; i++) {
        double angle = 2.0 * M_PI * TARGET_FREQ * i / SAMPLE_RATE;
        real += buffer[i] * cos(angle);
        imag -= buffer[i] * sin(angle);
    }
    double magnitude = sqrt(real*real + imag*imag);
    return magnitude > 1000000;
}

Да, это грубая реализация по мотивам Goertzel, но для лаборатории хватает.

Когда модуль фиксировал устойчивое присутствие частоты, он переводил линию в альтернативное состояние маршрутизации.

Это не повторяет старые АТС на 100%, но даёт понимание принципа: управляющий сигнал интерпретируется как команда.

И тут начинаешь задаваться вопросом: сколько современных систем повторяют ту же ошибку — смешивая управляющий и пользовательский трафик?

Что в итоге даёт такой стенд

Во-первых, понимание физического уровня. Мы часто работаем на уровне API и протоколов, забывая, что всё начинается с электричества.

Во-вторых, уважение к эволюции безопасности. SS7, SIP, SIGTRAN — все они появились не просто так.

В-третьих, это просто очень крутой способ провести выходные.

Сидишь ночью, перед тобой осциллограф, старая трубка щёлкает импульсным набором, сервер жужжит, а ты ловишь гармоники 2600 Гц и думаешь — вот так и рождалась ранняя телеком-безопасность.

Если вам интересно ковыряться в железе, анализировать сигналы и понимать архитектурные ошибки прошлого — попробуйте собрать такой стенд. Это не про взлом, это про исследование.

И честно — после этого начинаешь совсем иначе смотреть на современные системы связи.