Cardsharing на OScam: настройка сервера с нуля

Если вы уже установили OScam на ресивер, роутер или Linux-приставку и теперь смотрите на пустой oscam.server, не понимая, с чего начать — этот материал для вас. Cardsharing oscam работает иначе, чем CCcam: здесь всё строится на блоках конфигурации, связях между ними и точном синтаксисе. Одна лишняя пробел — и карта не инициализируется. Разберём всё по порядку, с реальными примерами конфигов и диагностикой по логам.

Что такое cardsharing на OScam и как работает обмен ключами

OScam — это open-source softcam, написанный на C, который умеет одновременно читать физическую смарт-карту в картоприёмнике и раздавать ключи клиентам по сети. Или наоборот — получать ключи от удалённого сервера и передавать их своему DVB-адаптеру. Это ключевое отличие от более простых решений.

Принцип работы DCW и контрольных слов

Каждые ~10 секунд зашифрованный поток DVB содержит ECM-пакет (Entitlement Control Message). Смарт-карта расшифровывает его и возвращает DCW — двойное контрольное слово длиной 16 байт, которое используется для декодирования видео. Без актуального DCW картинка замерзает или рассыпается на артефакты.

При кардшаринге карта находится на одной машине, а запрос ECM приходит от другой. Сервер передаёт полученный DCW обратно клиенту по сети. Задержка этой передачи и есть то самое ECM time, которое видно в веб-интерфейсе OScam.

Роль OScam как клиента и как сервера

В oscam.server описываются ридеры — и локальные (физическая карта), и сетевые (удалённый сервер как источник ключей). В oscam.user описываются учётные записи клиентов, которые подключаются к вашему OScam за ключами. Один и тот же демон может одновременно быть клиентом вышестоящего сервера и раздавать ключи вниз.

Локальный ридер против сетевого соединения

Локальный ридер читает карту через картоприёмник: /dev/sci0 для внутреннего ридера ресивера или /dev/ttyUSB0 для USB-картоприёмника на чипах PL2303/FTDI. Сетевой ридер — это подключение к чужому серверу по протоколу newcamd, CCcam или cs378x. Настройка принципиально разная, и путать их нельзя.

Структура конфигурационных файлов OScam

Пути зависят от платформы. На Enigma2-прошивках (Dreambox, VU+, GigaBlue) конфиги обычно лежат в /etc/tuxbox/config/oscam/. На роутерах с OpenWrt или Entware — в /etc/oscam/ или /usr/local/etc/oscam/. На голом Linux — куда скажете при запуске через ключ -c /путь/к/папке. Точный путь всегда можно проверить командой ps aux | grep oscam.

oscam.conf — глобальные параметры и веб-интерфейс

Это главный конфиг. Минимальная рабочая секция [global] и [webif]:

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

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

После запуска веб-интерфейс будет доступен по адресу http://IP:8888. Смените пароль от дефолтного — это не паранойя, а базовая гигиена.

oscam.server — описание ридеров и подключений

Каждый ридер — отдельный блок [reader] с заголовком [reader]. Здесь описывается и локальная карта, и сетевые подключения. Порядок блоков не принципиален, важны параметры внутри. Синтаксис строгий: параметр = значение, без пробелов вокруг знака равно в некоторых версиях — лучше ставить пробелы везде, так надёжнее.

oscam.user — учётные записи клиентов

Каждый клиент, который будет подключаться к вашему OScam, получает блок [account] в этом файле. Здесь задаются логин, пароль, группа (group) и ограничения по CAID. Без записи в oscam.user клиент не подключится вообще.

oscam.services и oscam.dvbapi

oscam.services позволяет группировать каналы по SID и создавать профили доступа — нужно для тонкой фильтрации. oscam.dvbapi управляет взаимодействием с DVB-адаптером напрямую, актуален когда OScam и декодер на одной машине. Для базовой настройки эти файлы можно не трогать.

Настройка ридера и протоколов: newcamd, cccam, cs378x

