Cardsharing: что это, как работает CCcam и OScam

Cardsharing — это технология совместного использования смарт-карты платного телевидения через сеть. Один ресивер с реальной картой подключён к серверу, остальные клиенты получают от него зашифрованные ключи для декодирования потока. Звучит просто, но под капотом — цепочка ECM/EMM-запросов, Control Words и точного тайминга. Если где-то задержка — картинка замерзает. Разберём, как это устроено технически.

Что такое cardsharing и как он работает технически

Спутниковый сигнал передаётся в зашифрованном виде — scrambled поток. Для расшифровки ресиверу нужен Control Word (CW) — 8-байтный ключ, который меняется каждые 7–10 секунд. Сам CW зашифрован в ECM (Entitlement Control Message) и расшифровать его может только авторизованная смарт-карта с правами на данный пакет каналов.

При cardsharing клиентский ресивер отправляет ECM на удалённый сервер, там смарт-карта расшифровывает ключ и возвращает CW клиенту. Клиент декодирует поток. Всё это происходит за 100–400ms — незаметно для зрителя. Трафик минимален: около 1–2 KB/s на канал.

Принцип обмена ECM/EMM между сервером и клиентом

ECM (Entitlement Control Message) — запрос на получение CW для конкретного канала. EMM (Entitlement Management Message) — сообщения для обновления прав карты, управления подпиской. При нормальной работе EMM идут от провайдера напрямую к карте через reader, ECM — от клиентов к серверу и обратно.

Каждый раз, когда ресивер переключает канал или истекает текущий CW, он отправляет новый ECM-запрос. Сервер получает запрос, передаёт ECM на физическую карту, карта возвращает CW, сервер отправляет его клиенту. Весь цикл должен уложиться до смены следующего CW — иначе freeze.

Роль смарт-карты, CAM-модуля и DVB-ресивера

Смарт-карта — физический токен с чипом, на котором хранятся ключи и права подписки. CAM-модуль (Conditional Access Module) — это интерфейс между картой и ресивером, вставляется в Common Interface слот. DVB-ресивер — аппаратная часть, которая принимает спутниковый сигнал и передаёт ECM на обработку.

При cardsharing CAM и карта находятся на стороне сервера. Клиентский ресивер работает в режиме softcam — программного эмулятора, который перехватывает ECM и отправляет по сети вместо локального CAM.

Разница между локальной картой и удалённым sharing

С локальной картой весь процесс происходит внутри одного устройства — ECM идёт в CAM, CW возвращается немедленно. Задержка около 20–50ms. При удалённом sharing добавляется сетевая задержка, нагрузка на сервер, возможные потери пакетов. Поэтому ECM time 100–400ms считается нормой, а выше 800ms — уже проблема.

Протоколы CCcam и OScam: ключевые отличия

Два главных стандарта в мире cardsharing — CCcam и OScam. Они решают одну задачу, но по-разному. Понимать разницу важно, если вы настраиваете сервер с нуля или выбираете, что поставить на ресивер.

CCcam: проприетарный протокол, простота настройки

CCcam разработан командой Dream Multimedia и долгое время был стандартом de facto для Dreambox. Протокол проприетарный, бинарники распространялись для конкретных платформ (mips, arm, x86). Развитие остановилось примерно на версии 2.3.x — новых релизов нет.

Плюсы: простая конфигурация через единый файл CCcam.cfg, понятная логика F-line/C-line/N-line. Минусы: закрытый код, нет поддержки новых типов reader'ов, под высокой нагрузкой (50+ клиентов) потребляет больше CPU, чем OScam. Тем не менее CCcam-протокол остаётся стандартом для межсерверного обмена — большинство сетей используют C-line именно для этого.

OScam: open-source, гибкость, поддержка newcamd/cccam/camd35

OScam — open-source проект, активно развивается. Последние билды доступны на официальном SVN-репозитории. Поддерживает reader'ы: PCSC, smartreader+, internal (встроенный слот Dreambox), phoenix, mouse. Протоколы для клиентов: newcamd, cccam, camd35, gbox, radegast.

Для серверной стороны OScam значительно гибче: можно настроить лимиты на пользователя, cache-exchange между серверами, приоритизацию CAID. Потребление CPU ниже при той же нагрузке. WebIF на порту 8888 даёт полную видимость того, что происходит — активные клиенты, ECM time, статус карты в реальном времени.

