OScam-icam: настройка и компиляция для DVB-карт

Если вы уже работали с обычным OScam и вдруг часть каналов перестала открываться — скорее всего, дело в том, что ваша сборка не поддерживает icam-режим. Форк oscam icam существует именно для таких случаев: когда CAS использует переменную длину control word или ускоренную ротацию ключей, стандартный OScam просто выбрасывает такие ECM. Ниже — конкретная инструкция: от сборки из исходников до диагностики по логам.

Что такое OScam-icam и чем он отличается от обычного OScam

OScam — это опенсорсный softcam с поддержкой десятков протоколов и ридеров. Но его стандартная сборка рассчитана на классические CAS вроде Viaccess, Conax, Irdeto с фиксированной длиной CW (8 байт) и стандартной CRC. Как только появляются системы с нестандартной обработкой ключей — начинаются проблемы.

Назначение режима icam

Icam (Instant Conditional Access Module) — это расширение протокола, позволяющее работать с CAS, где control word может иметь переменную длину или нестандартную CRC. Такие системы встречаются у ряда европейских и ближневосточных операторов, где ротация ключей происходит каждые несколько секунд вместо стандартных 10.

Форк oscam icam добавляет в кодовую базу специфические обработчики ECM для таких систем — в частности, правильный парсинг ответов сервера и пересчёт CRC при необходимости.

Отличия в обработке ECM и константной длине CW

В стандартном OScam при получении CW с неверной CRC пакет отбрасывается с записью в лог типа CW checksum error. Это поведение жёстко зашито в cscrypt/des.c. В форке icam эта проверка становится опциональной через параметр disablecrccws.

Кроме того, icam-форк правильно обрабатывает ситуацию, когда сервер возвращает CW с дополнительными байтами метаданных — стандартный парсер в таких случаях либо обрезает данные, либо выдаёт ecm response error.

Когда стандартного OScam недостаточно

Проверить просто: если в логах вы видите строки ECM rejected или no matching reader при том, что ридер показывает статус CONNECTED и правильный CAID — вам нужен oscam icam. Другой симптом — каналы открываются, но фризят каждые 3–5 секунд именно в момент смены ключа.

Сборка и компиляция OScam-icam из исходников

Большинство ресурсов дают только готовые бинарники. Это работает до тех пор, пока архитектура вашей приставки совпадает. Если у вас MIPS-процессор старой Dreambox или ARM в Amlogic-боксе — нужна кросс-компиляция из исходников.

Установка зависимостей (libssl-dev, libusb, pcsc-lite)

На хост-машине (Debian/Ubuntu) устанавливаем всё необходимое:

apt-get install build-essential libssl-dev libusb-1.0-0-dev \
  pcscd libpcsclite-dev git cmake

Для кросс-компиляции дополнительно понадобится тулчейн — о нём ниже. Без libssl-dev флаг USE_LIBCRYPTO=1 не сработает, и сборка упадёт с ошибкой cannot find -lcrypto.

Получение исходников и выбор toolchain

Исходники форка берём с GitHub (репозиторий oscam-patched или oscam-svn-mirror с icam-патчами — ищите по тегу icam). Стандартный SVN OScam icam-режим не содержит.

git clone https://github.com/oscam-emu/oscam-patched.git
cd oscam-patched

Для Dreambox DM800 (MIPS 4Kc) подходит тулчейн mipsel-unknown-linux-gnu из пакета crosstool-ng. Для Amlogic S905 (ARM Cortex-A53) — aarch64-linux-gnu-gcc из репозитория дистрибутива. Старые тулчейны под MIPS (до версии GCC 4.9) часто не могут слинковать современную OpenSSL — получите undefined reference to EVP_MD_CTX_new. Берите GCC 7.x или новее.

Флаги конфигурации: USE_LIBCRYPTO, MODULE_NEWCAMD, READER_*

Сначала — меню конфигурации:

./config.sh -g

Здесь включаем нужные модули. Минимальный набор для работы через newcamd:

  • MODULE_NEWCAMD — протокол клиентских подключений
  • MODULE_CCCAM — если используете CCcam-линии
  • READER_CARDREADER — для физических смарткарт
  • CS_ANTICASC — защита от злоупотреблений (опционально)