Это самая важная часть. Большинство проблем с cardsharing oscam — именно здесь: неверный протокол, неправильный ключ или несвязанные группы.

Локальный ридер для смарт-карты (protocol = mp35/internal)

Для внутреннего картоприёмника ресивера:

[reader]
label = local_card
protocol = internal
device = /dev/sci0
detect = cd
mhz = 357
cardmhz = 357
group = 1
caid = 0500
emu = 0
audisabled = 0

Для USB-картоприёмника (PL2303, FTDI) меняем device и protocol:

[reader]
label = usb_card
protocol = mp35
device = /dev/ttyUSB0
detect = cd
mhz = 357
cardmhz = 357
group = 1

Про mhz и cardmhz: значение 357 соответствует 3.57 МГц. Некоторые карты инициализируются только на 368 (3.68 МГц). Если карта зависает при инициализации — первым делом пробуйте менять эти два параметра. Попробуйте 357, 368, 600. В логе при этом будет что-то вроде card init error или просто тишина после ATR.

Сетевой ридер по протоколу newcamd (порт 15000+)

Подключение к удалённому серверу через newcamd:

[reader]
label = newcamd_server
protocol = newcamd
device = server.example.com,15000
key = 0102030405060708091011121314
user = mylogin
password = mypassword
caid = 0500
group = 1
reconnecttimeout = 30

Ключ key — это 14 байт в hex-формате без пробелов и разделителей (28 символов). Стандартный тестовый ключ 01 02 03 ... 14 записывается как 0102030405060708091011121314. Если сервер использует другой ключ — вы получите wrong checksum в логе и нулевые DCW.

Стандартные порты: newcamd работает на 15000–15011 (часто отдельный порт под каждый CAID), иногда используют 10000 или нестандартные.

Подключение по CCcam (порт 12000) и cs378x

CCcam проще в настройке — не нужен DES-ключ, одно соединение передаёт несколько карт:

[reader]
label = cccam_server
protocol = cccam
device = server.example.com,12000
user = mylogin
password = mypassword
group = 1
cccversion = 2.2.11
ccckeepalive = 1

cs378x — протокол Camd35 по UDP, порт обычно 15000 или 10000:

[reader]
label = cs378x_server
protocol = cs378x
device = server.example.com,10000
user = mylogin
password = mypassword
group = 1

Параметры group, caid, ident и audisabled

Это та самая связь, которую все упускают. Параметр group в [reader] должен совпадать с group в [account] клиента. Если у ридера group = 1, а у клиента group = 2 — карта не отдаст ключи, и никаких ошибок в логе не будет. Просто тишина.

caid фильтрует по системе условного доступа (Irdeto = 0604, Viaccess = 0500, Nagra = 1800 и т.д.). ident фильтрует по провайдеру внутри CAID. Если не уверены — лучше не задавать, OScam сам разберётся.

audisabled = 1 отключает обновление карты (AU/EMM). Для локального ридера обычно нужно audisabled = 0, иначе карта устареет. Для сетевых ридеров AU обычно недоступен — сервер сам решает, передавать EMM или нет.

Настройка клиентов в oscam.user и веб-мониторинг

Когда ридеры настроены, нужно прописать клиентов, которые будут к вам подключаться. Или прописать хотя бы один тестовый аккаунт для проверки.

Блок [account]: user, pwd, group

[account]
user = client1
pwd = clientpass
group = 1
au = local_card

Параметр au = local_card указывает, с какого ридера клиент будет получать EMM-обновления. Здесь local_card — это label из блока [reader]. Без этого клиент получает только DCW, но не обновления карты.

Ограничение по CAID и сервисам

Хотите ограничить клиента только определённой системой:

[account]
user = client2
pwd = pass2
group = 1
caid = 0500
services = myfavoritepackage

Параметр services ссылается на профиль из oscam.services. Если файла нет — просто не задавайте этот параметр.

Просмотр статуса ридеров и ECM-времени через webif

В веб-интерфейсе на http://IP:8888 раздел Readers показывает статус каждого ридера: CARDOK (карта читается), CONNECTED (сетевой ридер подключён), или красный статус при проблемах. Зелёный ридер — хорошо. Всё остальное — повод смотреть лог.

