Настройка newcamd в Docker: полный гайд 2026
Если вы занимаетесь newcamd Docker контейнер: настройка — этот материал написан именно для вас. Не для новичков, которые впервые открыли терминал, а для тех, у кого уже работает OScam или CCcam на голом железе и кто хочет переехать в контейнер без потери конфига и нервов. Я прошёл этот путь сам — расскажу, где реально спотыкаются и что в документации написано криво.
Что такое newcamd и зачем запускать его в Docker
Newcamd — это TCP-протокол передачи control words между сервером карт и клиентом. Шифрование DES с 14-байтным ключом, который должен совпадать на обоих концах. Порт по умолчанию — 15000, хотя это просто соглашение, а не стандарт.
Важный момент, который многие упускают: newcamd сам по себе — не отдельный демон. В OScam это протокол сервера, который включается секцией [newcamd] в oscam.conf. Никакого отдельного бинарника нет. Поэтому в контейнер кладут именно OScam с активированным newcamd-сервером.
Протокол newcamd в двух словах: TCP, DES-шифрование, порт 15000
Клиент (OScam, CCcam, MGcamd в клиентском режиме) коннектится на TCP-порт, проходит DES-рукопожатие с обменом ключами и после этого может слать ECM-запросы. Сервер отвечает CW. Всё это летит по одному TCP-соединению, пока клиент или сервер его не разорвёт.
Каждый CAID живёт на своём порту. Например, 15000 для 0500, 15001 для 0604. Это не опция — это архитектурное ограничение протокола newcamd. Держите это в голове, когда будете настраивать Docker-сеть.
Преимущества контейнеризации: изоляция, откат, повторяемая сборка
Docker реально удобен, когда у вас несколько инстансов OScam — например, один для тестирования новых ридеров, второй в продакшне. Откатиться на прошлую версию образа — одна команда. Воспроизвести ту же конфигурацию на другом хосте — тоже.
Ещё один плюс: обновление OScam без пересборки конфига. Конфиги лежат в volume на хосте, образ пересобирается или скачивается заново — и всё. Никаких ручных копирований файлов.
Когда Docker избыточен, а когда оправдан
Честно: если у вас один сервер, одна карта и десять клиентов — Docker добавляет лишний сетевой слой, который только усложняет отладку. При проблемах с подключением вы будете разбираться не только с oscam, но и с сетью контейнера, iptables и NAT.
Но если вы управляете несколькими инстансами, хотите CI/CD для конфигов или просто цените воспроизводимость — контейнер полностью оправдан. Особенно если хост уже крутит что-то ещё и вы не хотите конфликтов зависимостей.
Подготовка образа и структуры каталогов
Главное правило: конфиги не должны попасть внутрь образа через COPY. Монтируйте через volume — тогда можно менять oscam.conf и перезапускать контейнер без пересборки образа.
Выбор базового образа: сборка OScam из исходников vs готовый образ
Готовые образы с Docker Hub есть, но я рекомендую собирать самому — хотя бы потому, что вы точно знаете, какие модули включены. OScam без поддержки newcamd-сервера просто не создаст нужный listener. Убедитесь, что сборка включает MODULE_NEWCAMD.
Для сборки нужны gcc, make, libssl-dev, libpcsclite-dev (если используете смарт-карту через PC/SC), опционально libusb-dev. Финальный образ можно сделать на alpine или debian-slim — они весят меньше.
Структура тома: /config, oscam.conf, oscam.server, oscam.user
Стандартная схема: хостовая папка ./oscam-config монтируется в /usr/local/etc внутри контейнера (это дефолтный путь для OScam). В этой папке должны лежать:
oscam.conf— основная конфигурация, включая секцию[newcamd]oscam.server— ридеры и смарт-картыoscam.user— пользователи для клиентовoscam.services— фильтрация сервисов (опционально)oscam.ac— access control (если используете)
Пример Dockerfile с компиляцией OScam и включённым webif
# Stage 1: сборка
FROM debian:bookworm-slim AS builder
RUN apt-get update && apt-get install -y \
git gcc make libssl-dev libpcsclite-dev \
libusb-1.0-0-dev pkg-config \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /build
RUN git clone https://github.com/oscam-emu/oscam-patched.git .
RUN make CONF_DIR=/usr/local/etc \
USE_LIBSSL=1 \
USE_PCSC=1 \
MODULE_NEWCAMD=1 \
CS_ANTICASC=1 \
WEBIF=1 \
-j$(nproc)
# Stage 2: финальный образ
FROM debian:bookworm-slim
RUN apt-get update && apt-get install -y \
libssl3 libpcsclite1 libusb-1.0-0 \
&& rm -rf /var/lib/apt/lists/*
RUN useradd -r -s /bin/false oscam
COPY --from=builder /build/oscam /usr/local/bin/oscam
RUN chmod 755 /usr/local/bin/oscam
VOLUME ["/usr/local/etc"]
EXPOSE 15000 8888
USER oscam
CMD ["/usr/local/bin/oscam", "-f", "-c", "/usr/local/etc"]
Права доступа к файлам конфигурации и владелец процесса
Файлы с DES-ключами и паролями пользователей — ставьте chmod 600 и владельца того же UID, под которым запускается oscam. В примере выше это пользователь oscam. Запуск от root — это плохой тон даже в контейнере.
На хосте: chown 999:999 ./oscam-config/* (если UID пользователя oscam внутри контейнера — 999) и chmod 600 ./oscam-config/oscam.conf. Иначе oscam при запуске может ругаться или игнорировать файл.
Конфигурация newcamd-сервера в OScam
Вот где большинство гайдов в интернете дают неполную картину. Секция [newcamd] в oscam.conf выглядит просто, но в ней есть нюансы, которые стоят часов отладки.
Секция [newcamd] в oscam.conf: key, port, allowed
[newcamd]
key = 0102030405060708091011121314
port = 15000@0500:000000,000000
keepalive = 1
mgclient = 0
allowed = 192.168.1.0/24,10.0.0.0/8
Формат параметра port — вот что путает людей: порт@CAID:ident1,ident2. То есть 15000@0500:000000 означает «слушать порт 15000, обслуживать CAID 0x0500, принимать все ident». Если у вас два CAID — нужна новая строка port с другим портом:
port = 15000@0500:000000
port = 15001@0604:000000
port = 15002@1830:000000
Параметр mgclient = 0 — выключить совместимость с MGcamd-клиентами. Если ваши клиенты — OScam в режиме newcamd525, оставляйте 0.
Генерация и назначение 14-байтного DES-ключа
Ключ — ровно 14 байт, то есть 28 шестнадцатеричных символов. Генерируется просто:
openssl rand -hex 14
# Пример: 3a7f2b8c1d4e5f6a7b8c9d0e1f2a
Частая ошибка — ключ из 26 или 30 символов. OScam при этом не упадёт с ошибкой, а просто будет тихо отклонять все подключения. Клиент покажет «connection refused» или «wrong key», и вы будете гадать долго. Считайте символы дважды.
Настройка пользователей в oscam.user для доступа по newcamd
[account]
user = myclient
pwd = secretpass
group = 1
au = 1
uniq = 0
allowedprotocols = newcamd
Параметр au = 1 включает автообновление прав через этого пользователя. group должен совпадать с группами ридеров в oscam.server. Без этого совпадения ридер просто не будет доступен для пользователя — классическая ошибка «no matching reader».
Привязка ридеров и профилей CAID/провайдеров
В oscam.server ридер должен указывать те же группы:
[reader]
label = my_card
protocol = mouse
device = /dev/ttyUSB0
caid = 0500
group = 1
ident = 0500:000000
Если ридер — USB-смарт-карта, не забудьте пробросить устройство в контейнер (об этом ниже). И убедитесь, что CAID в ридере совпадает с CAID в строке port секции [newcamd].
Сеть Docker: проброс портов и режимы
Сетевая часть — самое болезненное место при newcamd Docker контейнер: настройка. Особенно когда CAID несколько и каждый требует своего порта.
Публикация порта: -p 15000:15000 и несколько CAID-портов
При запуске через docker run каждый порт — отдельный флаг:
docker run -d \
-p 15000:15000 \
-p 15001:15001 \
-p 15002:15002 \
-p 8888:8888 \
-v $(pwd)/oscam-config:/usr/local/etc \
--name oscam \
my-oscam-image
Или диапазон: -p 15000-15005:15000-15005. Это проще, но Docker резервирует весь диапазон, даже если реально используются только три порта.
Bridge vs host network для newcamd
Bridge-сеть — это дефолт Docker. Контейнер получает свой IP (обычно 172.17.x.x), а порты публикуются через NAT. Для newcamd это работает, но вы обязаны явно пробросить каждый используемый порт. Преимущество — настоящая изоляция: контейнер не видит весь хостовый трафик.
network_mode: host — контейнер использует сетевой стек хоста напрямую. OScam слушает 15000 так, как будто запущен без Docker. Никаких флагов -p не нужно. Это удобно при большом количестве CAID-портов, но изоляции сети нет совсем — контейнер видит весь сетевой интерфейс хоста. Для продакшна я предпочитаю bridge с явным пробросом.
docker-compose.yml с ports, volumes и restart: unless-stopped
version: "3.9"
services:
oscam:
build: .
container_name: oscam-newcamd
restart: unless-stopped
ports:
- "15000:15000"
- "15001:15001"
- "15002:15002"
- "8888:8888"
volumes:
- ./oscam-config:/usr/local/etc
devices:
- /dev/ttyUSB0:/dev/ttyUSB0 # если есть USB-ридер
environment:
- TZ=Europe/Moscow
healthcheck:
test: ["CMD", "nc", "-z", "localhost", "15000"]
interval: 30s
timeout: 5s
retries: 3
start_period: 10s
Переменная TZ критична. Если часовой пояс контейнера не совпадает с часовым поясом клиента — могут появиться странные проблемы с keepalive и тайм-аутами ECM. OScam использует системное время для логов и внутренних таймеров.
Firewall, NAT и внешний доступ клиентов
После запуска контейнера проверьте, что порт открыт на хосте:
# Проверка снаружи
telnet your-host-ip 15000
# Открыть порт в ufw
ufw allow 15000/tcp
ufw allow 15001/tcp
# Или через iptables
iptables -A INPUT -p tcp --dport 15000 -j ACCEPT
При двойном NAT (контейнер → хост → роутер → интернет) нужно пробросить порт и на роутере. Если клиент всё равно не подключается — проверяйте каждый слой по очереди, а не всё сразу.
Проверка, логи и типовые ошибки
Когда newcamd Docker контейнер: настройка завершена и контейнер запущен — нужно убедиться, что всё реально работает, а не просто «процесс запустился».
Чтение docker logs и oscam webif (порт 8888)
# Следить за логами в реальном времени
docker logs -f oscam-newcamd
# Последние 100 строк
docker logs --tail 100 oscam-newcamd
В oscam.conf добавьте в секцию [global]:
[global]
logfile = /usr/local/etc/oscam.log
loghistorysize = 4096
loglevel = 4
Webif доступен на порту 8888. В разделе Status → Clients виден каждый подключённый newcamd-клиент: его IP, время последнего ECM-запроса, CAID, время декодирования в миллисекундах. Если клиент подключился, но ECM не декодируются — проблема в ридере, а не в сети.
Диагностика connection refused и wrong DES key
Connection refused — порт не проброшен или OScam вообще не запустил listener. Проверьте: docker exec oscam-newcamd netstat -tlnp | grep 15000. Если порта нет — смотрите в лог запуска OScam, скорее всего ошибка парсинга конфига.
Client disconnected сразу после соединения — почти всегда несовпадение DES-ключа. Проверьте длину ключа (28 символов), убедитесь, что клиентский ридер в oscam.server содержит key = 0102030405060708091011121314 и протокол newcamd525.
No matching reader — пользователь в oscam.user не имеет общей группы с ридером. Сверьте group = в oscam.user и group = в oscam.server.
Проверка ECM-ответов и времени декодирования
Нормальное время ECM для локальной карты — 50–300 мс. Если видите 2000+ мс или вообще тайм-аут — ридер не отвечает. Для USB-карты проверьте, что устройство пробброшено корректно:
docker exec oscam-newcamd ls -la /dev/ttyUSB0
# Должно быть видно устройство, а не "No such file"
Для проброса USB-смарт-карты нужен флаг --device /dev/ttyUSB0:/dev/ttyUSB0 или соответствующая секция devices: в compose. Без этого oscam не увидит карту физически, хотя процесс запустится без ошибок. Также убедитесь, что на хосте настроены udev-правила для устройства, иначе в контейнере не будет прав на доступ.
Отладка сети между контейнерами через docker network
Если клиент — это другой контейнер (например, другой OScam в клиентском режиме), подключение через 127.0.0.1 не сработает. Используйте имя сервиса из compose или явный IP контейнера:
# Узнать IP контейнера
docker inspect oscam-newcamd | grep IPAddress
# Проверить связность изнутри другого контейнера
docker exec oscam-client nc -zv oscam-newcamd 15000
# Или по имени сервиса, если они в одной сети
docker exec oscam-client nc -zv oscam-newcamd 15000
Контейнеры из одного docker-compose.yml автоматически попадают в общую bridge-сеть и видят друг друга по имени сервиса. Контейнеры из разных compose-файлов — нет, их нужно явно объединять через external: true сеть.
Это не очевидный момент в newcamd Docker контейнер: настройка, но именно он часто вызывает «контейнер запущен, конфиг правильный, а клиент не видит сервер».
Частые вопросы
Какой порт по умолчанию использует newcamd и можно ли его изменить?
Стандарт — TCP 15000. Меняется параметром port в секции [newcamd] файла oscam.conf. Каждый CAID требует отдельного порта — например, 15000 для 0500 и 15001 для 0604. При работе через Docker нужно явно публиковать все используемые порты через -p или секцию ports: в compose.
Почему клиент не подключается, хотя контейнер запущен?
Чеклист по порядку: проверьте, что порт опубликован (-p 15000:15000), что DES-ключ ровно 28 hex-символов и одинаков на сервере и клиенте, что логин и пароль в oscam.user совпадают с клиентским конфигом, что firewall на хосте не блокирует порт, и что режим сети (bridge или host) настроен правильно. В 80% случаев это DES-ключ или проброс порта.
Как правильно сгенерировать DES-ключ для newcamd?
Командой openssl rand -hex 14. Результат — 28 шестнадцатеричных символов, то есть 14 байт. Ключ должен быть идентичен в oscam.conf на сервере и в строке key = клиентского ридера (protocol = newcamd525). Файл с ключом держите с правами 600, иначе OScam может отказаться его читать.
Нужно ли использовать network_mode: host или достаточно bridge?
Для одного-двух портов bridge с явным -p — нормальное решение и даёт изоляцию сети. network_mode: host удобен, если у вас много CAID-портов и не хочется перечислять каждый вручную, но тогда контейнер работает в сетевом пространстве хоста без изоляции. Для продакшна я выбираю bridge.
Как обновить OScam в контейнере без потери конфигурации?
Именно для этого конфиги лежат в volume на хосте, а не внутри образа. Пересоберите образ (docker compose build) или скачайте новый (docker compose pull), затем docker compose up -d. Контейнер пересоздастся с новым образом, но volume с oscam.conf и остальными файлами останется нетронутым.
Можно ли запустить несколько newcamd-серверов в разных контейнерах?
Да, без проблем. Каждому контейнеру — отдельный volume с конфигом и отдельный набор хостовых портов. Например, первый контейнер публикует 15000:15000, второй — 16000:15000 (внутри оба слушают 15000, но на хосте разные порты). В docker-compose.yml это два разных сервиса с разными именами. Главное — не допустить конфликта хостовых портов.
Практические советы для стабильного просмотра
Даже самая стабильная линия 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 или внешние мониторы.