Когда использовать MGcamd, Gbox, NewCS

MGcamd — lightweight softcam, хорошо работает на старых ресиверах с ограниченным CPU (Dreambox 500S, TM-5402). Потребляет меньше памяти, чем OScam. Gbox — протокол для peer-to-peer обмена картами между серверами, используется в крупных сетях. NewCS — ещё один card server, проще OScam, но значительно менее гибкий.

На современных ресиверах (Zgemma, VU+, Edision) с OpenATV или OpenPLi — OScam через dvbapi. На старых девайсах с 64MB RAM — MGcamd. Для чистого peer-to-peer без клиентов — Gbox.

Настройка CCcam-сервера на Linux (Debian/Ubuntu)

Для сервера нужен Linux x86_64, минимум Debian 10 или Ubuntu 20.04. Бинарник CCcam нужно скачать нужной версии под архитектуру. Для ARM-серверов (RPi, Odroid) — ARM-бинарник. MIPS — только для роутеров с OpenWRT, не рекомендуется для продакшна.

Установка бинарника и структура /var/etc/CCcam.cfg

# Копируем бинарник
cp CCcam.x86 /usr/bin/CCcam
chmod +x /usr/bin/CCcam

# Создаём директорию конфига
mkdir -p /var/etc/

# Основной конфиг
touch /var/etc/CCcam.cfg

Лог пишется в /tmp/CCcam.log по умолчанию. Для продакшна лучше переопределить: LOGFILE = /var/log/CCcam.log.

Конфигурация F-line, C-line, N-line, R-line

Структура файла /var/etc/CCcam.cfg:

# F-line — добавить пользователя (сервер принимает подключения)
# F: username password reshare au { caid:provider }
F: client1 password123 1 0 0 { 0:0:1 }
F: client2 pass456 0 0 0 { 0:0:1 }

# C-line — подключение к другому CCcam-серверу (клиентская сторона)
# C: hostname port username password reconnect
C: remote.server.example 12000 myuser mypass 1

# N-line — подключение через Newcamd-протокол
# N: hostname port username password DES_KEY
N: newcamd.server 10000 user pass 01 02 03 04 05 06 07 08 09 10 11 12 13 14

# R-line — локальный reader
R: /dev/ttyUSB0 serial 357600 SECA,VIACCESS

Параметр reshare в F-line: 0 = не resharing, 1 = resharing без ограничений. AU (auto-update) — передача EMM клиенту для обновления прав карты, обычно 0 для клиентов.

Открытие порта 12000/TCP и проброс через iptables

# Открыть порт в iptables
iptables -A INPUT -p tcp --dport 12000 -j ACCEPT

# Для постоянного сохранения
iptables-save > /etc/iptables/rules.v4

# Проверка что CCcam слушает
netstat -tlnp | grep 12000
# или
ss -tlnp | grep 12000

Если сервер за NAT — нужен проброс порта 12000/TCP на маршрутизаторе. Клиенты подключаются к внешнему IP. Для динамического IP — обязательно DDNS (duckdns.org, no-ip.com): иначе при смене IP все C-line у клиентов перестанут работать.

Запуск как systemd-сервис и автостарт

# /etc/systemd/system/cccam.service
[Unit]
Description=CCcam Card Server
After=network.target

[Service]
Type=simple
ExecStart=/usr/bin/CCcam
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl enable cccam
systemctl start cccam
systemctl status cccam

Настройка OScam: oscam.conf, oscam.server, oscam.user

OScam хранит конфиги в нескольких файлах, каждый отвечает за свою часть. Основная директория на большинстве систем: /etc/tuxbox/config/oscam/ или /etc/oscam/. На Enigma2-дистрибутивах чаще встречается первый путь.

Структура /etc/tuxbox/config/oscam/

/etc/tuxbox/config/oscam/
├── oscam.conf      # глобальные настройки, WebIF
├── oscam.server    # reader'ы (карты, ридеры)
├── oscam.user      # пользователи/клиенты
├── oscam.services  # группировка сервисов по SID/CAID
└── oscam.srvid     # база сервисов (название канала по SID)

Минимальный рабочий oscam.conf:

[global]
nice = -1
WaitForCards = 1
logfile = /var/log/oscam.log
maxlogsize = 1024

