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/SID
  • ECM: 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 декодирований. Диагностика по порядку:

  1. Проверьте F-line клиента — uphops. Если 0, клиент видит только карты напрямую подключённые к серверу
  2. Убедитесь что нужный CAID присутствует в разделе providers webinfo
  3. Проверьте что карта активна — срок подписки, EMM обновления. Карта может инициализироваться (ATR есть), но подписка истекла
  4. Проверьте 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 или внешние мониторы.