Затем сборка:

make USE_LIBCRYPTO=1 CONF_DIR=/etc/tuxbox/config

Готовый бинарник копируем:

cp oscam /usr/bin/oscam
chmod +x /usr/bin/oscam

Кросс-компиляция под ARM/MIPS приставки

Для кросс-компиляции передаём тулчейн через переменную:

make USE_LIBCRYPTO=1 \
  CONF_DIR=/etc/tuxbox/config \
  CC=mipsel-unknown-linux-gnu-gcc \
  STRIP=mipsel-unknown-linux-gnu-strip

Скомпилированный файл переносим на приставку через SCP или TFTP. Проверяем архитектуру перед запуском:

file oscam
# должно быть: ELF 32-bit LSB executable, MIPS...

Если видите ELF 64-bit x86-64 — вы собрали нативную версию, а не кросс. Тулчейн не сработал.

Конфигурация: oscam.conf, oscam.server и oscam.user

Конфиги лежат в CONF_DIR, который вы указали при сборке — обычно /etc/tuxbox/config/ или /etc/oscam/. Три основных файла: oscam.conf, oscam.server, oscam.user.

Глобальная секция [global] и [cs357x]/[newcamd]

Минимальный oscam.conf:

[global]
logfile                = /var/log/oscam.log
maxlogsize             = 512
preferlocalcards       = 1
saveinithistory        = 1

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

[newcamd]
port                   = 15050@1830:000000

Строка в секции [newcamd] задаёт порт и CAID с ident-фильтром. Если порт 8888 занят другим процессом — webif просто не запустится без ошибки в логе OScam (проверяйте через netstat -tlnp | grep 8888).

Настройка ридера с protocol = newcamd и cccam

Пример ридера в oscam.server для подключения через newcamd:

[reader]
label                  = myreader
protocol               = newcamd
device                 = server.example.com,15050
key                    = 0102030405060708091011121314
user                   = myuser
password               = mypassword
caid                   = 1830
ident                  = 1830:000000
group                  = 1
reconnecttimeout       = 30
disablecrccws          = 1

Параметр key — это 14-байтный DES-ключ newcamd. Если сервер использует стандартный ключ — он будет 0102030405060708091011121314. Используйте тот, что выдал вам источник линии.

Для CCcam-ридера протокол меняем:

[reader]
label                  = cccam_line
protocol               = cccam
device                 = server.example.com,12000
user                   = myccuser
password               = myccpass
group                  = 1
cccversion             = 2.3.0
ccckeepalive           = 1

Параметры icam: disablecrccws, ecmwhitelist, caid/ident

disablecrccws = 1 — отключает проверку CRC у control word. Для обычных CAS это лишнее, но для систем, где oscam icam-обработка критична, это может быть единственным способом заставить каналы открыться.

ecmwhitelist задаёт список разрешённых длин ECM-ответа:

ecmwhitelist               = 1830:=16,32

Это говорит OScam принимать для CAID 0x1830 ответы длиной 16 или 32 байта. Без этого нестандартные длины будут отброшены.

Важный момент с ident: если CAID прописан, а ident не указан — ридер будет виден в webif как CONNECTED, но каналы не откроются. OScam не будет слать на него ECM, потому что фильтр по ident не совпадает. Прописывайте явно: ident = 1830:000000,003411.

Права доступа и oscam.user (group, au, betatunnel)

Пример записи в oscam.user:

[account]
user                   = client1
pwd                    = clientpass
group                  = 1
au                     = myreader
betatunnel             = 1702:000000:1830:000000
maxconnections         = 1

betatunnel нужен, когда канал транслируется в одном CAID, но ваша карта/линия работает с другим. Например, оператор транслирует в Betacrypt (0x1702), а линия декодирует как Nagravision (0x1830). Без betatunnel OScam не перенаправит ECM.

maxconnections = 1 — важный параметр. Если один клиент с одним логином подключается с двух приставок, второй получит отказ. Именно из-за этого канал может работать на одной приставке и фризить на другой при общей линии.

Порты, протоколы и проверка соединения

Порт newcamd (обычно 1xxxx) и формат строки

