NewCamd server: настройка и подключение OScam

Если вы уже крутите OScam и хотите поднять newcamd server для раздачи карты клиентам — эта статья для вас. Разберём конфиги от и до: секция [newcamd] в oscam.conf, DES-ключ, привязка CAID к порту, и почему клиент получает connection refused или CW NOT FOUND вместо нормальной дешифровки.

Что такое NewCamd server и зачем он нужен

Протокол NewCamd простыми словами

NewCamd — это клиент-серверный протокол для передачи ECM и EMM пакетов по TCP. Клиент посылает зашифрованный ECM-запрос, сервер отвечает CW (Control Word). Вся коммуникация защищена 14-байтным DES-ключом, который должен быть одинаковым на обеих сторонах соединения.

Работает поверх обычного TCP. Это значит, легко пробрасывается через NAT, туннель или VPN. Порт выбирается произвольно в конфиге — никакого фиксированного стандарта нет, но исторически прижился диапазон 15000–15050.

Чем NewCamd отличается от CCcam и MGcamd

Главное отличие — один порт привязан к одной карте (CAID). Это не баг, это архитектура протокола. Если у вас три карты — открываете три разных порта, каждый со своим ключом или одним общим. CCcam в этом плане проще для администратора: один порт, все карты летят через него.

MGcamd — это клиентский эмулятор, а не сервер. Он сам подключается по протоколу NewCamd, используя файл newcamd.list для описания подключений. То есть MGcamd — клиент, OScam с секцией [newcamd] — сервер. Не путайте роли.

Когда использовать NewCamd, а когда CCcam

NewCamd хорош там, где нужна чёткая привязка: одна карта, один порт, один пользователь. Локальная связка OScam + MGcamd через NewCamd — классика для ресиверов на базе Enigma2. Стабильно, минимум накладных расходов, легко отладить по логам.

CCcam выигрывает, когда карт много и нужно раздавать их скопом. Или когда клиент не умеет NewCamd — у CCcam шире поддержка на старом железе. Но если задача конкретная — поднять newcamd server под один спутниковый пакет — лишняя сложность CCcam здесь просто лишняя.

Настройка NewCamd server в OScam

Секция [newcamd] в oscam.conf

Открываем oscam.conf и добавляем секцию. Вот рабочий пример:

[newcamd]
key      = 0102030405060708091011121314
port     = 15050@0500:032830,043800
mgclient = 1

Ключ — 14 байт в hex, 28 символов, без пробелов и разделителей. Порт пишется в формате порт@CAID:ident. Если ident не нужен — достаточно 15050@0500. Несколько ident под один CAID — через запятую. Несколько портов — каждый на новой строке.

Параметр mgclient = 1 нужен для совместимости с MGcamd-клиентами. Без него некоторые версии MGcamd не проходят рукопожатие нормально и сразу обрывают соединение.

Файл oscam.user и создание учётной записи

Без записи в oscam.user клиент не пройдёт авторизацию. Минимальный блок:

[account]
user  = testuser
pwd   = testpass123
group = 1
au    = 1
caid  = 0500,1830

Параметр au = 1 (auto-update) нужен, если карта требует EMM для обновления ключей. Без него карта может держать CW сейчас, но через несколько дней перестанет его отдавать. Группа пользователя должна совпадать с группой reader, который читает физическую карту.

Параметр key (DES-ключ) и порт

DES-ключ — 14 байт в hex без каких-либо разделителей. Стандартный дефолт многих конфигов: 0102030405060708091011121314. Оставлять его в продакшене — плохая идея, поменяйте на свой.

Есть нюанс, который ломает людей: некоторые старые конфиги содержат 12-байтные ключи — 24 hex-символа. Это устаревший формат. Современный OScam ожидает ровно 14 байт. Если ключ короче — авторизация сломается даже при формальном совпадении символов. OScam просто откажется принимать такую конфигурацию или выдаст ошибку при старте.

Привязка CAID к порту

Формат записи порта — то, что большинство статей объясняют плохо или вообще не объясняют. Разберём на конкретном примере:

port = 15050@0500:032830,043800
port = 15051@1830:000000
port = 15052@0604

Порт 15050 принимает ECM-запросы для CAID 0500 с ident-кодами 032830 и 043800. Порт 15051 — для CAID 1830. Порт 15052 — для CAID 0604 без привязки к конкретному ident. Клиент, подключившийся к 15050 и запросивший канал с CAID 1830, получит отказ — это нормальное поведение протокола, а не ошибка конфига.

