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.

Practical checklist for smooth viewing

Even the best CCCam or OSCam line needs two or three simple preparations. Update your receiver firmware, reset the ECM cache once a week and keep 15–20% free space on the USB stick or internal flash so that the reader can store keys without delays.

When tuning a dish, aim for MER/BER reserve: a two‑degree offset or a loose F‑connector often causes the “freezing” that users blame on cardsharing. Keep a short patch cord to test alternative routers, and save two profiles in OSCam — one for TCP, one for UDP — so you can switch instantly if your ISP starts filtering a protocol.

Utgard.tv monitors each hub 24/7, but you can speed up diagnostics by keeping a short log of your receiver actions. Note the time when you changed the channel, which CAID was active and whether you used Wi‑Fi or Ethernet. This tiny “journal” helps engineers reproduce your environment in the lab and return with a solution in minutes instead of hours.

  • Keep two line slots enabled: if the first server hits a maintenance window, the second one instantly takes over without re-entering credentials.
  • Run a monthly speed and latency test. Stable 1–2 Mbps with ping <80 ms is enough for SD/HD, but if jitter exceeds 20 ms, switch the router to wired mode.
  • Save the Utgard.tv status page and Telegram bot @utgard_tv_bot to bookmarks — they publish maintenance notices before SEMrush or uptime monitors raise alerts.