В разделе Clients видно активные подключения и ECM time в миллисекундах. Нормальное значение для комфортного просмотра — до 300–400 мс. При 500+ начинаются фризы при переключении каналов. Я наблюдал значения 80–150 мс на хороших серверах и 800+ мс на перегруженных — разница ощутимая.

Чтение лога oscam.log и уровни отладки

Путь к логу задаётся в [global]: logfile = /var/log/oscam.log. Уровень детализации — параметр cs_log_level. Значение по умолчанию 1, максимум для отладки — 255 (но это очень много текста):

[global]
logfile = /var/log/oscam.log
cs_log_level = 255
maxlogsize = 5000

Следить за логом в реальном времени: tail -f /var/log/oscam.log. Строки с rdr — события ридера, с client — события клиентских подключений. Строки с AU — события обновления карты.

Диагностика типичных ошибок cardsharing

Вот где реально помогает опыт. Большинство гайдов останавливаются на "должно работать", не объясняя, что делать когда не работает.

Ридер в статусе CARDOK, но нет DCW

Карта инициализирована, но каналы не открываются. Первое, что проверяю — параметр group. В 80% случаев именно здесь проблема: у ридера group = 1, а у аккаунта клиента в oscam.user — group = 2 или вообще не задан. Нет совпадения группы — нет DCW.

Дальше проверяем caid и ident. Если в [reader] прописан конкретный CAID, а клиент запрашивает другой — запрос уйдёт в никуда. Смена CAID или ident провайдером вещания — ещё одна частая причина, почему вчера работало, а сегодня нет. Провайдеры периодически меняют ident, и если у вас жёсткая фильтрация — обновляйте конфиг.

Ошибка connect/handshake и закрытые порты

Проверить, доступен ли порт сервера с клиентской машины:

telnet server.example.com 15000
# или
nc -zv server.example.com 15000

Если соединение не устанавливается — порт закрыт. Причины: файрвол на сервере, NAT без проброса портов, или OScam вообще не запущен. Проброс портов на роутере — обязательно для серверного режима: TCP-порт 12000 для CCcam, 15000 для newcamd, 8888 для webif (последний лучше наружу не открывать).

За двойным NAT (роутер за роутером, типично для OpenWrt на TP-Link) нужен проброс на обоих уровнях. На OpenWrt пути конфигов могут быть в /etc/oscam/ или /opt/etc/oscam/ в зависимости от того, установлен ли OScam через opkg или Entware. Права на файлы конфигов должны быть 644, на папку — 755.

Неверный DES-ключ newcamd (14 байт)

В логе появляется что-то вроде: wrong checksum, expected XX got YY. Причина однозначная — ключ key в блоке [reader] не совпадает с ключом на сервере. Ключ должен быть ровно 28 hex-символов (14 байт). Проверьте: нет ли лишних пробелов, нет ли переноса строки, все ли символы в нижнем или верхнем регистре (OScam не чувствителен к регистру, но лучше унифицировать).

Конфликт CAID и проблемы с AU/EMM

Если у вас несколько ридеров отдают один и тот же CAID — OScam будет опрашивать их в порядке приоритета. Параметр lb_weight задаёт вес ридера при балансировке нагрузки, fallback = 1 делает ридер резервным — он используется только когда основной недоступен. Это работает так: если у ридера A и ридера B одинаковый group и CAID, но у B стоит fallback = 1, то B включится автоматически при падении A.

Проблема с AU: если для локального ридера audisabled = 1 — EMM-пакеты не обрабатываются и карта не обновляется. Карта с истёкшим сроком или невалидными entitlements перестаёт отдавать DCW. В логе это видно по строкам с EMM.

Высокое ECM time и фризы изображения

ECM time выше 500 мс — уже повод для беспокойства. Причины: большой пинг до сервера, перегруженный сервер, нестабильный канал связи. Что делать: добавить второй ридер в ту же group как резерв, проверить загрузку процессора на машине с OScam, убедиться что на роутере нет QoS, режущего этот трафик.