Пути к конфигам зависят от образа. На стоковых образах Enigma2 это обычно /etc/oscam/ или /var/keys/. На образах типа OpenPLi — /etc/tuxbox/config/oscam/. При ручной сборке из исходников — /usr/local/etc/oscam/. После правки конфига нужен рестарт OScam или команда перечитывания конфига через веб-интерфейс (кнопка Reload в разделе Config).

Подключение клиента к NewCamd server

Подключение к newcamd server со стороны клиента настраивается по-разному в зависимости от программы. Разберём основные варианты.

Строка cwshare.cfg и newcamd.list в MGcamd

В MGcamd используется файл newcamd.list, который живёт в /etc/mgcamd/ или /usr/keys/. Строка подключения выглядит так:

CWS = 192.168.1.100 15050 testuser testpass123 01 02 03 04 05 06 07 08 09 10 11 12 13 14

DES-ключ здесь пишется десятичными значениями байтов через пробел — ровно 14 чисел. Не hex, а десятичная запись. Байт 0x01 = 01, байт 0x0E = 14, байт 0xFF = 255. Перепутать формат — типичная причина login failed, которую потом долго ищут.

Настройка reader в oscam.server на стороне клиента

Если клиент тоже OScam, добавляем reader в oscam.server:

[reader]
label            = newcamd_remote
protocol         = newcamd
device           = 192.168.1.100,15050
key              = 0102030405060708091011121314
user             = testuser
password         = testpass123
caid             = 0500
group            = 1
reconnecttimeout = 30

Параметр reconnecttimeout = 30 — сколько секунд ждать перед повторным подключением при обрыве. Без явного значения OScam может держать "мёртвый" reader в статусе connected без реальной активной сессии, что приводит к путанице при диагностике.

Отдельный момент — несколько reader с одинаковым CAID в oscam.server. Это создаёт конфликт приоритетов: OScam начинает балансировать ECM-запросы между ними, ECM time скачет, каналы фризят. Если у вас два newcamd reader на один CAID — явно прописывайте приоритет через параметр cccmaxhops или loadbalancemode, либо разведите их по разным группам.

Проверка статуса в веб-интерфейсе OScam

Веб-интерфейс OScam по умолчанию на порту 8888: http://192.168.1.100:8888. Раздел Readers показывает статус каждого reader: должно быть connected с зелёным индикатором. ECM time — среднее время ответа карты в миллисекундах.

Нормальный ECM time — до 300–400 мс. Стабильно выше 800 мс — что-то не так: перегружен канал, длинная цепочка решары, или проблемы с картоприёмником. При ECM time выше 1.5–2 секунд начинаются фризы на каналах, хотя reader формально числится подключённым.

Типичные ошибки и troubleshooting

Порт закрыт или недоступен (connection refused)

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

netstat -tlnp | grep 15050
# или
ss -tlnp | grep 15050

Если вывод пустой — OScam не запустился с этим портом. Причины: ошибка синтаксиса в конфиге, секция [newcamd] не применилась, или порт занят другим процессом. Перезапускаем OScam, читаем лог запуска.

Если порт слушается локально, но снаружи connection refused — iptables или nftables блокируют входящий трафик. Открываем порт:

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

За NAT-роутером этого мало — дополнительно настраиваем проброс порта с внешнего IP на локальный адрес сервера. Без этого клиент из интернета никогда не достучится, даже если firewall открыт на самом сервере.

Несовпадение DES-ключа

Самая частая причина login failed или мгновенного разрыва соединения сразу после рукопожатия. Ключ должен совпадать побайтно: один и тот же 14-байтный DES-ключ на сервере в oscam.conf и на клиенте в oscam.server или newcamd.list.

Частые ошибки: лишние пробелы в hex-строке, путаница между hex и десятичным форматом в newcamd.list, и — внимание — использование 12-байтного ключа на одной стороне и 14-байтного на другой. OScam в логе выдаст login failed: user testuser без дополнительных деталей. Убеждаемся в длине ключа первым делом.

Карта подключена, но нет дешифровки (CW NOT FOUND)

Reader говорит connected, ECM time показывает значения, но каналы не открываются. В логе — CW NOT FOUND. Возможные причины:

  • Неверный CAID или ident: клиент запрашивает канал под CAID, не привязанный к этому порту
  • Пользователь в oscam.user не имеет прав на этот пакет — проверить параметры caid и services
  • Параметр au не включён, карта устарела и не получила EMM-обновление
  • Картоприёмник с устаревшей прошивкой — карта физически читается, но перестала отдавать CW на определённые каналы после обновления шифрования

