Кардшаринг: настройка CCcam и OScam с нуля
Если вы уже знаете, что такое ECM-запрос и зачем нужен control word, но никак не можете победить пустой экран после подключения линии — эта статья для вас. Кардшаринг на практике выглядит проще, чем кажется из документации, но дьявол в деталях: один неверный параметр в конфиге, неправильная группа или закрытый порт — и ничего не работает. Разберём всё по порядку, с реальными путями и командами.
Что такое кардшаринг и как он работает
Технически кардшаринг — это механизм распределённого доступа к смарт-карте. Ваш ресивер не умеет расшифровывать поток самостоятельно без карты, но может обратиться к удалённому серверу, у которого эта карта вставлена физически.
Принцип работы: ECM, CW и control word
Всё начинается с ECM (Entitlement Control Message) — зашифрованного пакета, который мультиплексирован прямо в DVB-потоке. Клиентский ресивер вытаскивает этот пакет и отправляет его на кардшаринг-сервер. Сервер прогоняет ECM через физическую смарт-карту, та возвращает control word (CW) — 8 байт, которые и расшифровывают 10 секунд видео. CW летит обратно клиенту, descrambler применяет его к потоку, картинка появляется.
Весь цикл должен укладываться в 400–500 мс. Если нет — фризы. Вот почему ECM time — главная метрика качества соединения.
Роли сервера и клиента
Сервер — это машина с физически вставленной картой и запущенным OScam или CCcam. Клиент — ваш Enigma2-ресивер или любое другое устройство с softcam. Один сервер может обслуживать несколько клиентов одновременно, но каждая карта имеет ограничение на параллельные расшифровки — обычно 2–4 одновременных потока.
Основные протоколы: CCcam, newcamd, CS378x, MGcamd
CCcam работает на порту 12000 по умолчанию. Протокол проприетарный, но реализован в OScam через эмуляцию. Строка подключения выглядит так: C: hostname 12000 username password.
newcamd — старый, но живой протокол. Порты обычно в диапазоне 28000–28009. Обязателен 14-символьный DES-ключ в hex. Без него соединение либо не установится, либо будет постоянно разрываться.
CS378x (он же camd35) — UDP-протокол, используется реже, но встречается в некоторых конфигах. MGcamd — отдельный softcam со своим протоколом, актуален для определённых прошивок.
Установка и настройка OScam
OScam — это открытый проект, собирается под большинство архитектур: ARM (Enigma2-ресиверы), MIPS, x86. Самый стабильный вариант — собрать самому из svn или взять готовый бинарник под свою платформу с официального репозитория.
Сборка OScam через svn/git и toolchain
Checkout исходников:
svn checkout https://svn.streamboard.tv/oscam/trunk oscam-trunk
cd oscam-trunk
Для кросс-компиляции под ARM Enigma2 нужен тулчейн от производителя вашей платформы (Dreambox, VU+, Gigablue и т.д.). Конфигурируем через make config — там выбираем нужные ридеры и протоколы. Минимальный набор: cardreader_smargo, protocol_cccam, protocol_newcamd.
Если собираете под x86 для обычного Linux:
make USE_PCSC=1 USE_LIBUSB=1
Структура каталога /etc/tuxbox/config или /var/keys
На Enigma2 конфиги OScam чаще всего живут в /etc/tuxbox/config/oscam/. На некоторых сборках (особенно OpenATV) путь смещается в /usr/keys/. Проверьте, что лежит в обоих местах — после обновления прошивки они могут оказаться в разных состояниях.
Набор файлов конфигурации минимальный:
oscam.conf— глобальные параметры и секции протоколовoscam.server— описание ридеров (физических и сетевых)oscam.user— учётные записи клиентов
Файл oscam.conf и секция [global]
Минимальный рабочий oscam.conf:
[global]
logfile = /tmp/oscam.log
maxlogsize = 512
preferlocalcards = 1
lb_mode = 1
lb_save = 300
[newcamd]
key = 0102030405060708091011121314
port = 28000@1234:000000
[webif]
httpport = 8888
httpuser = admin
httppwd = yourpassword
httprefresh = 10
Параметр preferlocalcards = 1 важен: без него OScam может отправить запрос на сетевой ридер, игнорируя физическую карту. lb_mode = 1 включает loadbalancer, который автоматически выбирает лучший источник по ECM time.
Настройка oscam.server и oscam.user
Пример секции ридера с физической картой через Smargo:
[reader]
label = local_card
protocol = smartreader
device = /dev/ttyUSB0
detect = cd
mhz = 368
cardmhz = 368
group = 1
emmcache = 1
cacheex = 0
Файл oscam.user описывает, кто может подключаться к серверу:
[account]
user = client1
pwd = secretpass
group = 1
au = local_card
uniq = 0
monlevel = 0
Параметр group должен совпадать между ридером и пользователем — это главная причина ошибки "group mismatch". Если группы не совпадают, OScam просто не будет направлять ECM-запросы этого пользователя к нужному ридеру.
Веб-интерфейс httpport и мониторинг
После запуска oscam -b -r 2 открывайте браузер на http://ваш-IP:8888. Там всё: статус каждого ридера, текущие ECM-запросы, время ответа, список подключённых клиентов. Флаг -b запускает в фоне, -r 2 указывает количество попыток реконнекта.
Зелёный статус "CONNECTED" у ридера — не гарантия работы. Смотрите на колонку ECM — если запросы есть, но ответов нет, проблема в карте или CAID.
Установка и настройка CCcam
CCcam — бинарник, исходников нет. Последняя "живая" версия — 2.3.x. Для Enigma2 берёте arm-бинарник, кладёте в /usr/bin/CCcam, даёте права на исполнение.
Путь к бинарнику и автозапуск
Конфиг: /var/etc/CCcam.cfg. Именно этот путь ищет бинарник по умолчанию — не /etc/CCcam.cfg, не /tmp/CCcam.cfg. Ошибка с путём и CCcam запустится без конфига, тихо.
Для автозапуска на Enigma2 создайте /etc/init.d/CCcam или просто добавьте запись в /etc/rcS.d/. На OpenATV удобнее использовать плагин softcam-manager.
Файл CCcam.cfg: строки F (server) и C (client)
Строка F: описывает пользователя, которому ваш CCcam раздаёт карты (если вы сервер):
F: username password 1 1 0 0 0
Параметры после пароля — uphops, downhops, и флаги. Строка C: — подключение к внешнему серверу (если вы клиент):
C: server.example.com 12000 myuser mypassword
Одновременно можно иметь и F-строки, и C-строки — CCcam сам разберётся, что раздавать, а откуда брать.
Параметры C-line: host, port, username, password
Полный блок серверной части CCcam.cfg с основными параметрами:
SERVER LISTEN PORT : 12000
ALLOW TELNET : yes
TELNET PORT : 16000
NEWCAMD LISTEN PORT : 28000
SERIAL SHARING : no
EXTENDED LOGGING : yes
ECM INFO LOG : yes
DEBUG : no
Telnet на порту 16000 — ваш лучший друг при диагностике. Подключаетесь локально: telnet localhost 16000, и видите список подключённых серверов, статус каждого, количество найденных карт.
Опции SID assign и share limits
Если нужно ограничить доступ к определённым каналам, используется SIDFILTER:
SIDFILTER : username 1234:001234,001235
Формат: имя пользователя, пробел, CAID:SID через запятую. Полезно, когда у вас несколько клиентов с разными пакетами подписки.
Связка OScam и CCcam: гибридная конфигурация
Многие переходят на OScam не потому что CCcam плохой, а потому что OScam — это логирование, EMM-поддержка, веб-интерфейс и стабильность под нагрузкой. При этом CCcam-линии у многих уже куплены и работают. Решение — подключить CCcam-источник прямо внутри OScam через reader-секцию.
Подключение CCcam-линий внутри OScam
OScam умеет выступать CCcam-клиентом. Никакого отдельного CCcam не нужно — OScam сам реализует клиентскую часть протокола. Это чище и стабильнее, чем держать оба softcam одновременно.
Reader с protocol cccam в oscam.server
[reader]
label = remote_cccam
protocol = cccam
device = cccam.server.com,12000
user = myuser
password = mypassword
group = 2
cccversion = 2.3.0
cccmaxhops = 2
ccckeepalive = 1
reconnecttimeout = 30
Параметр cccversion важен. Некоторые серверы работают только с версией 2.1.4, другие — с 2.3.0. Если соединение устанавливается, но карты не видны — попробуйте изменить cccversion. cccmaxhops = 2 ограничивает глубину решары: запросы к картам дальше 2 хопов OScam отправлять не будет.
Конвертация C-line в reader-секцию
C-line вида C: hostname 12000 user pass конвертируется в reader буквально построчно:
| C-line | oscam.server |
|---|---|
| hostname | device = hostname,12000 |
| 12000 | (часть device) |
| user | user = user |
| pass | password = pass |
Группу назначайте сами — главное, чтобы она совпадала с группой в oscam.user для ваших клиентов.
Диагностика и решение типичных ошибок
Большинство проблем решается чтением логов. Но нужно знать, что именно искать.
Ошибка 'card not found' и пустой канал
В логах OScam это выглядит как no matching reader found или no card supports CAID. Первым делом проверяем: правильный ли CAID у канала? На Enigma2 смотрите в информацию о сервисе — там есть CAID и provid. Потом проверяем, что ридер с нужным CAID в правильной группе и группа назначена пользователю.
Если CAID совпадает, но канал не открывается — проверьте provid. У некоторых операторов один и тот же CAID используется с разными provid для разных пакетов. Явно указать провайдер можно в oscam.server через параметр caid = 0123:456789.
Фриз и долгая расшифровка (высокий ECM time)
Норма ECM time — до 300–400 мс. При 500 мс начинаются периодические подвисания, при 800 мс+ фризы становятся постоянными. В webif OScam смотрите колонку "ECMtime" у каждого ридера.
Причины высокого ECM time: сетевая задержка до сервера, перегруженный источник, слишком длинная цепочка решаров (hop 3 и выше), или источник просто слабый и обрабатывает запросы медленно. Быстро проверить: ping -c 20 hostname — если средний ping выше 150–200 мс, это уже проблема.
Ещё один случай — высокий ECM time только на части каналов. Это значит, что у одного провайдера карты разные provid для разных транспондеров, и один из них уходит на более медленный ридер. Решается через lb_weight или явное указание provid в reader-секции.
Проблемы с портами и firewall
Проверяем, слушает ли OScam/CCcam нужный порт:
netstat -tulpn | grep 12000
Если строки нет — процесс либо не запустился, либо конфиг неверный. Если строка есть, но снаружи недоступно — iptables или роутер блокирует. На Enigma2 iptables обычно не мешает, но если у вас сервер за NAT/CGNAT — проброс порта может быть физически невозможен. В этом случае единственный нормальный вариант — поднять VPN-туннель (WireGuard или OpenVPN) до сервера с белым IP и подключаться через него.
Чтение логов OScam и статусов CCcam
В OScam включаем детальный лог для конкретного ридера через webif: Readers → ваш ридер → Log Level → установить на 255. Потом tail -f /tmp/oscam.log. Ищем строки с "ECM" — там будет CAID, provid, время ответа и имя ридера, который ответил.
В CCcam через telnet (порт 16000) команда l показывает список подключённых серверов. Статус "1" — подключён, "2" — в процессе подключения. Если постоянно "2" — проблема в сетевой доступности или неверные учётные данные.
Ошибка с неверным DES-ключом newcamd в логах выглядит как invalid DES key или соединение устанавливается и сразу рвётся. Ключ должен быть ровно 14 байт в hex, то есть 28 символов. Стандартный тестовый: 0102030405060708091011121314.
Как выбрать источник кардшаринга: критерии без названий
Рынок источников для кардшаринга непрозрачен — большинство продавцов не говорят, что именно продают. Но по нескольким параметрам можно отличить нормальный источник от перепроданного решара.
На что смотреть: ECM time, аптайм, локальные карты
Локальные карты — hop 0 на стороне сервера, hop 1 на вашей стороне. Это лучшее, что можно получить. Если источник заявляет hop 1, ECM time должен быть в районе 150–250 мс при нормальной сети. Аптайм выше 99% в месяц — хороший показатель, 95% — уже терпимо, ниже — ищите другой источник.
Запросите тестовый доступ на 24–48 часов и смотрите на реальный ECM time в webif, а не на обещания. Также уточните список поддерживаемых CAID — у источника должны быть явно указаны конкретные значения, не просто "все европейские пакеты".
Признаки решары и почему это плохо
Решара (reshare) — когда источник сам является клиентом другого сервера. Каждый дополнительный хоп добавляет 50–200 мс к ECM time и увеличивает риск обрыва. Хоп 3+ практически всегда означает нестабильную работу.
Косвенные признаки решары: ECM time скачет от 100 до 800 мс без видимых причин, каналы периодически "пропадают" на несколько секунд, разные каналы одного пакета имеют очень разное время отклика.
Тестовый период и поддержка протоколов
Хороший источник всегда даёт тест. Если отказывают в тестовом доступе — повод задуматься. Проверяйте поддержку нужного вам протокола заранее: если у вас OScam с CCcam-reader, нужен CCcam-протокол на порту 12000, а не только newcamd.
Чек-лист при выборе источника:
- Протокол: CCcam 2.3.x / newcamd / оба
- Хоп: не выше 1 для основных CAID
- ECM time в тесте: стабильно ниже 400 мс
- Аптайм: история за последний месяц
- Тестовый период: минимум 24 часа
- Список CAID: явные значения, не общие слова
Чем OScam лучше CCcam?
OScam — открытый проект с активной разработкой. Главные преимущества: поддержка EMM (автоматическое обновление прав на карте), детальное логирование с webif, гибкая настройка приоритетов через loadbalancer, стабильная работа под нагрузкой с несколькими клиентами. CCcam проще в первоначальной настройке — один файл конфига, минимум параметров. Но он проприетарный, последняя версия 2.3.x не обновляется, а диагностика без webif значительно сложнее.
Какой порт используется для кардшаринга по умолчанию?
CCcam-протокол: порт 12000. Newcamd: диапазон 28000–28009 (конкретный порт зависит от конфига сервера). Веб-интерфейс OScam: обычно 8888. Все эти порты задаются вручную в конфигурационных файлах и должны быть открыты в firewall и проброшены на роутере, если сервер стоит за NAT.
Что означает ECM time и какое значение нормальное?
ECM time — время полного цикла расшифровки: от отправки ECM-запроса до получения control word. Норма — до 300–400 мс. При 500 мс начинаются периодические фризы, при 800 мс+ изображение замерзает постоянно. На ECM time влияют: сетевая задержка до сервера, количество хопов, загрузка источника, и количество параллельных запросов на одну карту.
Почему канал не открывается, хотя линия подключена?
Причин несколько. Несовпадение CAID или provid — самое частое. Group mismatch в OScam: группа ридера не совпадает с группой пользователя. Нет нужной карты у источника для этого конкретного канала. Неверный DES-ключ при newcamd (должен быть 28 hex-символов, то есть 14 байт). Канал в другом регионе или на другом транспондере, который не входит в вашу подписку. Всё это видно в логах OScam при включённом детальном логировании.
Где находятся файлы конфигурации OScam и CCcam?
OScam на Enigma2: чаще всего /etc/tuxbox/config/oscam/, реже /usr/keys/. Там лежат oscam.conf, oscam.server, oscam.user. На чистом Linux путь задаётся при запуске через параметр -c /path/to/config. CCcam: конфиг всегда в /var/etc/CCcam.cfg — бинарник ищет именно там. Пути зависят от версии прошивки Enigma2 и конкретной сборки.
Можно ли запустить кардшаринг-сервер на обычном Linux ПК?
Да. OScam собирается под x86_64 без проблем. Для работы с физической картой нужен USB-картоприёмник (Smargo SmartReader, ReinerSCT или аналоги) — они поднимаются через PCSC или напрямую через device в oscam.server. Подходит любой мини-ПК или Raspberry Pi 4 — потребление маленькое, работает круглосуточно без проблем. Сборка: make USE_PCSC=1, устройство прописывается как device = /dev/ttyUSB0 или через PCSC как device = PCSC:0.