Пинг напрямую определяет базовое ECM time. Если сервер находится в 200 мс пинга — меньше 400 мс вы не получите даже при идеальных условиях. Географическая близость сервера важна не меньше, чем его технические характеристики.

Как выбрать источник ключей: критерии без привязки к именам

Здесь расскажу про методологию оценки, без упоминания конкретных сервисов — их оценивать вам самим.

Стабильность и аптайм сервера

Реальный аптайм виден по статистике подключений в oscam webif — если ридер регулярно переподключается (смотрите столбец reconnects), это индикатор нестабильного сервера. Хороший сервер — это минимум реконнектов за сутки. Заявленные "99.9% uptime" без возможности проверки — маркетинг.

Низкое ECM time и географическая близость

Попросите тестовую линию перед покупкой и смотрите реальное ECM time в webif, а не слова провайдера. Для европейских пакетов сервер должен быть в Европе. Сервер в Азии при просмотре европейских каналов добавит 100–300 мс только на сетевую задержку.

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

Убедитесь, что сервер реально отдаёт нужный вам CAID. В oscam webif в статусе ридера после подключения видно, какие CAID доступны. Если нужного CAID нет в списке — канал не откроется, и это не проблема вашей конфигурации.

Прозрачность условий и техподдержка

Адекватная техподдержка — это ответы по существу с запросом oscam.log, а не просто "перезагрузите ресивер". Хороший признак: провайдер может объяснить, какой протокол использует, на каком порту, какой CAID отдаёт. Если на эти вопросы нет ответов — ищите другой источник.

Где в OScam лежат конфигурационные файлы?

Зависит от платформы. На Enigma2-прошивках (Dreambox, VU+) — обычно /etc/tuxbox/config/oscam/. На роутерах с OpenWrt или Entware — /etc/oscam/, /var/etc/oscam/ или /usr/local/etc/oscam/. Точный путь задаётся при запуске через ключ -c: oscam -c /etc/oscam. Проверить активный путь: ps aux | grep oscam.

Чем отличается протокол newcamd от CCcam в OScam?

newcamd требует 14-байтовый DES-ключ (28 hex-символов в параметре key) и традиционно использует отдельный порт под каждый CAID (15000–15011). CCcam на порту 12000 проще в настройке — не нужен DES-ключ, одно соединение может передавать несколько карт. Оба настраиваются в блоке [reader] в oscam.server, разница только в параметрах.

Почему ридер показывает CARDOK, но каналы не открываются?

Карта инициализирована, но DCW не отдаётся. Первое что проверять — совпадение параметра group между [reader] в oscam.server и [account] в oscam.user. Несовпадение группы — самая частая причина. Дальше: правильный ли CAID у ридера, есть ли нужная подписка на карте, не задан ли ident фильтр на несуществующего провайдера.

Какое ECM time считается нормальным?

До 300–400 мс — комфортный просмотр. При 500–600 мс уже могут быть фризы при переключении каналов. Выше 800 мс — проблема, которую нужно решать. Значение зависит от пинга до сервера, загрузки карты и стабильности соединения. Смотрите ECM time в разделе Clients веб-интерфейса OScam.

Как проверить, открыт ли сетевой порт ридера?

С клиентской машины: telnet host port или nc -zv host port. Если соединение не устанавливается — проверьте файрвол на сервере, проброс портов (NAT) на роутере, и убедитесь что OScam реально запущен и слушает нужный порт. На роутере за NAT для работы серверного режима необходимо пробрасывать TCP-порты наружу.

Что делать, если карта не обновляется (AU/EMM)?

Проверьте что у локального ридера в oscam.server не стоит audisabled = 1. В блоке [account] клиента должен быть параметр au = label_ридера — имя метки вашего локального ридера. Убедитесь что EMM-пакеты вообще приходят (видно в логе по строкам AU). Для сетевых ридеров AU обычно недоступен — сервер сам управляет обновлением своей карты.

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

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