Проверяем через веб-интерфейс раздел Services — какие CAID и SID реально разрешены для пользователя. Сверяем с тем, что запрашивает клиент в логах ECM-запросов.

Логи OScam и уровень детализации

Запускаем OScam с максимальным дебагом:

oscam -d 255 -l /tmp/oscam.log

Флаг -d 255 — битовая маска, включающая все категории логирования одновременно. Лог лучше писать в /tmp/ — там обычно есть место и нет проблем с правами. На systemd-системах лог также читается через journalctl -u oscam -f.

В секцию [global] oscam.conf добавляем:

[global]
loghistorysize = 2000

Тогда веб-интерфейс показывает последние 2000 строк лога прямо в браузере — удобно для быстрой диагностики без SSH. В логах ищем конкретные строки: login failed, CW NOT FOUND, CAID not found — они сразу указывают на проблему.

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

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

Нужен реальный аптайм за несколько недель, а не обещания. Пинг до сервера — до 100 мс комфортно, 100–200 мс терпимо, выше — ECM time будет расти. Плохой newcamd server с пингом 400 мс даст постоянные фризы даже при локальной карте на той стороне.

Динамический IP сервера — отдельная боль. Если IP меняется без предупреждения, клиент теряет подключение до ручного обновления конфига. Нормальный сервер имеет статический IP или DDNS с коротким TTL (60–120 секунд). Если у вас динамический IP на своём сервере — настройте DDNS через ddclient или inadyn.

Локальные карты против решары

Локальная карта в ридере — это когда сервер сам читает физическую смарт-карту. ECM time минимальный, надёжность максимальная, цепочка зависимостей — одно звено. Решара — когда сервер сам получает CW от другого сервера и пересылает вам. Каждый hop добавляет задержку и точку отказа.

Цепочка из трёх-четырёх решар — почти гарантированные фризы. Идеально — один hop максимум. Спрашивать про hop count — нормальная практика при выборе. В OScam hop count виден в веб-интерфейсе рядом с ECM-ответом.

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

Протокол NewCamd жёстко привязывает порт к CAID. Прежде чем настраивать подключение, нужно точно знать CAID вашего пакета. Ошибиться с CAID — потратить час на диагностику: reader подключится, но CW не пойдут, и непонятно почему.

Проверить CAID канала можно прямо в Enigma2: кнопка Info → Service Info → CAIDs. Или через веб-интерфейс OScam в разделе Services после первого неудачного ECM-запроса — там будет видно, что именно запрашивал клиент и какой CAID использовался.

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

Какой порт по умолчанию использует NewCamd?

Жёсткого стандарта нет. Исторически прижился диапазон 15000–15050, чаще всего встречается 15050. Порт задаётся вручную в oscam.conf, и каждая карта обычно сидит на своём порту. Подойдёт любой свободный порт выше 1024.

Сколько символов должен быть DES-ключ в NewCamd?

14 байт — это 28 hex-символов без пробелов и разделителей в oscam.conf. Ключ должен совпадать побайтно на сервере и клиенте, иначе авторизация не пройдёт. Старый 12-байтный формат (24 символа) не поддерживается современными версиями OScam — не пытайтесь его использовать.

Можно ли раздать несколько карт через один NewCamd порт?

Нет. Один порт — одна карта (CAID). Для нескольких карт открывают несколько портов с разными CAID. Если нужна раздача всех карт через одно подключение — смотрите в сторону CCcam, там архитектура принципиально другая.

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

Чаще всего — несовпадение CAID или ident между запросом клиента и настройкой сервера. Второй вариант — проблема с правами: параметры su/au в oscam.user не настроены, или карта не отдаёт CW. Смотрите логи: строки CW NOT FOUND с указанием CAID и SID скажут конкретно, что именно не сходится.

Чем NewCamd лучше или хуже CCcam?

NewCamd проще для одной карты: меньше overhead, легче дебажить, стабильнее в локальной сети. CCcam удобнее, когда карт много и нужна гибкая раздача разным клиентам. Одна карта — выбор в пользу NewCamd. Много карт для разных клиентов — CCcam.

Как проверить, что NewCamd server слушает порт?

На сервере: netstat -tlnp | grep 15050 или ss -tlnp | grep 15050. Должна появиться строка с LISTEN и процессом oscam. Снаружи: telnet host 15050 — открытый порт даёт пустое соединение, закрытый — connection refused. Если порт закрыт снаружи, но открыт локально — проблема в firewall или отсутствии проброса на роутере.

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

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