Стандартный диапазон портов newcamd — 10000–19999. Типичная строка подключения выглядит так:

N: server.example.com 15050 myuser mypassword 01 02 03 04 05 06 07 08 09 10 11 12 13 14

Последние 14 чисел — DES-ключ в десятичном формате (в OScam он задаётся в hex). Если ключ неверный — соединение установится, но ни одна ECM не расшифруется. В логе увидите authentication failed или просто вечный CONNECTED без ответов на ECM.

Веб-интерфейс на 8888 и мониторинг статуса ридера

Открываем http://адрес-приставки:8888 — там видим статус каждого ридера. Нормальная картина: статус CONNECTED, столбец ECM time показывает значение в миллисекундах, счётчик OK растёт.

Если webif не открывается — проверяем, не занят ли порт: netstat -tlnp | grep 8888. Часто его перехватывает встроенный веб-сервер Enigma2 или другой процесс. Меняем httpport на 8080 или 9999.

Проверка ECM time и hops в логах

Нормальный ECM time для прямого подключения — до 400 мс. Значения 600–900 мс говорят о перегрузке сервера или высоком пинге. Выше 1000 мс — будут фризы.

Параметр hops в CCcam-цепочке — количество промежуточных серверов. При hops > 3 ECM time резко растёт, и плюс периодические дисконнекты становятся нормой: каждый промежуточный сервер имеет свой лимит подключений и может обрывать соединение. В логе это выглядит как чередование CONNECTEDRECONNECTING с интервалом 1–2 минуты.

Открытие портов в firewall/iptables

Если OScam работает как сервер — открываем нужный порт:

iptables -A INPUT -p tcp --dport 15050 -j ACCEPT
iptables -A INPUT -p tcp --dport 8888 -j ACCEPT
iptables-save > /etc/iptables/rules.v4

На Enigma2-приставках firewall обычно отключён по умолчанию. На Linux-серверах — проверьте ufw status или iptables -L -n.

Устранение типичных ошибок OScam-icam

Диагностика начинается с логов. Запускаем с максимальным уровнем отладки:

oscam -b -d 255 -c /etc/tuxbox/config -l /var/log/oscam.log

Флаг -d 255 включает все уровни debug. Лог сразу становится подробным — ищем нужные строки через grep -i "ecm\|rejected\|error\|reader" /var/log/oscam.log.

Ошибка 'ecm response error' и rejected ECM

Строка ECM rejected означает, что ридер ответил, но ответ не прошёл проверку. В форке oscam icam первым делом проверяем:

  • Установлен ли disablecrccws = 1 в секции ридера
  • Совпадает ли длина ECM-ответа с ecmwhitelist
  • Правильно ли указан CAID и ident

Если после ECM rejected в логе идёт CW checksum failed — это точно случай для disablecrccws.

Фриз каналов при корректном статусе ридера

Это самая коварная ситуация. Ридер CONNECTED, ECM time в норме — а каналы фризят каждые несколько секунд. Три основные причины:

  1. Ротация ключей быстрее, чем ECM time. Если смена CW происходит каждые 2 секунды, а ECM time 1800 мс — новый ключ приходит, когда старый ещё не применился.
  2. Неверный ident — OScam декодирует не тот поток.
  3. Лимит соединений на сервере. Один логин = одно активное соединение. Если вы подключились с двух устройств — второй получает CW с задержкой или не получает совсем.

Проблемы с caid/ident и фильтром ecmwhitelist

Частая ошибка: CAID указан как десятичное число вместо шестнадцатеричного. В конфиге OScam CAID всегда в hex. Nagravision — 1830, не 6192. Viaccess — 0500. Если перепутать — ридер не будет получать ECM вообще, и в логе увидите no matching reader found.

С ecmwhitelist аналогично: если длина ответа не попадает в список — ECM отклоняется молча. Временно уберите ecmwhitelist совсем, посмотрите в логе реальную длину ответов, и уже потом пропишите правильные значения.

Логи: уровень debug и анализ oscam.log

В webif на порту 8888 есть вкладка Oscam Log — там можно менять уровень отладки без перезапуска. Установите CM debug в значение 255.

Полезные паттерны для grep:

# Все ошибки ECM
grep -i "ecm\|rejected\|error" /var/log/oscam.log | tail -50