[webif]
httpport = 8888
httpuser = admin
httppwd = adminpass
httprefresh = 10

[dvbapi]
enabled = 1
au = 1
pmt_mode = 0
request_mode = 0

Reader-секции для PCSC, internal, smartreader+

Пример oscam.server для USB-ридера (Smartreader+ или phoenix):

[reader]
label = my_card
protocol = smartreader
device = /dev/ttyUSB0
caid = 0500
detect = cd
mhz = 357
cardmhz = 357
group = 1
emmcache = 1,3,15

Для встроенного слота Dreambox (internal reader):

[reader]
label = internal_card
protocol = internal
device = /dev/sci0
caid = 1702
group = 1

Для PCSC (компьютер с USB-ридером типа Omnikey, ACR38):

[reader]
label = pcsc_card
protocol = pcsc
device = 0
caid = 0604
group = 1

WebIF на порту 8888 и dvbapi для Enigma2

WebIF доступен по адресу http://ip-сервера:8888. В нём видно: список активных клиентов, ECM time по каждому запросу, статус reader'а, очередь запросов. Если ECM time стабильно выше 600ms — проблема либо в нагрузке на карту, либо в сети.

Секция [dvbapi] нужна для прямой работы с Enigma2 — OScam подключается к demux ресивера и подаёт CW напрямую, минуя CCcam-протокол. Это стабильнее и быстрее. Для Dreambox и VU+ — стандартное решение.

Cache-exchange и peer-to-peer обмен

OScam поддерживает cache-exchange (CSP — CacheEX, Peer-to-Peer) — серверы обмениваются уже расшифрованными CW, снижая нагрузку на физические карты. Конфигурируется в oscam.conf:

[cacheex]
mode = 1
cacheex_wait_time = 120
cacheex_enable_stats = 1

И в oscam.server для peer-сервера:

[reader]
label = cacheex_peer
protocol = cccam
device = peer.server.com,12000
user = peeruser
password = peerpass
cacheex = 2
group = 2

Подключение клиента: ресивер, OpenATV, Dreambox

На клиентской стороне настройка проще — нужно только прописать C-line и убедиться, что сервер доступен. Но мелкие детали — hostname, порт, права файла — часто становятся источником проблем.

Установка CCcam plugin через feed или ipk

На OpenATV/OpenPLi CCcam устанавливается через Package Manager или вручную:

# Через opkg
opkg update
opkg install enigma2-plugin-softcams-cccam

# Или вручную через ipk
opkg install /tmp/CCcam_2.3.2_mipsel.ipk

После установки бинарник появляется в /usr/bin/CCcam, конфиг — /etc/CCcam.cfg.

Редактирование /etc/CCcam.cfg на клиенте (C-line)

# C-line — подключение к серверу
# C: hostname port username password reconnect
C: myserver.duckdns.org 12000 client1 password123 1

# Логирование на клиенте
LOGFILE = /tmp/CCcam.log
DEBUG = 0

Важно: hostname должен резолвиться с ресивера. Проверить: nslookup myserver.duckdns.org. Если провайдер выдаёт динамический IP — настроить DDNS клиент на сервере (ddclient, inadyn). При CGNAT (carrier-grade NAT) — прямое подключение невозможно, нужен VPS-релей с проксированием через stunnel или SSH-туннель.

Проверка через telnet и WebIF на порту 16001

# Telnet к CCcam Info
telnet localhost 16001

# Или через netcat
echo -e "card list\r\n" | nc localhost 16001

CCcam WebIF (если включён в конфиге через PORT = 16001) показывает список подключённых серверов, карт и их CAID. Если список карт пустой — сервер не передаёт карты: неправильный C-line, неверный пароль или сервер заблокировал подключение.

Перезапуск enigma2 и init.d скрипты

# Перезапуск softcam
/etc/init.d/softcam restart

# Или через init.d напрямую
/etc/init.d/CCcam stop
/etc/init.d/CCcam start

# Проверка лога в реальном времени
tail -f /tmp/CCcam.log

# Перезапуск enigma2 (только если нужно)
/etc/init.d/enigma2 restart

Troubleshooting: freeze, FTA only, channel not found

