Server CCcam: настройка сервера кардшаринга с нуля
Если вы читаете это, то, скорее всего, уже разобрались с клиентской частью и теперь хотите поднять server cccam самостоятельно — с локальными картами, контролем над клиентами и без зависимости от чужой инфраструктуры. Правильное решение. Это руководство — исключительно про серверную сторону: от установки бинарника до разбора rc-кодов в логах.
Что такое CCcam сервер и как он работает
CCcam — это бинарный протокол для шаринга ECM и EMM пакетов через TCP. Грубо говоря, сервер принимает зашифрованные ECM-запросы от клиентских ресиверов, отправляет их на смарт-карту, получает Control Word и возвращает его обратно клиенту. Вся магия — в этом цикле, который должен уложиться примерно в 200-400мс, иначе картинка замерзает.
Архитектура протокола CCcam
Поток данных выглядит так: STB → CCcam-клиент (F-line) → CCcam-сервер → ридер → смарт-карта → CW обратно по цепочке. Стандартный порт — 12000, но он меняется через конфиг. Каждое соединение между сервером и клиентом аутентифицируется по хешу SHA1 от логина и пароля, указанных в F-line.
Ключевое понятие — hop. Это количество промежуточных серверов между картой и конечным клиентом. Сервер с hop=1 значит, что карта физически подключена к нему. Если сервер сам является клиентом вышестоящего сервера, hop увеличивается. Меньше hop — быстрее ECM-ответ.
Роли: сервер, ридер, клиент
Сервер CCcam может выступать в трёх ролях одновременно. Он держит локальные карты через ридеры (серийный или USB), раздаёт их вниз по F-line клиентам и сам подключается вверх по C-line к другому серверу, если нужно расширить пул карт. Это гибкость, которую многие недооценивают — один демон делает всё.
Чем CCcam отличается от OScam и Newcamd
CCcam — закрытый бинарник, последняя версия 2.3.x вышла ещё в 2016. Не развивается, но стабильно работает там, где работает. OScam — open source, активно поддерживается сообществом, поддерживает CCcam-протокол, Newcamd, GBox, Radegast и ещё с десяток. Конфиг OScam сложнее, зато полный контроль над каждым параметром. Newcamd — более старый протокол, до сих пор актуален для некоторых ресиверов, поддерживается в CCcam через N-line.
Мой опыт: для простой домашней раздачи CCcam проще поднять за час. Для серьёзного кластера с мониторингом и гибкой маршрутизацией — OScam выигрывает.
Требования к VPS и операционной системе
Хорошая новость — server cccam не прожорлив. Плохая — требования к сети жёсткие, и тут дешёвый хостинг может убить всё удовольствие.
Минимальные ресурсы сервера
Для 50-100 клиентов хватает 1 vCPU, 512 MB RAM и 5 GB диска. Демон CCcam написан ещё в эпоху, когда RAM стоила дорого — он экономный. Узким местом никогда не станет процессор. Становится карта: обычная смарт-карта обрабатывает 3-5 ECM в секунду, это физический предел. Хотите 200 клиентов — нужны несколько карт или несколько источников.
Поддерживаемые дистрибутивы Linux
Рекомендую Debian 11 или 12 — стабильные, предсказуемые, пакеты не ломают друг друга. Ubuntu 22.04 LTS тоже нормальный вариант. CentOS Stream 9 работает, но rpm-экосистема немного больше усилий при настройке зависимостей. Важный момент: на ядре Linux 6.x некоторые сборки CCcam падают с segfault — проблема в libstdc++. Решение: установить libstdc++6 из репозитория Debian 11 или использовать контейнер на базе Ubuntu 20.04.
Сетевые требования: статический IP, ping, jitter
Статический IP — обязателен, иначе клиенты не смогут прописать вас в C-line. Ping от клиента до сервера должен быть меньше 80мс, идеально — меньше 40мс. Джиттер важнее среднего пинга: нестабильный канал с пиками по 200мс будет давать frozen картинку даже при среднем пинге 30мс.
OpenVZ-виртуализация хуже KVM для шаринга — там shared kernel без изоляции сети, соседи по ноде влияют на задержки. KVM даёт предсказуемую производительность. Если выбираете хостинг — ищите KVM.
Установка CCcam бинарника на Linux
Бинарник CCcam распространяется как единый исполняемый файл под конкретную архитектуру. Для x86_64 VPS нужен соответствующий бинарник.
Загрузка совместимой версии бинарника
Убедитесь что скачиваете версию именно под вашу архитектуру. Проверьте:
uname -m
file CCcam.x86_64
Вывод file должен показать ELF 32-bit или 64-bit LSB executable — в зависимости от бинарника. На 64-битной системе работают оба варианта.
Структура директорий /usr/local/bin и /var/etc
Стандартная раскладка файлов:
mkdir -p /var/etc
cp CCcam.x86_64 /usr/local/bin/CCcam
chmod 755 /usr/local/bin/CCcam
touch /var/etc/CCcam.cfg
touch /var/etc/CCcam.log
Конфиг ищется в /var/etc/CCcam.cfg по умолчанию. Лог пишется в /var/etc/CCcam.log. Некоторые сборки ищут конфиг в /usr/keys/CCcam.cfg или /etc/CCcam.cfg — это прошито в бинарнике, проверьте через strings CCcam | grep cfg.
Создание systemd unit для автозапуска
Большинство гайдов дают только команду запуска. Это неправильно — демон должен перезапускаться автоматически. Создайте /etc/systemd/system/cccam.service:
[Unit]
Description=CCcam Card Sharing Server
After=network.target
Wants=network-online.target
[Service]
Type=simple
ExecStart=/usr/local/bin/CCcam
WorkingDirectory=/var/etc
Restart=always
RestartSec=5
WatchdogSec=60
User=root
StandardOutput=journal
StandardError=journal
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
WatchdogSec=60 — если демон зависает без краша, systemd перезапустит его через 60 секунд. LimitNOFILE=65536 нужен при большом количестве одновременных TCP-соединений.
systemctl daemon-reload
systemctl enable cccam
systemctl start cccam
journalctl -u cccam -f
Права доступа и владелец процесса
CCcam традиционно запускается от root — иначе проблемы с доступом к serial-устройствам. Если хотите запускать от отдельного пользователя, добавьте его в группу dialout: usermod -aG dialout cccam. Файлы в /var/etc/ должны быть доступны этому пользователю на чтение и запись.
Конфигурационный файл CCcam.cfg: разбор директив
Это сердце настройки. Минимальный рабочий конфиг с локальной картой и одним клиентом занимает 10-15 строк. Разберём каждый блок.
Глобальные параметры: SERVER LISTEN PORT, WEBINFO LISTEN PORT
SERVER LISTEN PORT : 12000
WEBINFO LISTEN PORT : 16001
WEBINFO EXTERNAL ACCESS : no
DEBUG : no
LOG FILE : /var/etc/CCcam.log
MAX LOG SIZE : 10
MAX LOG SIZE в мегабайтах — без этого лог разрастается до нескольких гигабайт за неделю. WEBINFO EXTERNAL ACCESS : no — обязательно, об этом подробнее в разделе про firewall.
F-line для входящих клиентов
F-line определяет учётную запись клиента:
F: username password 2 0 0 { 0:0:1 }
Разбор полей: username — логин, password — пароль, 2 — uphops (сколько уровней шаринга клиент может видеть вверх), 0 — downhops (сколько уровней он может раздавать дальше), последний 0 — allow via (0 = с любого IP). Фигурные скобки задают reshare правила: 0:0:1 означает reshare через hop 1 для всех провайдеров.
Если хотите дать клиенту только локальные карты без пересылки дальше: F: client1 pass123 0 0 0 { 0:0:1 }
C-line для подключения к внешним серверам
C: upstream.example.com 12000 myuser mypassword
Так server cccam подключается как клиент к вышестоящему серверу. Если вышестоящий сервер требует RSA-ключ (нестандартное расширение), добавляется пятый параметр. Для работы за NAT добавьте в конфиг:
TCP PACKET DELAY : 2000
KEEPALIVE : yes
N-line и L-line для Newcamd-совместимости
Если у вас клиенты с Newcamd-протоколом (старые ресиверы, Dreambox с mgcamd):
N: hostname port username password deskey { 0:0:1 }
L-line — для входящих Newcamd-клиентов (аналог F-line для newcamd-протокола). Порт Newcamd обычно 10000-10100, задаётся отдельно.
Параметры безопасности: ALLOW TELNETINFO, ENABLE LAN
ALLOW TELNETINFO : no
ENABLE LAN : no
ALLOW FRIENDS CAID : 0
TELNETINFO открывает дополнительный порт диагностики — без него. ENABLE LAN включает broadcast в локальной сети для автообнаружения серверов — если вы не в локалке с другими CCcam-серверами, отключите.
Минимальный рабочий конфиг целиком:
SERVER LISTEN PORT : 12000
WEBINFO LISTEN PORT : 16001
WEBINFO EXTERNAL ACCESS : no
DEBUG : no
LOG FILE : /var/etc/CCcam.log
MAX LOG SIZE : 10
KEEPALIVE : yes
# Локальный ридер (карта вставлена в USB-ридер)
SERIAL READER : /dev/ttyUSB0 Phoenix 3690000
# Клиент с доступом к локальным картам
F: client1 secretpass 0 0 0 { 0:0:1 }
Подключение локальных ридеров и смарт-карт
Без физической карты сервер просто ретранслятор. Если цель — держать собственные карты, нужен USB-ридер.
Смарт-ридеры через USB: Phoenix, Smargo, Omnikey
Три самых распространённых варианта: Phoenix (классика, работает везде), Smargo Smartreader+ (USB HID, не нужны драйверы), Omnikey 3121 (корпоративный, надёжный). На VPS через USB passthrough — только если гипервизор поддерживает проброс USB-устройств. На KVM/QEMU это работает, на OpenVZ — нет.
Проверить что ридер виден в системе:
dmesg | grep ttyUSB
lsusb | grep -i reader
Smargo появляется как /dev/ttyUSB0, Phoenix — аналогично. Omnikey работает через pcsc, для него нужен отдельный конфиг.
Настройка SERIAL READER в CCcam.cfg
SERIAL READER : /dev/ttyUSB0 Phoenix 3690000
SERIAL READER : /dev/ttyUSB1 Smargo 3690000
Третий параметр — скорость в бодах. 3690000 — стандарт для Phoenix при работе с большинством карт. Если карта не инициализируется, попробуйте 9600 — некоторые старые карты работают только на низкой скорости.
Проверка ATR и инициализации карты
После запуска в логе должна появиться строка вида:
smartreader init: ATR = 3B 9F 96 80 1F C7 80 31 A0 73 BE 21 13 67 43 20 07 18 00 00 01 A5
Если вместо этого SmartReader init failed — проблема либо в полярности карты (попробуйте INVERT RST : yes в конфиге), либо карта физически не контактирует с ридером. Если ATR есть но каналы не открываются — карта инициализирована, но не отвечает на ECM. Проверьте срок действия подписки и то, что EMM-обновления доходят до карты.
Распределение SID и провайдеров
В CCcam.cfg можно ограничить какие SID (Service ID) раздаёт конкретный ридер. Полезно когда несколько карт — чтобы не дублировать ECM на обе. Директива DISABLE EMM : yes полностью отключает запись EMM на карту — используйте только если точно знаете зачем.
Открытие портов и настройка firewall
Без правильного firewall server cccam — открытый invitation для bruteforce. Видел конфиги без какой-либо защиты — это плохо заканчивается.
Правила iptables для портов 12000 и 16001
# Разрешить CCcam протокол
iptables -A INPUT -p tcp --dport 12000 -j ACCEPT
# Webinfo — только localhost
iptables -A INPUT -p tcp --dport 16001 -s 127.0.0.1 -j ACCEPT
iptables -A INPUT -p tcp --dport 16001 -j DROP
# Сохранить правила
iptables-save > /etc/iptables/rules.v4
Если хотите whitelist конкретных клиентов на порт 12000 (максимальная безопасность):
iptables -A INPUT -p tcp --dport 12000 -s 1.2.3.4 -j ACCEPT
iptables -A INPUT -p tcp --dport 12000 -j DROP
Защита webinfo от публичного доступа
Webinfo на 16001 показывает всё: список карт, CAID провайдеров, подключённых клиентов. Это не должно быть публично. Если нужен удалённый доступ — SSH-туннель: ssh -L 16001:localhost:16001 user@server, потом открывать http://localhost:16001 локально.
Fail2ban для отражения брутфорса F-line
Создайте /etc/fail2ban/filter.d/cccam.conf:
[Definition]
failregex = .*client: <HOST>.*wrong password.*
.*client: <HOST>.*authentication failed.*
ignoreregex =
И в /etc/fail2ban/jail.local:
[cccam]
enabled = true
filter = cccam
logpath = /var/etc/CCcam.log
maxretry = 5
bantime = 3600
findtime = 600
После 5 неудачных попыток за 10 минут — IP банится на час. Простая мера, но эффективная.
Мониторинг работы сервера и логи
Умение читать лог — половина troubleshooting. CCcam.log говорит много, если знать что искать.
Чтение CCcam.log в реальном времени
tail -f /var/etc/CCcam.log | grep -v 'unrequested'
Фильтр unrequested убирает шум от ненужных ECM-пакетов, которые посылает провайдер — без него лог нечитаем. Что значат основные строки:
ECM: card answered in 143ms (rc=0)— успех, карта ответила за 143мсECM: not decoded (rc=4)— карта не нашла ключ для этого CAID/SIDECM: timeout (rc=5)— карта не ответила вовремя (>3000мс по умолчанию)ECM: cache hit— CW взят из кеша, не гонялся на карту
rc=0 это хорошо. Всё остальное требует внимания.
Webinfo интерфейс: разделы entitlements, providers, clients
Откройте через SSH-туннель http://localhost:16001. Вкладка entitlements показывает что записано на карту — какие каналы активны. providers — список CAID и провайдеров которые видит сервер. clients — кто сейчас подключён, с каких IP, сколько ECM запросов сделали. Если clients пустой — никто не подключён или порт 12000 не слушает.
Команды tail, grep для отлова ECM ошибок
# Только ошибки декодинга
tail -f /var/etc/CCcam.log | grep "not decoded\|timeout\|rc=[^0]"
# Статистика по клиентам за последний час
grep "client" /var/etc/CCcam.log | grep "$(date '+%H:')" | awk '{print $5}' | sort | uniq -c | sort -rn
Troubleshooting типовых проблем
Разберём конкретные ситуации с конкретными решениями.
Клиент подключается но каналы не открываются
Webinfo показывает клиента в списке, но у него 0 декодирований. Диагностика по порядку:
- Проверьте F-line клиента — uphops. Если 0, клиент видит только карты напрямую подключённые к серверу
- Убедитесь что нужный CAID присутствует в разделе providers webinfo
- Проверьте что карта активна — срок подписки, EMM обновления. Карта может инициализироваться (ATR есть), но подписка истекла
- Проверьте SID — если в конфиге прописан фильтр по SID, нужный канал может быть исключён
Frozen картинка и долгие zap-time
Картинка идёт, но при переключении каналов зависает на 3-5 секунд. Причины:
- Высокий ping: проверьте
ping -c 100 server_ipс машины клиента, смотрите max и jitter - Перегруженная карта: в логе ищите rc=5 (timeout). Если карта получает >5 ECM/sec — она не успевает. Решение: добавить вторую карту или ограничить количество клиентов
- Cache exchange: если в сети несколько серверов с одинаковыми картами, настройте CWS чтобы они делились кешем и не дублировали запросы
Постоянные дисконнекты F-line
Клиент коннектится, работает 10-20 минут, потом отваливается и переподключается. Почти всегда — NAT timeout на стороне клиента или промежуточного роутера. NAT-таблица сбрасывает idle TCP-соединения. Решение — включить keepalive:
KEEPALIVE : yes
TCP PACKET DELAY : 2000
Это заставляет сервер слать keepalive пакеты каждые 2 секунды, не давая NAT-таблице сбросить соединение.
Webinfo показывает 0 cards
Сервер запущен, порт слушает, но cards = 0. Первым делом — лог:
grep -i "smartreader\|serial\|init" /var/etc/CCcam.log | head -20
Ищите SmartReader init failed или no card inserted. Если ридер вообще не определился — dmesg | grep tty. Если ридер есть но карта не отвечает: проверьте физический контакт, попробуйте другой ридер или другой USB-порт. На VPS через USB passthrough — задержка USB-over-IP может быть слишком высокой для нормальной работы смарт-карты (карта требует очень точного тайминга). В этом случае единственное решение — C-line к серверу с физической картой.
Ещё один edge case: CCcam падает с segfault на ядрах Linux 6.x. Проверьте:
uname -r
journalctl -u cccam | grep segfault
Если segfault — установите старую libstdc++:
apt install libstdc++6=12.2.0-14 --allow-downgrades
Или запустите бинарник в Docker-контейнере на Ubuntu 20.04.
Какой порт по умолчанию использует CCcam сервер?
12000 — для шаринг-протокола, 16001 — для веб-интерфейса webinfo. Оба настраиваются в CCcam.cfg через директивы SERVER LISTEN PORT и WEBINFO LISTEN PORT. Порт 12000 де-факто стандарт, но его можно изменить на любой свободный.
Где лежит конфиг файл CCcam.cfg в Linux?
Стандартное расположение — /var/etc/CCcam.cfg. На некоторых сборках бинарник ищет конфиг в /usr/keys/CCcam.cfg или /etc/CCcam.cfg — путь прошит в бинарнике. Проверьте командой strings /usr/local/bin/CCcam | grep cfg.
Сколько клиентов выдержит один CCcam сервер на VPS?
Бинарник CCcam практически не нагружает CPU — узким местом становится скорость карты (3-5 ECM в секунду физический предел) и пропускная способность канала. На одной карте реально 30-50 одновременных зрителей без артефактов. С несколькими картами или C-line источниками — 100-200 клиентов на 1 vCPU.
Чем CCcam отличается от OScam как сервер?
CCcam — закрытый бинарник, не развивается с 2016, но прост в настройке и стабилен. OScam — open source, активно поддерживается, поддерживает больше протоколов (CCcam, Newcamd, GBox, Radegast), гибкая маршрутизация ECM, детальная статистика. Конфиг OScam сложнее, зато полный контроль. Для серьёзного использования в 2026 — OScam предпочтительнее.
Как проверить что CCcam сервер запущен и принимает подключения?
Три команды: systemctl status cccam покажет состояние демона, ss -tlnp | grep 12000 подтвердит что порт слушает, curl http://localhost:16001 проверит webinfo. В логе должна быть строка server listen thread started on port 12000.
Что означает hop в F-line и зачем он нужен?
Hop — количество промежуточных серверов между картой и конечным клиентом. В F-line: первое число (uphops) задаёт сколько уровней вверх клиент может видеть, второе (downhops) — сколько уровней вниз он может раздавать. uphops=0 — клиент видит только локальные карты. uphops=2 — карты с глубиной до 2 пересылок. Меньше hop = быстрее ECM.
Безопасно ли открывать webinfo порт 16001 в интернет?
Нет. Webinfo раскрывает полный список карт, CAID провайдеров, подключённых клиентов и их IP. Правильный подход: iptables блокирует 16001 снаружи, доступ только через SSH-туннель. Если нужен постоянный доступ — nginx reverse proxy с HTTP Basic Auth и HTTPS.
Практические советы для стабильного просмотра
Даже самая стабильная линия 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 или внешние мониторы.