CCcam to OScam: конвертация конфигов и миграция сервера

Если ты уже работаешь с CCcam и думаешь о переходе — этот материал именно для тебя. Задача cccam to oscam миграции на первый взгляд выглядит как гора ручной работы. На деле это 2-3 часа аккуратного переноса конфигов, если знать что куда маппируется. Ниже — конкретные примеры, реальные пути к файлам и команды диагностики. Никакой воды.

Зачем переходить с CCcam на OScam

Честный ответ: CCcam — мёртвый проект. Последняя версия 2.3.x вышла в 2015 году, исходный код закрыт, баги никто не чинит. Если тебя устраивает то что работает сейчас — можно ничего не трогать. Но как только появляется новый провайдер, новая кодировка или нужна нормальная статистика — CCcam упирается в потолок.

Ограничения CCcam: закрытый код, нет EMM, медленные обновления

EMM (Entitlement Management Message) — это сообщения от провайдера, которые обновляют entitlements на смарт-карте. CCcam их попросту игнорирует. Для многих Nagra3 и Irdeto 2/3 провайдеров это означает что карта со временем "вываливается" и нужен физический ресет.

Закрытый код — отдельная головная боль. Никакой возможности скомпилировать под нестандартную платформу, никакого community патча. Что дали — тем и живи.

Преимущества OScam: открытый код, EMM, поддержка новых CAS, webif

OScam поддерживает Nagra3, Viaccess 5 и 6, Irdeto 2 и 3, Conax, Cryptoworks — и список обновляется. Webif на портах 8888 или 8181 даёт полную картину: какие readers подключены, ECM-время по каждому, количество успешных/неуспешных запросов. В CCcam ничего подобного нет.

И главное для нашего случая: протокол cccam в OScam реализован полностью. OScam-клиент подключается к CCcam-серверу и выглядит для него как обычный CCcam-клиент. Сервер не знает разницы.

Когда миграция оправдана, а когда нет

Если у тебя простой сетап — один сервер, одно устройство, всё работает — не трогай. "Работает — не чини" актуально и здесь. Миграция оправдана когда нужны: EMM для обновления карты, поддержка Nagra3/Viaccess 5+, нормальный мониторинг, или когда планируешь раздавать шары нескольким клиентам с разными пакетами.

Конвертация C-line из CCcam.cfg в oscam.server

Это ключевой шаг cccam to oscam конвертации. C-line в CCcam выглядит просто: одна строка с четырьмя полями. В OScam это превращается в секцию [reader] с десятком параметров. Звучит страшно, но маппинг один к одному — каждое поле находит свой аналог.

Структура C-line: C: host port username password

Типичная C-line из /etc/CCcam.cfg:

C: server.example.com 12000 myuser mypassword

Четыре поля: хост, порт, логин, пароль. Всё.

Маппинг полей в [reader] секцию OScam

Та же шара в oscam.server выглядит так:

[reader]
label                = provider1
protocol             = cccam
device               = server.example.com,12000
user                 = myuser
password             = mypassword
group                = 1
cccversion           = 2.3.2
cccmaxhops           = 5
cccwantemu           = 0
reconnecttimeout     = 30

Параметр device объединяет хост и порт через запятую — без пробела. Это частая ошибка при ручной конвертации.

Параметры protocol = cccam, cccversion, cccmaxhops

cccversion = 2.3.2 — версия протокола, которую OScam представляется серверу. Большинство современных серверов ожидают именно 2.3.2. Если сервер старый, попробуй 2.2.1 или 2.1.4 — несоответствие версий даёт wrong version в логах.

cccmaxhops — максимальное число хопов от источника шары. Значение 5 подходит для большинства случаев. Если поставить 0 — OScam будет принимать только прямые шары (hop 0), и большинство шар через сервер провайдера будет заблокировано. Это одна из самых распространённых ошибок при миграции.

cccwantemu = 0 — не запрашивать эмулятор. Если нужен — ставь 1, но для большинства реальных карт это не нужно.