# Статусы ридеров
grep "reader\|CONNECTED\|DISCONN" /var/log/oscam.log | tail -20

# CRC ошибки
grep "checksum\|CRC\|CW" /var/log/oscam.log

Как выбрать источник линии для OScam-icam

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

Технические критерии стабильного источника

Первое — поддержка нужного CAID. Не все источники работают со всеми системами условного доступа. Перед подключением уточняйте список поддерживаемых CAID и ident.

Второе — uptime. Нормальный показатель — выше 99% за месяц. Если сервер уходит в оффлайн несколько раз в неделю — это не вариант для постоянного использования.

Третье — количество hops в CCcam-цепочке. Чем больше промежуточных серверов, тем выше ECM time и нестабильнее соединение.

Параметры, которые стоит проверять (ECM time, uptime)

ECM time до 300 мс — хорошо. 300–500 мс — приемлемо. Выше 600 мс при стабильном интернете — сервер перегружен или далеко географически.

Следите за счётчиком ECM Rej в webif. Если он растёт — что-то не так с фильтрацией или сервером. Нормальный показатель — ноль или единицы за час работы.

Проверяйте maxconnections у провайдера. Если у вас несколько приставок на одной линии — нужно несколько логинов или провайдер с поддержкой multi-conn.

Юридические и технические риски

Cardsharing находится в серой или явно незаконной зоне в большинстве юрисдикций — это стоит учитывать. В ряде стран ЕС за использование чужих смарткарт предусмотрена уголовная ответственность. Технический риск тоже есть: операторы активно используют систему CAS-трапов — поддельных каналов, которые выявляют несанкционированный шаринг и блокируют CAID/ident в реальном времени.

Частые вопросы

Чем OScam-icam отличается от обычного OScam?

Форк oscam icam добавляет поддержку CAS с переменной длиной control word и ускоренной ротацией ключей. Стандартный OScam отбрасывает такие ECM с ошибкой CRC или ecm response error. Ключевые отличия — параметр disablecrccws, расширенный парсинг ECM-ответов и поддержка ecmwhitelist для нестандартных длин.

Какие флаги нужны при компиляции OScam-icam?

Обязательно: USE_LIBCRYPTO=1, MODULE_NEWCAMD, MODULE_CCCAM. Для физических карт добавьте нужные READER_*. Конфигурация через ./config.sh -g, сборка командой make USE_LIBCRYPTO=1 CONF_DIR=/etc/tuxbox/config. Под MIPS/ARM обязательно указывайте CC= и STRIP= с путём к кросс-компилятору.

Что делать, если каналы фризят при статусе ридера CONNECTED?

Проверьте ECM time в webif — должен быть ниже 400 мс. Добавьте disablecrccws = 1 в секцию ридера в oscam.server. Сверьте CAID и ident — оба должны совпадать с тем, что даёт линия. Проверьте в логе наличие строк ECM rejected и CW checksum. Если используете несколько приставок на одном логине — это лимит соединений.

Какой порт использовать для newcamd в OScam-icam?

Порт задаётся в строке ридера — обычно пятизначное число в диапазоне 10000–19999, например 15050. Webif по умолчанию работает на порту 8888. Оба порта нужно открыть в firewall: iptables -A INPUT -p tcp --dport 15050 -j ACCEPT. Порт webif можно сменить через httpport в oscam.conf, если 8888 занят.

Где находятся конфигурационные файлы OScam?

По умолчанию — в директории, указанной при сборке через CONF_DIR. Обычно это /etc/tuxbox/config/ или /etc/oscam/. Три основных файла: oscam.conf (глобальные настройки), oscam.server (ридеры), oscam.user (клиенты). Логи пишутся в /var/log/oscam.log, путь задаётся параметром logfile в секции [global].

Зачем нужен параметр disablecrccws?

Он отключает проверку CRC у control word. В стандартных CAS CRC предсказуема и OScam использует её для верификации. В режиме oscam icam некоторые системы отдают CW с нестандартной CRC — без disablecrccws = 1 такие CW отбрасываются, и канал не открывается. Параметр прописывается в секции нужного ридера в oscam.server, а не глобально.

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

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