Разбираю, как в домашних условиях поднять мини-аналоговую телефонную сеть, эмулировать поведение старых АТС, поиграться с тоновой сигнализацией и понять, как вообще работал классический фрикинг на уровне электрических сигналов. Много схем, железа, немного боли, эксперименты с 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 Гц и думаешь — вот так и рождалась ранняя телеком-безопасность.
Если вам интересно ковыряться в железе, анализировать сигналы и понимать архитектурные ошибки прошлого — попробуйте собрать такой стенд. Это не про взлом, это про исследование.
И честно — после этого начинаешь совсем иначе смотреть на современные системы связи.