Пример полной конвертации одной шары

Было в /etc/CCcam.cfg:

C: sat.provider-host.net 12000 john secretpass

Стало в /etc/tuxbox/config/oscam/oscam.server (на Enigma2) или /usr/local/etc/oscam.server (на Linux-сервере):

[reader]
label                = sat_main
protocol             = cccam
device               = sat.provider-host.net,12000
user                 = john
password             = secretpass
group                = 1
cccversion           = 2.3.2
cccmaxhops           = 5
cccwantemu           = 0
reconnecttimeout     = 30
logfriendlyname      = 1

Если у тебя несколько C-line — каждая получает свой блок [reader] с уникальным label. Можно присвоить разные группы для разных пакетов и потом управлять доступом на уровне account-секций.

Настройка oscam.user для клиентов вместо F-line

F-line в CCcam — это строка клиента, которому ты раздаёшь шару. В OScam это секция [account] в файле oscam.user. Логика та же, но возможностей больше.

F-line CCcam → [account] OScam

F-line из CCcam:

F: clientuser clientpass 1 0 0

Аналог в oscam.user:

[account]
user                 = clientuser
pwd                  = clientpass
group                = 1
cccmaxhops           = 1
uniq                 = 1
au                   = sat_main

Параметры group, au, uniq, cccmaxhops для клиентов

group = 1 — группа клиента. Она должна пересекаться с группой reader. Если у reader group = 1, а у account group = 2 — шара не отдаётся. Это не баг, это дизайн. Group matching — механизм разграничения доступа.

au = sat_main — указывает reader, через который этот клиент получает EMM. Это одна из ключевых возможностей OScam, которой нет в CCcam.

uniq = 1 — один логин, одно подключение. Если клиент подключится второй раз с тем же логином, первое соединение будет сброшено. Значение 3 — новое подключение не принимается пока существует старое.

cccmaxhops = 1 для клиентов ограничивает пересдачу. Если клиент не должен дальше раздавать шару — ставь 0 или 1.

Ограничение количества подключений и hop-фильтрация

Параметр maxconnections в account-секции ограничивает одновременные соединения:

maxconnections       = 2

Для домашнего использования обычно хватает 1-2. Для клиентов которые смотрят с нескольких устройств — 3-5.

Пароли и безопасность account-секции

OScam хранит пароли в открытом виде в oscam.user. Файл должен быть доступен только root: chmod 600 /etc/tuxbox/config/oscam/oscam.user. Не используй одинаковые пароли для разных клиентов — при компрометации одного аккаунта ты сразу видишь что именно утекло в логах.

oscam.conf и oscam.dvbapi: запуск cccam-протокола

Основной конфиг OScam — oscam.conf. Без правильной секции [cccam] клиенты не смогут подключиться по cccam-протоколу, даже если oscam.user настроен верно.

Секция [cccam]: port, reshare, version, nodeid

[cccam]
port                 = 12000
reshare              = 2
version              = 2.3.2
nodeid               = 

port = 12000 — стандартный порт CCcam. Если ты мигрируешь и хочешь чтобы существующие клиенты продолжили работу без изменений — оставь тот же порт что был в CCcam.

reshare — разрешённое число пересдач. 0 = не пересдавать вообще, 1 = отдавать только прямые шары, 2 = отдавать с одним хопом. Если не хочешь чтобы клиенты дальше раздавали — ставь 0.

nodeid — оставь пустым. OScam сгенерирует уникальный идентификатор автоматически при первом запуске и запишет его. Если копируешь конфиг на несколько устройств — обязательно сотри nodeid на каждом, иначе у тебя будут устройства с одинаковым ID и сервер провайдера забанит их как дубликаты.

Активация webif: httpport, httpuser, httppwd, httpallowed

[webif]
httpport             = 8888
httpuser             = admin
httppwd              = yourpassword
httpallowed          = 127.0.0.1,192.168.0.0-192.168.255.255
httprefresh          = 10
httphideidleclients  = 1