Большинство проблем сводится к трём сценариям: карта не отдаёт нужный CAID, ECM time слишком высокий, или ресивер вообще не видит softcam. Разберём каждый случай по логам.

Диагностика через лог: rejected, no card found, timeout

Типичные записи в /tmp/CCcam.log:

# Нет карты с нужным CAID
no card found for SID 0x1234 CAID 0x0500

# Запрос отклонён сервером (нет прав у пользователя)
ECM rejected for user client1

# Таймаут — сервер не ответил вовремя
ECM timeout after 5000ms for CAID 0x0604

# Успешный ответ с нормальным ECM time
ECM answered in 187ms for CAID 0x0500

"no card found" — сервер не имеет карты с нужным CAID. Либо провайдер не поддерживает данный пакет, либо карта не авторизована для канала. "ECM rejected" — пользователь подключён, но у него нет прав на resharing или на данный CAID.

Проблемы с ECM time >800ms и причины

Если ECM time стабильно выше 800ms — картинка будет замерзать каждые 7–10 секунд. Причины по убыванию частоты:

  • Высокий пинг между клиентом и сервером (>200ms) — выбирать географически близкий сервер
  • Перегружен reader на сервере — слишком много клиентов на одной карте (норма ~5–8 одновременных потоков)
  • Потери пакетов в сети — проверить ping -c 100 server-ip, смотреть packet loss
  • Медленный ридер — Phoenix и clone-ридеры иногда медленнее Smartreader+ при больших нагрузках

При высоком пинге помогает cache-exchange — OScam может получить уже расшифрованный CW от соседнего сервера быстрее, чем дождаться карты.

Конфликты CAID, provider ID, SID

Некоторые каналы доступны через несколько CAID (например, один и тот же канал может идти через 0500 и 0604). Если ресивер пытается расшифровать через неправильный CAID — запрос уйдёт на сервер без нужной карты.

В OScam можно задать приоритет CAID через oscam.conf: секция [camd35] или через услугу preferlocalcards = 1. В CCcam — через R-line с указанием CAID. Provider ID и SID конфликты чаще всего видны в логе как "wrong provider" или "SID not in service list".

Два softcam одновременно (CCcam + OScam) на одном ресивере — гарантированный конфликт. Оба пытаются захватить /dev/dvb и dvbapi. Всегда оставляйте только один активный softcam.

Сетевые проблемы: NAT, firewall, MTU

CGNAT — распространённая проблема у мобильных и некоторых кабельных провайдеров. Внешний IP принадлежит провайдеру, прямое входящее подключение невозможно. Решение: VPS с публичным IP, на нём запускается stunnel или SSH-туннель, клиент подключается через него.

MTU по умолчанию 1500, но некоторые провайдеры режут до 1452 (PPPoE) или 1400 (VPN). Если пакеты фрагментируются — ECM time вырастет. Проверить: ping -M do -s 1472 server-ip. Если нет ответа — MTU нужно снизить на интерфейсе.

Корпоративные firewall часто блокируют порты 12000, 10000–15000. Решение — перенести CCcam на порт 443 или 80 через PORT = в CCcam.cfg. Легитимный HTTPS-трафик обычно пропускается.

Как выбрать cardsharing-провайдера: критерии без рекламы

Рынок cardsharing-провайдеров непрозрачен. Много сервисов, которые берут оплату и исчезают. Разберём технические и организационные критерии — то, что реально влияет на качество.

Технические показатели: ECM time, uptime, локация серверов

Хороший провайдер декларирует SLA с uptime ≥99% и средним ECM time <500ms. Но декларации — одно, реальность — другое. Запросите тестовый период (минимум 24 часа) и проверьте ECM time в WebIF OScam или в логе CCcam в разное время суток: в прайм-тайм нагрузка на карты максимальна.

Для Европы оптимальная локация серверов — Германия или Нидерланды. Пинг из большинства европейских стран 20–50ms. Серверы в Азии или США дадут пинг 150–300ms — ECM time будет на грани.

Поддержка нужных пакетов и CAID

Провайдер должен явно указывать список поддерживаемых CAID и пакетов. Sky Germany — CAID 0x09C4 (NDS/Videoguard), Canal+ — 0x0500 (Viaccess), Sky UK — 0x0963. Если провайдер пишет "все каналы мира" без конкретики — это красный флаг.

