CCcam: что это, как работает и как настроить в 2026
Если вы когда-нибудь настраивали спутниковый ресивер и наткнулись на аббревиатуру cccam — вы в правильном месте. Это протокол card sharing, который уже больше десяти лет используется для совместного доступа к зашифрованным телеканалам. Здесь я разберу его техническую архитектуру, конфиги, диагностику и безопасность — без воды и без ссылок на конкретных провайдеров.
Что такое CCcam и как работает протокол card sharing
Card sharing — это схема, при которой одна физическая смарт-карта обслуживает несколько клиентов по сети. Карта вставлена в сервер, клиент посылает ECM-запрос (Entitlement Control Message), сервер расшифровывает его через карту и возвращает клиенту control word. Всё это должно происходить быстро — до 300 мс, иначе картинка начнёт фризить.
Протокол cccam работает поверх TCP, порт по умолчанию — 12000. Handshake начинается с обмена случайными данными (seed), после чего оба узла синхронизируют ключи через DES. Дальше всё общение идёт в зашифрованном виде, хотя сам DES по современным меркам — криптография уровня 1990-х.
История CCcam: от закрытого протокола до де-факто стандарта
CCcam появился где-то в 2006–2007 году. Разработчик — аноним под ником "Fox". Последний официальный релиз — версия 2.3.2 вышла примерно в 2013–2015 году. С тех пор разработка заморожена. Но протокол настолько укоренился в экосистеме спутникового телевидения, что до сих пор является стандартом de facto для peering между серверами.
Почему прижился закрытый бинарь? Потому что в своё время он работал, когда ничего лучше не было. И сейчас большинство провайдеров card sharing гоняют трафик именно по CCcam-протоколу, даже если на серверной стороне у них уже OScam.
Принцип работы: ECM, EMM и control words
Каждый зашифрованный канал DVB использует два ключа — нечётный и чётный CW (control word). Они меняются каждые 10 секунд — именно с этим интервалом и связано большинство проблем с фризами. ECM — это зашифрованный пакет, содержащий новый CW. Без расшифровки (которую делает смарт-карта) вы его не прочитаете.
EMM (Entitlement Management Message) — это обновление прав доступа. Именно через EMM провайдер добавляет или отзывает подписку. Для card sharing важно, чтобы сервер мог получать EMM — это называется AU (Auto Update). Без AU карта постепенно перестаёт работать на некоторых каналах.
Роль DVB-карты, CAM-модуля и ресивера в цепочке
На сервере стоит физическая смарт-карта в ридере (или в CAM-модуле, вставленном в DVB-карту). Карта знает ключи расшифровки — это её главная функция. DVB-карта принимает транспортный поток, извлекает ECM-пакеты и передаёт их на карту. На клиентской стороне ресивер сам ничего не расшифровывает — он просто ждёт CW от сервера и подставляет его в декодер.
Чем CCcam отличается от OScam, MgCamd и NewCamd
OScam — open source, активно разрабатывается, последние коммиты в репозитории датируются 2025–2026 годом. Поддерживает огромное количество протоколов: CCcam, NewCamd, CS378x, gbox, radegast. CCcam же — закрытый бинарь без исходников, и с 2015 года никаких обновлений.
MgCamd — другой клиент, исторически популярный на старых DreamBox-ах. NewCamd — более старый протокол, тоже TCP, но с другим форматом handshake и слабее масштабируется для reshare. На практике сейчас на клиентах всё чаще ставят OScam, а CCcam-протокол используют именно для peering между серверами.
Структура файла CCcam.cfg: разбор всех ключевых директив
Файл конфигурации — сердце всей системы. Неправильная строка в cfg, и вы час будете гадать почему каналы чёрные. Давайте разберём всё по порядку.
Расположение файла на разных прошивках (Enigma2, OpenATV, VTI)
Зависит от образа и версии прошивки. Основные варианты:
/etc/CCcam.cfg— стандартный путь на большинстве сборок Enigma2/usr/keys/CCcam.cfg— OpenATV, VTI и некоторые другие дистрибутивы/var/etc/CCcam.cfg— встречается на старых образах DreamBox
После любого изменения файла нужен перезапуск: /etc/init.d/softcam restart. Без перезапуска изменения не применятся — CCcam читает cfg только при старте.
Директивы C: line, N: line, F: line — назначение каждой
C: line — подключение к удалённому CCcam-серверу. Синтаксис:
C: hostname 12000 username password
Четыре поля: хост (или IP), порт, логин, пароль. Регистр имеет значение — пароль Secret и secret это разные вещи. Пробелы в пароле не поддерживаются.
N: line — подключение через протокол NewCamd. Используется реже, для совместимости со старыми серверами на NewCamd. Синтаксис отличается — там нужен 14-байтный DES-ключ.
F: line — это "fake" карта. Директива говорит CCcam притворяться, что он видит карту с определённым CAID. Используется для peering когда нужно анонсировать другим узлам наличие карты, которой физически нет на этом узле.
SERVER LISTEN PORT, WEBINFO LISTEN PORT и DEBUG уровни
Глобальные параметры в начале файла:
SERVER LISTEN PORT : 12000
WEBINFO LISTEN PORT : 16001
DEBUG : 0
DEBUG от 0 до 5. На уровне 0 логируются только критические события. Уровень 3–4 даёт подробный вывод ECM-запросов с CAID, SID и временем ответа. Уровень 5 — абсолютно всё, включая весь трафик. На слабом железе DEBUG 5 заметно грузит CPU.
Параметры SHARE LIMITS, RESHARE и MAXIMUM HOPS
Hop count — количество узлов между клиентом и физической картой. В логах это видно как цифра после CAID. Нулевой hop — карта на этом же сервере. Единица — прямой пир с картой. Двойка и выше — reshare.
MAXIMUM HOPS : 2
RESHARE : 1
SHARE LIMITS : username 5
RESHARE : 1 означает что ваши клиенты могут передавать карту дальше на один уровень. SHARE LIMITS ограничивает количество одновременных ECM-сессий для конкретного пользователя. Это важно — без лимита один клиент может положить сервер потоком запросов.
Пример минимального рабочего cfg для клиента и сервера
Клиентский конфиг (только подключение к серверу):
SERVER LISTEN PORT : 12000
WEBINFO LISTEN PORT : 16001
DEBUG : 0
MAXIMUM HOPS : 2
C: server.example.com 12000 mylogin mypassword
Серверный конфиг (с локальной картой через последовательный ридер):
SERVER LISTEN PORT : 12000
WEBINFO LISTEN PORT : 16001
DEBUG : 1
MAXIMUM HOPS : 1
RESHARE : 0
SERIAL READER : /dev/ttyS0 CARDTYPE CLOCK TIMEOUT
B: mylogin mypassword 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E
B: line — это запись пользователя на сервере. После логина и пароля идут hex-группы, определяющие доступ к CAID.
Установка и настройка CCcam на Enigma2-ресивере
Работал с разными ресиверами — VU+ Duo, Dreambox DM900, Zgemma H9. Процесс везде похожий, но детали расходятся. Особенно в части путей и прав доступа.
Подготовка ресивера: SSH-доступ, права на /usr/bin
Сначала нужен SSH-доступ. Стандартный порт — 22, логин root. На OpenATV в последних версиях пароль по умолчанию пустой или "dreambox" — зависит от сборки. Проверьте сразу же после первого входа и смените.
На OpenATV файловая система смонтирована в read-only. Прежде чем что-то копировать в /usr/bin:
mount -o remount,rw /
После перезагрузки это сбросится, поэтому либо скрипт в автозагрузку, либо используйте пути вроде /usr/keys/, которые живут на writable разделе.
Загрузка бинарника CCcam (выбор версии под архитектуру MIPS/ARM)
Это критически важный момент, который в большинстве мануалов замалчивают. Архитектуры разные:
- Старые DreamBox (DM800, DM7025) — MIPS, нужен
CCcam.mipsel - VU+ Solo 4K, Zgemma H9, DM900 — ARM Cortex-A, нужен
CCcam.arm - Некоторые бюджетные ресиверы — ARM7, отдельный бинарь
Если запустить бинарь не под ту архитектуру — получите тихий сбой без сообщения об ошибке. Проверить архитектуру: cat /proc/cpuinfo | grep cpu model или uname -m.
По версиям: 2.3.0 vs 2.3.2 — на практике разница минимальная. На некоторых ресиверах 2.3.2 ведёт себя нестабильно, 2.3.0 работает чище. Версии 2.1.x не рекомендую — они плохо понимают современные CAID и у них проблемы с handshake с более новыми пирами.
Установка через ipk-пакет vs ручное копирование
Через ipk проще всего — пакетный менеджер сам разложит файлы и создаст init-скрипт:
opkg install CCcam_2.3.0_mipsel.ipk
Ручное копирование даёт больше контроля:
scp CCcam.mipsel [email protected]:/usr/bin/CCcam
ssh [email protected] "chmod 755 /usr/bin/CCcam"
Init-скрипт при ручной установке нужно создать самому или взять готовый — он обычно идёт вместе с бинарём в архиве.
Запуск через init.d-скрипт и автозагрузка
/etc/init.d/softcam start
/etc/init.d/softcam stop
/etc/init.d/softcam restart
Проверить что запустился:
ps | grep CCcam
Должна быть строка с путём к бинарю. Если нет — смотреть лог:
tail -f /tmp/CCcam.log
Проверка работы через telnet и веб-интерфейс на порту 16001
WebInfo доступен по адресу http://IP_ресивера:16001. Там видны все подключённые пиры, CAID которые они отдают, статус карт и ECM-статистика. Это первое место для диагностики — если в WebInfo пир отображается как OFF, на клиенте каналы будут чёрными.
Дефолтный логин в WebInfo на старых сборках — root/root. Меняйте сразу. Это открытый HTTP без шифрования, любой в сети видит всё.
Настройка собственного CCcam-сервера на Linux
Сервер с реальной смарт-картой на Linux — задача посложнее ресивера. Нужен PC/SC-демон, правильные драйверы ридера и корректная конфигурация порта.
Выбор железа: ARM SBC, x86 mini-PC или VPS
Для сервера с реальной картой нужен физический USB-порт или последовательный порт для ридера. VPS с OpenVZ не даст доступа к /dev — там ридер подключить невозможно. На VPS можно только peering (принять карты от другого сервера и раздавать дальше).
Raspberry Pi 4 — нормальный вариант: ARM64, 4GB RAM, есть USB для ридера, потребление 5W. Orange Pi или NanoPi работают аналогично. Для x86 подойдёт любой mini-PC типа Intel NUC.
PC/SC-демон и драйверы для ридеров (phoenix, smartreader+)
apt install pcscd pcsc-tools libpcsclite-dev
systemctl enable pcscd
systemctl start pcscd
Проверить что карта читается:
pcsc_scan
Если карта вставлена в ридер и pcsc_scan её видит — половина работы сделана. Phoenix-ридер через USB обычно определяется автоматически. Smartreader+ требует специфичных драйверов — проверьте lsusb и сравните ID с документацией.
Важный нюанс: карты Conax и Viaccess требуют специфичных параметров SERIAL READER в cfg — скорость порта (стандарт Phoenix — 357 kbps, ISO 7816 — 9600 бод), тип часового сигнала. Irdeto проще в этом плане. Без правильных параметров карта будет "видна" pcscd но CCcam её не поймёт.
Конфигурация смарт-карты в CCcam.cfg (SERIAL READER)
SERIAL READER : /dev/ttyUSB0 PHOENIX CLOCK TIMEOUT 300
SERIAL READER : /dev/ttyUSB0 SMARTREADER CLOCK TIMEOUT 300
Для USB-ридеров путь обычно /dev/ttyUSB0. Для встроенных последовательных портов — /dev/ttyS0. Проверить что устройство есть: ls -la /dev/ttyUSB*.
Открытие порта 12000 в iptables и firewall
iptables -A INPUT -p tcp --dport 12000 -j ACCEPT
iptables -A INPUT -p tcp --dport 16001 -j ACCEPT
iptables-save > /etc/iptables/rules.v4
Если используете ufw:
ufw allow 12000/tcp
ufw allow 16001/tcp
При работе за NAT нужен port forwarding 12000 с внешнего IP роутера на IP сервера. И в cfg пиры должны видеть именно внешний IP — иначе handshake пройдёт, но карты не откроются.
Мониторинг: журнал, watchdog, автоперезапуск через systemd
Systemd unit-файл для автозапуска и мониторинга:
[Unit]
Description=CCcam Card Sharing Server
After=network.target pcscd.service
[Service]
Type=forking
ExecStart=/usr/bin/CCcam
Restart=always
RestartSec=10
User=root
[Install]
WantedBy=multi-user.target
Restart=always + RestartSec=10 — если CCcam упал, через 10 секунд поднимется сам. Это не заменяет нормальный мониторинг, но от случайных крашей спасает.
Диагностика проблем CCcam: что делать когда не работает
Большинство проблем с cccam укладываются в несколько типовых сценариев. Разберём каждый с конкретными командами.
Каналы чёрные: проверка ECM-ответа и control word
Первый шаг — смотреть лог с DEBUG уровнем минимум 3:
tail -f /tmp/CCcam.log | grep -i "ecm\|cw\|error"
Строка нормального ответа выглядит примерно так:
CW from server peer1.example.com for caid:0100 prov:000000 sid:1234 in 187ms
Здесь: caid — идентификатор системы условного доступа, prov — провайдер, sid — ID канала, 187ms — ECM time. Если этой строки нет совсем — сервер не отвечает на ECM. Если есть но каналы чёрные — возможно несоответствие ключей на ресивере.
"no providers" в логе означает: handshake с сервером прошёл успешно, но сервер не анонсировал ни одного CAID. Это либо пустая карта, либо проблема с правами доступа (B: line на сервере не даёт этому пользователю нужные CAID).
"CW not found" — сервер получил ECM-запрос, но не нашёл карту которая его может расшифровать. Канал просто не поддерживается этой картой или провайдером.
Freeze каждые 10 секунд — проблема ECM time или AU
10 секунд — это точно интервал смены control word у провайдера. Если именно через 10 секунд картинка моргает — ECM-обновление либо приходит с опозданием, либо вообще не приходит вовремя.
Что проверить:
- ECM time в логах — должен быть ниже 300ms. Выше 500ms — уже будут проблемы
- Пинг до сервера — если больше 150ms, суммарное время может превысить норму
- AU (auto-update) на сервере — без него карта не получает обновлённые ключи EMM
- Hop count — при hop=3 и больше добавляется задержка на каждом узле
Сервер виден как OFF в WebInfo — сетевые и handshake ошибки
netstat -an | grep 12000
Должны видеть ESTABLISHED соединение. Если нет — либо порт не открыт, либо сервер недоступен. Проверка с клиентской стороны:
telnet server.example.com 12000
Если telnet не подключается — проблема на уровне сети или файрвола. Если подключается но CCcam всё равно показывает OFF — проблема handshake: неправильный логин/пароль или версии протокола несовместимы.
Высокий ECM time (>500ms) — оптимизация маршрута
Можно посмотреть подробно через tcpdump:
tcpdump -i eth0 -n port 12000 -v
Это покажет все пакеты на 12000 порту с временными метками. Видно когда ушёл запрос и когда пришёл ответ.
Оптимизация: выбирать серверы с меньшим пингом, минимизировать hops, убедиться что на сервере нет перегрузки (SHARE LIMITS настроены).
Анализ логов: уровни DEBUG 0-5 и что искать в выводе
Включить подробный лог на время диагностики в CCcam.cfg:
DEBUG : 4
Перезапустить и смотреть:
tail -f /tmp/CCcam.log
При DEBUG 4 в логе видны: все C: line подключения с результатом, каждый ECM-запрос и ответ, CAID-списки от пиров, ошибки handshake. После диагностики верните DEBUG : 0 — иначе лог за день разрастётся до нескольких гигабайт.
CCcam vs OScam: когда что выбирать
Это реальный вопрос без очевидного ответа — зависит от задачи.
Преимущества CCcam: простота peering, лёгкая cfg
CCcam cfg проще читать и редактировать. C: line — одна строка, всё понятно. Для быстрого поднятия клиента на ресивере — это всё ещё быстрее чем разбираться с oscam.server и oscam.conf.
На старых ресиверах с 128MB RAM CCcam потребляет меньше памяти. OScam с многочисленными протоколами и потоками может не влезть. Хотя при большом списке C: line (50+) CCcam тоже начинает жаловаться на нехватку памяти.
Преимущества OScam: open source, больше протоколов, лучше с DVB
OScam поддерживает: CCcam, NewCamd, CS378x, gbox, radegast, camd35, mpcs. CCcam понимает только свой протокол (и в ограниченной мере NewCamd через N: line). Для сервера с реальной картой OScam почти всегда лучший выбор.
Последнее обновление CCcam — примерно 2015 год. OScam получает коммиты регулярно. Новые CAID, новые ридеры, новые алгоритмы — всё это идёт в OScam, не в CCcam.
Совместимость: OScam как клиент к CCcam-серверу
Это распространённая схема. OScam поддерживает CCcam-протокол как клиент — в oscam.server прописывается:
[reader]
label = mypeer
protocol = cccam
device = server.example.com,12000
user = mylogin
password = mypassword
cccversion = 2.3.0
cccmaxhops = 2
Обратное работает хуже — CCcam не умеет подключаться к OScam-серверу через OScam-специфичные протоколы. Только если OScam настроен как CCcam-сервер.
Производительность и потребление ресурсов на слабом железе
| Параметр | CCcam 2.3.2 | OScam |
|---|---|---|
| Протоколы | CCcam, NewCamd | CCcam, NewCamd, CS378x, gbox, radegast |
| Open Source | Нет | Да |
| Последнее обновление | ~2015 | Активно |
| RAM при idle | ~4–8 MB | ~10–20 MB |
| Поддержка DVB-карт | Ограниченная | Широкая |
| Веб-интерфейс | Порт 16001, базовый | Порт 8888, развитый |
Безопасность и приватность при работе с CCcam
Это раздел который большинство пропускает. А зря — открытый сервер на 12000 порту живёт в интернете примерно 20 минут до первого сканирования.
Шифрование трафика: встроенный DES vs туннелирование через VPN/SSH
DES в CCcam — это 56-битный ключ. По современным меркам это декоративное шифрование, не реальная защита. Брутфорс 56-битного DES — это задача для FPGA за несколько часов.
Решение: туннелировать через WireGuard или stunnel. WireGuard проще настроить на Linux-сервере, он быстрый и добавляет минимальную задержку. stunnel — если хочется TLS без VPN. Вариант с SSH-туннелем:
ssh -L 12000:localhost:12000 [email protected]
Тогда в cfg на клиенте прописываете C: localhost 12000 login pass — весь трафик идёт через зашифрованный SSH.
Защита WebInfo: смена дефолтного пароля и порта
В CCcam.cfg для WebInfo:
WEBINFO LISTEN PORT : 16001
WEBINFO USERNAME : admin
WEBINFO PASSWORD : YourStrongPassword123
На старых сборках (до 2.2.x) дефолты — root/root. На некоторых сборках WebInfo вообще без аутентификации. Проверьте что у вас — просто откройте браузер на http://IP:16001 без логина.
Смените порт с дефолтного 16001 на что-нибудь нестандартное — сканеры ищут именно 16001.
Ограничение источников через ALLOW и DENY
В CCcam.cfg можно явно указать какие IP могут подключаться:
ALLOW : 192.168.1.0/24
ALLOW : 10.0.0.5
DENY : 0.0.0.0/0
Сначала обрабатываются ALLOW правила, потом DENY. Если IP не попал ни в одно ALLOW — подключение отклоняется. CIDR-нотация работает — можно разрешать целые подсети.
Риски открытия порта 12000 в интернет
Если сервер смотрит наружу, добавьте fail2ban. Пример конфига для /etc/fail2ban/jail.local:
[cccam]
enabled = true
port = 12000
filter = cccam
logpath = /tmp/CCcam.log
maxretry = 5
bantime = 3600
findtime = 600
Нужно ещё создать filter для cccam в /etc/fail2ban/filter.d/cccam.conf — паттерн для неудачных авторизаций зависит от вашего уровня DEBUG и формата лога.
Самый надёжный вариант — не открывать 12000 в публичный интернет вообще. Только через VPN-туннель между доверенными узлами.
Частые вопросы
Какой порт по умолчанию использует CCcam?
12000/TCP — для основного протокола обмена ECM-запросами. 16001/TCP — для WebInfo (веб-интерфейс мониторинга). Оба порта меняются в CCcam.cfg через директивы SERVER LISTEN PORT и WEBINFO LISTEN PORT. Рекомендую менять хотя бы WebInfo-порт — стандартный 16001 активно сканируется.
Где находится файл CCcam.cfg на Enigma2?
Зависит от прошивки. Три основных варианта: /etc/CCcam.cfg, /usr/keys/CCcam.cfg или /var/etc/CCcam.cfg. На OpenATV чаще /usr/keys/. После правки обязательно перезапуск: /etc/init.d/softcam restart. Без перезапуска изменения не применяются — CCcam читает конфиг только при старте.
Чем CCcam отличается от OScam?
CCcam — закрытый бинарник без исходников, последнее обновление около 2015 года. OScam — open source, активно разрабатывается. OScam поддерживает значительно больше протоколов: NewCamd, CS378x, gbox, radegast, плюс CCcam для peering. На слабом железе CCcam чуть легче по RAM. Для серверов с реальными картами почти всегда лучше OScam.
Что означает hop count в C: line?
Hop — количество узлов между вашим ресивером и физической картой. 0 — карта стоит прямо на этом сервере. 1 — прямой пир, у которого есть карта. 2 и выше — карта получена через reshare. Чем меньше hop, тем стабильнее и быстрее ECM-ответ. При hop=3+ суммарная задержка может превысить норму и начнутся фризы.
Почему каналы фризят каждые 10 секунд при работе через CCcam?
10 секунд — стандартный интервал смены control word у большинства провайдеров. Если именно в этот момент картинка моргает, значит новый CW не успевает прийти вовремя. Причины: высокий ECM time (>300ms), проблемы с AU (auto-update) на стороне сервера, или сервер перегружен. Проверьте ECM time в логах при DEBUG 3-4.
Можно ли использовать OScam как клиент к CCcam-серверу?
Да, OScam полностью поддерживает CCcam-протокол на клиентской стороне. В oscam.server прописывается protocol = cccam, далее host, port, user, password. Это рабочая и распространённая схема — OScam-клиент на ресивере подключается к CCcam-серверу без каких-либо проблем совместимости.
Что такое ECM time и какое значение считается нормальным?
ECM time — время от отправки запроса на расшифровку до получения control word. До 300ms — нормально. 300–500ms — приемлемо, небольших проблем обычно нет. Выше 500ms — начинаются заметные фризы, особенно если провайдер меняет ключи каждые 10 секунд. ECM time видно в логах при DEBUG 3 в строках вида "CW from server... in Xms".
Безопасно ли открывать порт 12000 наружу?
Нет, без дополнительных мер — небезопасно. Порт 12000 постоянно сканируется ботами в поисках открытых CCcam-серверов. Минимальный набор защиты: смена дефолтного порта, ALLOW с CIDR доверенных IP, fail2ban. Лучшее решение — туннелирование через WireGuard или stunnel, без прямого открытия 12000 в интернет.
Практические советы для стабильного просмотра
Даже самая стабильная линия CCCam или OSCam требует пары простых подготовительных шагов. Обновляйте прошивку ресивера, раз в неделю очищайте ECM‑кеш и держите 15–20% свободного места на USB‑накопителе или во встроенной памяти, чтобы кардридер записывал ключи без задержек.
При настройке антенны оставляйте запас по MER/BER: смещение на два градуса или ослабленный F‑коннектор чаще становится причиной “фризов”, чем сам кардшаринг. Держите под рукой короткий патч‑корд для проверки другого роутера и сохраните два профиля в OSCam — под TCP и под UDP — чтобы мгновенно переключиться, если провайдер начнёт фильтровать протокол.
Utgard.tv следит за каждым хабом 24/7, однако вы можете ускорить диагностику, если будете вести небольшой журнал действий. Записывайте время переключения канала, активный CAID и то, использовали ли вы Wi‑Fi или Ethernet. Такой мини‑отчёт позволит инженерам воспроизвести вашу конфигурацию в лаборатории и предложить решение не за часы, а за минуты.
- Держите активными две линии: если первый сервер уходит на обслуживание, второй тут же подхватывает поток без повторного ввода логина.
- Раз в месяц делайте замер скорости и задержек. Стабильных 1–2 Мбит/с при пинге до 80 мс достаточно для SD/HD, но если джиттер превышает 20 мс — переведите роутер на провод.
- Сохраните в закладки страницу статуса Utgard.tv и Telegram‑бота @utgard_tv_bot — там появляются уведомления о работах раньше, чем успеют среагировать SEMrush или внешние мониторы.