httpallowed — белый список IP. Указанный диапазон разрешает доступ только из локальной сети. Никогда не открывай webif в интернет без VPN или как минимум без смены порта и сложного пароля.

Настройка dvbapi для локального декодирования

Если OScam используется вместе с локальным ресивером (Enigma2, VDR):

[dvbapi]
enabled              = 1
au                   = 1
pmt_mode             = 0
request_mode         = 0
boxtype              = dreambox
user                 = localclient

На embedded-устройствах с ограниченной памятью (256MB и меньше) — отключи все неиспользуемые протоколы. Если нужен только cccam, убери секции [newcamd], [radegast], [cs378x] из конфига. Каждый активный порт — это слушающий сокет и память под буферы.

Логирование: logfile, debuglevel для отладки

[global]
logfile              = /var/log/oscam.log
debuglevel           = 4
nice                 = -1
maxlogsize           = 500

debuglevel = 4 даёт подробные логи включая ECM-запросы и ответы. Для продакшна после настройки снизь до 0 или 1 — при debuglevel 4 лог растёт очень быстро.

Проверка миграции и отладка

Первый запуск лучше делать в foreground чтобы сразу видеть вывод. Команда зависит от пути к конфигам:

oscam -b -c /etc/tuxbox/config/oscam/

или для стандартного пути:

oscam -b -c /usr/local/etc/oscam/

Флаг -b запускает в foreground без daemon mode. Ctrl+C остановит процесс.

Webif: вкладка Readers — статус CONNECTED/CONNECTING

Открой http://192.168.1.x:8888 → вкладка Readers. Каждый reader показывает статус: CONNECTED, CONNECTING, FAILED. CONNECTING долго — проблема с сетью или хостом не резолвится. FAILED сразу — неверные данные или сервер не принимает подключение.

Статус CONNECTED но 0 cards означает что соединение установлено, но сервер не отдал ни одной карты. Обычно это несовпадение CAID между тем что ты ожидаешь и тем что реально на сервере. Проверь Readers → Entitlements.

Логи: tail -f /var/log/oscam.log с debuglevel 4

tail -f /var/log/oscam.log | grep -E "ECM|reader|CAID|error"

Полезный паттерн: фильтровать только ECM и ошибки, иначе поток логов при debuglevel 4 нечитаем. Обращай внимание на строки no matching reader, login failed, wrong version — каждая говорит о конкретной проблеме.

Проверка ECM-времени: должно быть 200-600 мс

ECM time — время от запроса до получения ключа. В webif оно видно в колонке "Last ECM". Нормальный диапазон — 200-600 мс для удалённого сервера. Больше 1000 мс — проблема: либо высокая нагрузка на сервере, либо сеть с потерями пакетов, либо cccmaxhops слишком большой и запрос идёт через много промежуточных узлов.

Проверь пинг до хоста: ping server.example.com. Если пинг 20 мс а ECM time 800+ — проблема на стороне сервера или в маршрутизации запросов внутри cccam-сети.

Что делать если шара подключилась но каналы не открываются

CONNECTED + нет декодирования — три вероятных причины:

  • CAID не совпадает: канал требует CAID 0x1830, а у тебя в entitlements только 0x0B00
  • group mismatch между reader и dvbapi user — локальный клиент не имеет доступа к reader
  • dvbapi не настроен или указан неверный boxtype

Включи в webif → Files → oscam.conf проверку что [dvbapi] enabled = 1 и user совпадает с account в oscam.user.

Типичные ошибки при переносе CCcam → OScam

Процесс cccam to oscam конвертации ломается в нескольких предсказуемых местах. Вот что чаще всего идёт не так.

Перепутаны host и port в device

Неверно: device = 12000,server.example.com
Верно: device = server.example.com,12000

OScam не выдаст синтаксическую ошибку — он попытается резолвить "12000" как хост и получит FAILED через таймаут. Легко пропустить если делаешь конвертацию в спешке.