Уточните поддержку конкретного пакета до оплаты. Карты V14 и V15 Sky требуют специфической настройки reader — не все провайдеры корректно их поддерживают.

Условия подключения: количество подключений, freeze policy

Стандарт — 1 подключение = 1 одновременный поток. Некоторые провайдеры предлагают multi-connection (2–5 потоков на один аккаунт). Уточните политику по freeze: нормальный провайдер компенсирует время downtime или предоставляет кредит. "Без гарантий" в условиях — уже сигнал.

Также спросите о reconnect политике — сколько раз в сутки можно переподключаться. Некоторые провайдеры банят аккаунт за слишком частые переподключения (это индикатор шаринга аккаунта между пользователями).

Тестовый период и техподдержка

Провайдер без тестового доступа — либо не уверен в качестве, либо работает на схеме "взял деньги и пропал". Норма — от 24 до 48 часов тестового периода. За это время можно проверить ECM time, стабильность, работу нужных пакетов.

Техподдержка должна отвечать в течение нескольких часов, а не дней. Проверьте это до оплаты — напишите вопрос в чат. Если ответ через 12 часов или через бота — так же будет и при реальной проблеме.

Признаки мошенников: оплата только за год без теста, обещания "все пакеты мира" без деталей, отсутствие реальной техподдержки, контакт только через анонимные мессенджеры.

Законно ли использовать cardsharing?

Зависит от юрисдикции. В большинстве стран ЕС и СНГ обмен Control Words без лицензии оператора нарушает условия подписки и может квалифицироваться как нарушение авторских прав (directive 98/84/EC в ЕС). Технически легальный вариант — использовать только собственную смарт-карту с действующей подпиской и не передавать доступ третьим лицам.

В чём разница между CCcam и OScam?

CCcam — проприетарный протокол, проще в первоначальной настройке, развитие остановлено на версии 2.3.x. OScam — open-source, активно развивается, поддерживает больше протоколов (newcamd, camd35, cccam-клиент, gbox), гибче в настройке reader'ов и cache-exchange. Для продакшн-сервера сегодня выбирают OScam. CCcam-протокол используют для C-line между серверами — как стандарт де-факто для обмена.

Какой порт нужно открыть для CCcam?

По умолчанию 12000/TCP для CCcam-сервера. Для OScam: 8888/TCP для WebIF, порт для cccam-server или newcamd-server задаётся в oscam.conf в соответствующих секциях (обычно 10000–15000). Для работы dvbapi с Enigma2 — сокет-файл, не TCP-порт. При использовании за корпоративным firewall CCcam можно перевести на порт 443.

Что такое ECM time и какое значение нормальное?

ECM time — время от отправки ECM-запроса до получения Control Word от сервера. Норма для комфортного просмотра: 100–500ms. При значениях 500–800ms уже могут быть редкие freeze. Выше 800ms — freeze будут регулярными. ECM time зависит от пинга до сервера, нагрузки на карту, скорости reader'а и потерь пакетов в сети.

Можно ли поднять собственный cardsharing-сервер?

Да, при наличии легальной смарт-карты с действующей подпиской и физического ридера (Smartreader+, Phoenix, Omnikey 3121). Нужен Linux-сервер (x86 или ARM), OScam, USB-ридер, статический IP или DDNS. Конфигурируется reader-секция под конкретный CAID провайдера, создаётся oscam.user для клиентов.

Почему появляется freeze каждые 10 секунд?

Control Word меняется каждые 7–10 секунд. Freeze именно в этом интервале — классический симптом того, что новый CW не успевает прийти до смены. Причины: высокий ECM time (>800ms), перегруженный сервер, потери пакетов, неправильный CAID в C-line, или сервер отклоняет ECM (проверить лог на "rejected" и "timeout").

Что лучше — CCcam plugin или OScam на ресивере?

Для современных Enigma2-приёмников (OpenATV, OpenPLi, OpenVix) — OScam через dvbapi. Активно поддерживается, стабильнее, даёт полный WebIF для диагностики. CCcam plugin проще для первичной настройки и совместим со старыми образами, но не получает обновлений с ~2013 года. На ARM-ресиверах с ограниченным CPU и памятью (64MB) — MGcamd как альтернатива.

Практические советы для стабильного просмотра

Даже самая стабильная линия 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 или внешние мониторы.