Настройка newcamd в Docker: гайд 2026
Если вы читаете это, значит уже знаете, чего хотите: поднять newcamd-сервер или клиент внутри контейнера, и что-то пошло не так. Может, порт не пробрасывается. Может, ридер висит в CONNECTED, а каналы не открываются. Именно под это и заточен материал — newcamd Docker контейнер: настройка с нуля до рабочего состояния, без воды и маркетинга.
Всё примеры ниже — на OScam, потому что именно он сейчас остаётся де-факто стандартом для newcamd как в серверном, так и в клиентском варианте.
Что такое newcamd и зачем запускать его в Docker
Newcamd — TCP-протокол card sharing. Работает поверх обычного TCP-соединения, шифрует сессию 14-байтным DES-ключом (он же записывается как 28 hex-символов). По умолчанию никакого жёстко зашитого порта нет — конфигурируется вручную, но по традиции большинство серверов слушают что-то из диапазона 28000–28010.
В OScam newcamd реализован с обеих сторон: секция [newcamd] в oscam.conf делает из него сервер, а блок [reader] с protocol = newcamd в oscam.server — клиент, который цепляется к удалённому серверу.
Протокол newcamd: порт по умолчанию и DES-ключ
DES-ключ — это не пароль в обычном смысле. Он используется для шифрования всей сессии на транспортном уровне. Длина строго фиксированная: 14 байт, 28 hex-символов. Укоротить или удлинить нельзя. Если ключи на сервере и клиенте не совпадают, соединение технически устанавливается, но данные расшифровываются в мусор — ECM-запросы проходят, ответы не разбираются.
Порт задаётся в формате ПОРТ@CAID:IDENT. Например, 28000@0500:000000 означает: слушать на порту 28000, обслуживать CAID 0x0500 (Viaccess), идентификатор провайдера 0x000000. Можно указать несколько строк для разных CAID.
Почему OScam в контейнере — удобный способ держать newcamd-сервер
Главное удобство — воспроизводимость. Зафиксировал тег образа, и через полгода поднимаешь ровно ту же версию OScam на новом железе за три команды. Никаких проблем с зависимостями libc, конфликтующими пакетами или системными библиотеками.
Плюс изоляция: процесс OScam не видит остальную систему. Если что-то сломается — удаляешь контейнер, пересоздаёшь. Конфиги при этом живут на хосте в смонтированном томе и никуда не деваются.
Когда контейнеризация оправдана, а когда лишняя
Docker здесь избыточен в одном сценарии: если у вас локальная DVB-карта и вы хотите использовать её как internal-ридер. В bridge-режиме устройство /dev/dvb/adapter0 недоступно без явного проброса через --device, а с host-режимом теряется изоляция. Если вся работа — проксировать newcamd-линии от удалённых серверов клиентам, Docker отлично подходит.
Подготовка образа и структуры конфигов
Первое, что нужно решить до запуска контейнера — куда ляжет конфигурация и под каким UID будет работать процесс OScam внутри.
Выбор образа OScam с поддержкой newcamd
На Docker Hub есть несколько неофициальных образов OScam. Смотрите на то, собран ли бинарник с флагом --enable-protocol-newcamd — без него секция [newcamd] в конфиге просто игнорируется без каких-либо ошибок, что очень удобно для трёхчасовой отладки несуществующей проблемы.
Проверить можно так:
docker run --rm your-oscam-image oscam --build-info | grep -i newcamd
Если строка есть — всё нормально. Если нет — нужен другой образ или самосборка.
Том для конфигов: /var/keys или /config
Путь зависит от образа. Большинство популярных сборок монтируют конфиги в /var/keys или /config. Проверьте ENTRYPOINT в Dockerfile или документацию образа. Пример монтирования:
-v /opt/oscam/config:/var/keys
Главное правило: конфиги всегда на хосте. Никогда не храните их только внутри слоя образа — при docker pull новой версии всё потеряете.
Проверьте UID. Если OScam внутри запускается от пользователя с UID 1000, а файлы на хосте принадлежат root, он не сможет писать oscam.log — будете отлаживать вслепую. Исправляется через chown 1000:1000 /opt/oscam/config на хосте или через параметр --user при запуске контейнера.
Минимальный набор файлов: oscam.conf, oscam.server, oscam.user
Для работы newcamd-сервера нужны три файла:
oscam.conf— глобальные настройки и секции[global],[newcamd],[webif]oscam.server— ридеры (если OScam выступает клиентом к другому серверу)oscam.user— учётные записи клиентов, которые подключаются к вашему серверу
Файл oscam.dvbapi нужен только если используется локальная карта. oscam.services — опционально, для фильтрации каналов по сервисам.
Конфигурация newcamd-сервера в OScam
Вот где большинство руководств дают конфиг, но не объясняют синтаксис. Разберём по частям.
Секция [newcamd]: key, port, allowed
В файле /var/keys/oscam.conf (путь внутри контейнера) добавляете:
[newcamd]
key = 0102030405060708091011121314
port = 28000@0500:000000
allowed = 192.168.1.0/24,10.0.0.0/8
keepalive = 1
Параметр key — это и есть тот самый 14-байтный DES-ключ, записанный как 28 hex-символов. Пример выше — учебный, в продакшне ставьте что-то менее очевидное. allowed ограничивает, каким подсетям разрешено подключение на уровне протокола — хорошая практика.
Привязка CAID к порту в параметре port
Синтаксис ПОРТ@CAID:IDENT позволяет жёстко привязать порт к конкретной системе условного доступа. Если хотите несколько CAID на разных портах:
port = 28000@0500:000000|28001@0604:000000|28002@1800:000000
Это одна строка. Три порта: 28000 для Viaccess (0500), 28001 для Irdeto (0604), 28002 для Nagravision (1800). Все три порта потом надо пробросить в Docker — ниже разберём как.
Если написать просто port = 28000 без CAID, сервер будет отвечать на запросы по всем доступным системам. Это удобнее в начале, но менее контролируемо.
Создание учётной записи клиента в oscam.user
Файл /var/keys/oscam.user:
[account]
user = testclient
pwd = secretpass
group = 1
au = 1
monlevel = 0
Клиент подключается с этим логином и паролем. Параметр group должен совпадать с группой ридера, который отдаёт карту — иначе декодирования не будет, хотя соединение будет выглядеть нормально. Это одна из самых частых причин «CONNECTED без декода».
Проброс портов и сетевые режимы Docker
Именно здесь кроется большинство проблем при newcamd Docker контейнер: настройка в реальных условиях. Docker networking — не очевидная тема.
Режим bridge с -p 28000:28000
По умолчанию контейнер работает в bridge-режиме. Порты снаружи не видны, пока их явно не опубликовать:
docker run -d \
--name oscam \
-p 28000:28000 \
-v /opt/oscam/config:/var/keys \
your-oscam-image
Если newcamd слушает на нескольких портах — пробрасывать каждый отдельно:
-p 28000:28000 -p 28001:28001 -p 28002:28002
Или диапазоном, если порты последовательные:
-p 28000-28002:28000-28002
Важно: убедитесь, что на хосте эти порты не заняты другим процессом. Проверить: ss -tlnp | grep 280. Если порт занят, Docker молча не сообщит об ошибке при docker run — только при попытке подключения клиент получит отказ.
Когда нужен network_mode: host
С network_mode: host контейнер использует сетевой стек хоста напрямую. Никаких NAT, никакого проброса — OScam слушает на 28000, и снаружи это видно напрямую.
Удобно в двух случаях: много портов (10+ newcamd-линий под разные CAID) или нужна работа с локальными DVB-устройствами и multicast. Минус — теряете изоляцию сети и риск конфликтов портов становится выше.
Несколько newcamd-портов под разные CAID
Эквивалент в docker-compose.yml:
version: "3.8"
services:
oscam:
image: your-oscam-image
container_name: oscam
volumes:
- /opt/oscam/config:/var/keys
ports:
- "28000:28000"
- "28001:28001"
- "28002:28002"
restart: unless-stopped
Или с host-сетью:
version: "3.8"
services:
oscam:
image: your-oscam-image
container_name: oscam
network_mode: host
volumes:
- /opt/oscam/config:/var/keys
restart: unless-stopped
С network_mode: host секцию ports убираете полностью — она игнорируется в этом режиме.
Подключение newcamd-клиента (ридера)
Если ваш контейнер выступает клиентом — подключается к удалённому newcamd-серверу — конфиг ридера идёт в /var/keys/oscam.server.
Блок [reader] с protocol = newcamd
[reader]
label = my_newcamd_server
protocol = newcamd
device = 192.168.1.100,28000
key = 0102030405060708091011121314
user = testclient
password = secretpass
caid = 0500
group = 1
reconnecttimeout = 15
Параметр device — это адрес сервера и порт через запятую. Можно использовать hostname, но DNS-резолвинг внутри контейнера должен работать — проверьте, что /etc/resolv.conf в контейнере указывает на рабочий резолвер.
Параметры device, key, user, password
key должен быть ровно тем же 28-символьным hex, что прописан в секции [newcamd] на сервере. Ни больше, ни меньше. user и password совпадают с блоком [account] в oscam.user сервера.
Параметр caid в ридере — подсказка OScam, для каких систем пробовать этот ридер. Если сервер отдаёт несколько CAID, можно перечислить через запятую: caid = 0500,0604.
Проверка статуса ридера в веб-интерфейсе OScam
Включите webif в oscam.conf:
[webif]
httpport = 8888
httpuser = admin
httppwd = adminpass
Пробросьте порт 8888 при запуске контейнера и откройте http://хост:8888. В разделе Readers смотрите статус: CONNECTED — TCP-соединение есть, CARD — карта определена и отдаёт ECM-ответы, UNAVAILABLE — нет соединения вообще.
Статус CONNECTED без CARD — это логическая проблема, не сетевая. Соединение есть, но что-то мешает получить ответ на ECM-запросы. Смотреть надо в oscam.log.
Диагностика и устранение типичных ошибок
Большинство проблем при newcamd Docker контейнер: настройка делятся на два класса: сетевые (клиент вообще не может достучаться до порта) и логические (соединение есть, но декодирования нет). Их диагностика принципиально разная.
Ридер CONNECTED, но нет декодирования
Это логическая проблема. Чек-лист:
- Проверить
groupвoscam.userиoscam.server— они должны совпадать - Убедиться, что CAID/ident в запросе совпадает с тем, что прописано на сервере
- Проверить, что у аккаунта в
oscam.userнет ограничений по сервисам (services/ident) - Повысить уровень отладки и читать лог:
loghistorysize = 4000иdebug = 64в секции[global]
В логах ищите строки с ECM — там будет видно, получает ли сервер запрос и что отвечает.
Ошибка несовпадения DES-ключа
При несовпадении ключа OScam обычно показывает ошибку вроде invalid DES key length или соединение устанавливается, но сразу разрывается. В лог-файле будет строка с decrypt error или handshake failed.
Частая причина: где-то скопировали ключ с пробелом в начале или конце, или вставили 26 символов вместо 28. Всегда считайте длину перед сохранением.
Контейнер не слушает порт: проверка через ss/netstat
Сначала убедитесь, что OScam внутри контейнера вообще слушает нужный порт:
docker exec oscam ss -tlnp
Или через netstat, если ss недоступен:
docker exec oscam netstat -tlnp 2>/dev/null | grep 28000
Если порт не слушается изнутри — проблема в конфиге OScam, а не в Docker. Если слушается, но снаружи недоступен — проблема в проброске или firewall хоста.
Проверка firewall:
iptables -L DOCKER -n -v | grep 28000
Docker обычно сам добавляет правила в цепочку DOCKER, но некоторые дистрибутивы с агрессивными политиками по умолчанию могут блокировать трафик до того, как он туда доходит. Проверьте также цепочку INPUT.
Логи OScam: debug-уровни и фильтры
В секции [global] файла oscam.conf:
[global]
logfile = /var/keys/oscam.log
loghistorysize = 4000
debug = 64
Значение debug = 64 включает подробный лог newcamd-протокола. Значение 255 — максимум, но это очень много текста. Для диагностики конкретного ридера удобнее использовать веб-интерфейс: раздел Logs с фильтром по имени ридера.
И ещё один момент, который часто упускают: часовой пояс внутри контейнера. Если контейнер живёт в UTC, а хост в Europe/Moscow, метки времени в oscam.log будут на 3 часа позади системного времени. Это не критично, но сбивает с толку при сопоставлении событий с другими логами. Исправляется переменной окружения: -e TZ=Europe/Moscow при запуске.
Итого: полная схема newcamd Docker контейнер: настройка сводится к правильно подобранному образу, конфигам на хосте через том, явному проброску всех newcamd-портов и пониманию разницы между сетевой и логической ошибкой.
Какой порт использует newcamd по умолчанию?
Жёстко зафиксированного порта по умолчанию нет — это не HTTP и не SSH. По традиции сложился диапазон от 28000, но выбор за вами. Порт прописывается вручную в параметре port секции [newcamd] в формате ПОРТ@CAID:IDENT, например 28000@0500:000000. Если CAID и ident не важны — можно писать просто port = 28000.
Какой длины должен быть DES-ключ newcamd?
Ровно 14 байт, что в hex-записи даёт 28 символов. Не 26, не 30 — именно 28. Ключ должен быть идентичен на сервере и клиенте посимвольно. Если ключи не совпадают, соединение может установиться, но сессия не расшифруется нормально — ECM-запросы будут уходить в никуда.
Нужен ли режим network host или достаточно bridge?
Для одного-двух newcamd-портов достаточно bridge с явным -p 28000:28000. Режим network_mode: host оправдан, когда портов много (10+) или нужна работа с локальными DVB-устройствами и multicast-трафиком. В bridge-режиме локальные устройства вроде /dev/dvb/adapter0 недоступны без явного --device.
Почему ридер показывает CONNECTED, но каналы не открываются?
TCP-соединение установлено, но проблема логическая. Чаще всего виноват один из четырёх факторов: несовпадение группы в oscam.user и oscam.server, неверный CAID или ident, несовпадение DES-ключа на уровне ECM-обмена, или у аккаунта нет прав на нужный сервис. Включайте debug = 64 в oscam.conf и читайте oscam.log — там будет видно, что именно OScam говорит на ECM-запрос.
Как сохранить конфиги при пересоздании контейнера?
Монтировать директорию конфигов как том: -v /opt/oscam/config:/var/keys. Тогда oscam.conf, oscam.server и oscam.user живут на хосте и переживают любое пересоздание контейнера или обновление образа. Никогда не держите рабочие конфиги только внутри слоя образа.
Можно ли запустить несколько newcamd-портов под разные CAID в одном контейнере?
Да. В параметре port секции [newcamd] перечисляете несколько пар через |: port = 28000@0500:000000|28001@0604:000000. Каждый порт потом нужно явно пробросить в Docker: -p 28000:28000 -p 28001:28001. Либо используйте network_mode: host и тогда проброс не нужен совсем.
Практические советы для стабильного просмотра
Даже самая стабильная линия 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 или внешние мониторы.