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.

Practical checklist for smooth viewing

Even the best CCCam or OSCam line needs two or three simple preparations. Update your receiver firmware, reset the ECM cache once a week and keep 15–20% free space on the USB stick or internal flash so that the reader can store keys without delays.

When tuning a dish, aim for MER/BER reserve: a two‑degree offset or a loose F‑connector often causes the “freezing” that users blame on cardsharing. Keep a short patch cord to test alternative routers, and save two profiles in OSCam — one for TCP, one for UDP — so you can switch instantly if your ISP starts filtering a protocol.

Utgard.tv monitors each hub 24/7, but you can speed up diagnostics by keeping a short log of your receiver actions. Note the time when you changed the channel, which CAID was active and whether you used Wi‑Fi or Ethernet. This tiny “journal” helps engineers reproduce your environment in the lab and return with a solution in minutes instead of hours.

  • Keep two line slots enabled: if the first server hits a maintenance window, the second one instantly takes over without re-entering credentials.
  • Run a monthly speed and latency test. Stable 1–2 Mbps with ping <80 ms is enough for SD/HD, but if jitter exceeds 20 ms, switch the router to wired mode.
  • Save the Utgard.tv status page and Telegram bot @utgard_tv_bot to bookmarks — they publish maintenance notices before SEMrush or uptime monitors raise alerts.