Дополнительная проверка перед запуском: telnet server.example.com 12000. Если соединение установилось — порт открыт и хост резолвится. Если "Connection refused" или таймаут — проблема в сети или файрволе, а не в конфиге OScam.

cccmaxhops = 0 блокирует все шары через хопы

Это убивает большинство подключений через cccam-сеть. Провайдер редко отдаёт шары с hop 0 напрямую — обычно минимум 1-2 хопа. Поставь cccmaxhops = 5 для reader и посмотри появятся ли карты в Entitlements.

group = 0 или несовпадение групп reader/account

Group 0 в OScam — это не "без группы", это конкретная группа с номером 0. Если у reader group = 1, а у account group = 0 — они не пересекаются. В логах увидишь no matching reader.

Правило простое: у reader и у account должна быть хотя бы одна общая цифра в поле group. Reader group = 1,2 и account group = 2,3 — совпадение есть (2), шара отдаётся.

Старый nodeid вызывает loop detection на сервере провайдера

Если ты скопировал oscam.conf с уже записанным nodeid на второе устройство — оба устройства представляются серверу с одинаковым ID. Многие серверы детектят это как loop и банят оба подключения.

Симптом: card removed сразу после CONNECTED, или соединение устанавливается и сразу же рвётся. Решение: открой oscam.conf, найди строку nodeid, удали значение, перезапусти OScam. Он сгенерирует новый уникальный ID.

Можно ли использовать CCcam и OScam одновременно на одном приёмнике?

Технически да — через разные порты dvbapi. Но на практике они конфликтуют за сокеты декодера, особенно на Enigma2. Один из них получит ECM-запросы, второй будет работать вхолостую. Лучше выбрать один эмулятор. OScam умеет всё что CCcam плюс EMM, webif и гибкую маршрутизацию — причин держать CCcam рядом почти нет.

Сохранятся ли мои подключения к серверам после конвертации?

Да, если корректно перенести host, port, user и password в секцию [reader] с protocol = cccam. Сервер видит OScam-клиент как обычный CCcam-клиент — протокол идентичен. Главное убедиться что cccversion совпадает с тем что ожидает сервер. Несовпадение даёт "wrong version" в логах и соединение рвётся.

Какой cccversion указывать в reader-секции?

По умолчанию ставь 2.3.2 — это самая распространённая версия. Если сервер старый (поднят на CCcam 2.1.x или 2.2.x), попробуй 2.2.1 или 2.1.4. Ошибка несовпадения версий хорошо видна в логах при debuglevel 4 — строка "wrong version" или "version mismatch".

Что такое nodeid и нужно ли его менять при миграции?

Nodeid — уникальный идентификатор клиента в cccam-сети. OScam генерирует его автоматически при первом запуске и сохраняет в oscam.conf. При миграции ничего менять не нужно — просто оставь поле пустым и OScam всё сделает сам. Критичный момент: если копируешь конфиг на несколько устройств — обязательно удали nodeid на каждом копии перед запуском. Один nodeid на два устройства = бан на стороне сервера.

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

Первое что проверить — cccmaxhops. Если стоит 0 или 1, OScam принимает только прямые шары и отклоняет те что идут через промежуточные узлы. Увеличь до 3-5 и посмотри на ECM time в webif. Второй момент — cacheex. В CCcam кеш ECM-ответов работал по умолчанию, в OScam его нужно настраивать отдельно в секции [cacheex]. Без кеша каждый ECM-запрос идёт на сервер заново.

Как мигрировать webinfo и статистику из CCcam?

Никак — форматы полностью несовместимы. Статистика OScam начинается с нуля. Но то что даёт OScam webif несравнимо лучше того что было в CCcam: в реальном времени видно ECM count, количество OK/NOK запросов, среднее время на reader, активные клиенты. Доступно на httpport который ты задал в oscam.conf, по умолчанию 8888.

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

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