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 или внешние мониторы.