Card Server: настройка CCcam/OScam с нуля (2026)

Card server — это не просто программа на Linux-сервере. Это инфраструктура, которая позволяет одной физической смарт-карте обслуживать несколько ресиверов одновременно через сеть. Поднять такой сервер самостоятельно реально за один вечер, если понимаешь как работает стек изнутри. Вот что нужно знать.

Что такое card server и как он работает

Схема простая, но понять её важно до того, как лезть в конфиги. Смарт-карта сидит в USB-ридере (Phoenix, SmartReader+), ридер подключён к серверу. Сервер запускает softcam — OScam или CCcam. Клиент на ресивере шлёт ECM-запрос на сервер по сети (через newcamd или cccam-протокол). Сервер передаёт запрос карте, карта возвращает control word (CW), сервер отправляет CW обратно клиенту. Ресивер расшифровывает поток.

Текстом диаграмма выглядит так:

[Ресивер/dvbapi] → [Сеть: newcamd/cccam] → [Softcam на сервере] → [Ридер] → [Смарт-карта]

Архитектура: card reader, server, client

Три компонента работают последовательно. Card reader (физический) — это USB-девайс с контактным гнездом для карты: SmartReader+ или классический Phoenix. Сервер — Linux-машина с softcam, который слушает входящие соединения на портах. Клиент — ресивер (Dreambox, VU+, OpenATV) с установленным dvbapi или встроенным emus.

Важный момент: на одном сервере можно держать несколько физических ридеров с разными картами и разными CAID. OScam обрабатывает маршрутизацию ECM-запросов автоматически — смотрит в конфиг и направляет запрос к нужной карте.

Роль ECM и EMM в дешифровке потока

ECM (Entitlement Control Message) — это зашифрованное сообщение в потоке, которое содержит control word. CW меняется каждые 7–10 секунд. Именно поэтому ECM-time критичен: если сервер не успел вернуть CW до смены — канал замерзает на секунду.

EMM (Entitlement Management Message) — другая история. Это сообщения от провайдера для обновления прав на карте: активация пакетов, продление подписки. EMM приходит реже, но если их не обрабатывать — карта со временем теряет права. В OScam это настраивается через параметр emmcache и saveem в секции ридера.

Чем card server отличается от локальной CAM

При локальном CI-модуле или встроенном ридере карта физически в ресивере и обслуживает только его. Card server убирает это ограничение: одна карта через сеть отвечает на запросы от пяти, десяти клиентов. Задержка добавляется (~20–100ms на LAN), но на практике незаметна при нормальной инфраструктуре.

Есть и обратная сторона: если сервер упал — все клиенты без картинки одновременно. Поэтому стабильность 24/7 и мониторинг важны не как опция, а как обязательное требование.

Выбор софта: OScam vs CCcam vs MgCamd

В 2026 году выбор по сути уже сделан сообществом. Но разберём что к чему, чтобы понимать почему.

OScam — open source, активная разработка

OScam (Open Source Cam) — это стандарт де-факто для самостоятельной сборки. Открытый код, активные коммиты в svn-репозитории, поддержка всех актуальных CAID, протоколов newcamd/cccam/gbox/camd35/cs378x. Конфиги текстовые и читаемые. WebIF на порту 8888 показывает статистику в реальном времени — ECM-time, подключённых клиентов, статус карты.

Минус — сборка из исходников требует времени и зависимостей. Готовые бинари для Debian x86_64 есть, но лучше собирать самому — так знаешь что внутри.

CCcam — проприетарный, исторически популярный

CCcam — закрытый бинарь, разработка де-факто остановлена. Последние версии (2.3.x) продолжают работать, конфиг /etc/CCcam.cfg очень простой. Исторически популярен на Dreambox — там его ставили из ipk-пакетов. Поддерживает cccam-протокол (неожиданно), newcamd, gbox.

Проблема: закрытый код, нет патчей под новые CAID, нет активного сообщества. Для нового сервера в 2026 — нет смысла. Разве что у тебя старый Dreambox 800 и готовый конфиг, который просто работает.

MgCamd — лёгкий клиент, не полноценный сервер

MgCamd — это клиент, не сервер. Он работает на ресивере как emus и подключается к внешнему серверу через newcamd/cccam. Ставить его как серверный softcam — неправильное использование. Лёгкий, быстрый, хорош для клиентской стороны на слабом железе (старые Dreambox, Vu+).

Критерии выбора под задачу

Если поднимаешь сервер с физической картой — OScam без вариантов. Если нужен клиент на ресивере — смотри что поддерживает твой образ OpenATV/OpenPLi: обычно это OScam или MgCamd. Проверь какую архитектуру требует бинарь (ARM для ресивера, x86_64 для VPS). Размер бинаря OScam после сборки — около 2–4 MB, зависит от включённых модулей через cmake.

Установка OScam на Debian/Ubuntu с нуля

Тестировал на Debian 12 (Bookworm) и Ubuntu 24.04 LTS. Процесс одинаковый.

Зависимости: build-essential, cmake, libssl-dev, libpcsclite-dev

apt update && apt install -y \
  build-essential cmake subversion \
  libssl-dev libusb-1.0-0-dev \
  pcscd libpcsclite-dev pkg-config

pcscd нужен если используешь PCSC-ридер. Для USB-ридеров типа SmartReader+ — libusb достаточно. Но поставь оба, лишними не будут.

Сборка из исходников через cmake

svn checkout https://svn.streamboard.tv/oscam/trunk oscam-src
cd oscam-src
mkdir build && cd build
cmake .. -DWEBIF=1 -DREADER_SMARTREADER=1 -DPROTOCOL_NEWCAMD=1 -DPROTOCOL_CCCAM=1
make -j$(nproc)
make install

Флаги cmake выбирай под задачу. -DREADER_SMARTREADER=1 нужен для SmartReader+ через USB. -DWEBIF=1 включает веб-интерфейс. После make install бинарь окажется в /usr/local/bin/oscam.

Создание systemd unit для автозапуска

Создаём файл /etc/systemd/system/oscam.service:

[Unit]
Description=OScam Card Server
After=network.target pcscd.service
Wants=pcscd.service

[Service]
Type=simple
ExecStart=/usr/local/bin/oscam -b -c /usr/local/etc/oscam
Restart=on-failure
RestartSec=5
User=root

[Install]
WantedBy=multi-user.target

Строчка After=pcscd.service критична. Если её нет — OScam стартует раньше pcscd и не найдёт PCSC-ридер при загрузке. Классическая ловушка.

systemctl daemon-reload
systemctl enable --now oscam
systemctl status oscam

Размещение конфигов в /usr/local/etc/

Директория конфигов: /usr/local/etc/oscam/. Основные файлы:

  • oscam.conf — глобальные настройки, протоколы, WebIF
  • oscam.server — настройки ридеров и карт
  • oscam.user — аккаунты клиентов
  • oscam.dvbapi — для локального dvbapi (если сервер и клиент на одной машине)
mkdir -p /usr/local/etc/oscam
mkdir -p /var/log/oscam

Настройка ридера и подключение смарт-карты

Phoenix/SmartReader+ через USB

Подключи ридер, потом:

dmesg | tail -20

Увидишь что-то вроде usb 2-1: new full-speed USB device и cp210x converter now attached to ttyUSB0. Запомни имя устройства — у тебя может быть ttyUSB1 или ttyUSB2 если ридеров несколько.

lsusb | grep -i smart

Если устройство есть в lsusb но OScam его не видит — проблема с правами. Быстрое решение:

chmod 666 /dev/ttyUSB0

Постоянное решение через udev:

# /etc/udev/rules.d/99-smartreader.rules
KERNEL=="ttyUSB*", MODE="0666"
SUBSYSTEM=="usb", ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea61", MODE="0666"
udevadm control --reload-rules && udevadm trigger

Внутренний ридер через PCSC

Если ридер распознаётся как PC/SC (многие USB-ридеры на базе CCID), работай через pcscd. В oscam.server используй protocol = pcsc вместо smartreader. Убедись что pcscd запущен: systemctl status pcscd.

Секция [reader] в oscam.server

[reader]
label         = my_card
protocol      = smartreader
device        = /dev/ttyUSB0
mhz           = 600
cardmhz       = 369
detect        = CD
group         = 1
caid          = 0500
emmcache      = 1,3,2
saveem        = 1

Параметр cardmhz — частота коммуникации с картой. Стандарт 368–369. Некоторые карты требуют 357. Если карта не инициализируется — попробуй 357, потом 600, потом 368. Это одна из самых частых причин "ATR not read".

group = 1 здесь должен совпадать с group в аккаунте пользователя в oscam.user. Несоответствие — и клиент подключён, но не декодирует.

Проверка инициализации карты в логах

tail -f /var/log/oscam/oscam.log | grep -E "ATR|card|CAID"

Нормальный запуск выглядит так: сначала card detected, потом строка с ATR (длинная hex-строка), потом providers: 1 и CAID вроде 0500/000000. Если вместо этого card not responding — смотри частоту и питание.

Кстати, USB-хаб без внешнего питания — распространённая причина нестабильного ATR. Карта инициализируется, но под нагрузкой ECM-time скачет до 2000ms и выше. Ридер напрямую в материнский USB-порт.

Протоколы newcamd и cccam: настройка клиентских подключений

newcamd: порт 15000+, DES-ключ, по одному порту на CAID

newcamd — бинарный протокол, разработан NDS/Mascom. Каждый CAID требует отдельного порта. Конфиг в oscam.conf:

[newcamd]
port        = 15000@0500:000000
key         = 0102030405060708091011121314
nodeid      = auto

14-байтный DES-ключ должен совпадать с ключом на клиенте. Если у тебя два CAID (например, 0500 и 1702) — добавляй порт для каждого:

port = 15000@0500:000000;15001@1702:000000

newcamd проще и надёжнее для домашней сети. Меньше overhead, быстрее при прямом подключении.

cccam: порт 12000, username/password, share-list

cccam-протокол текстовый, поддерживает все CAID через один порт. Концепция hop: h0 — прямая карта на сервере, h1 — реселл с одного прыжка, h2 — два прыжка. Чем выше hop — тем выше задержка и ниже надёжность.

[cccam]
port    = 12000
version = 2.3.2
nodeid  = auto
reshare = 0

reshare = 0 важен: без этого клиенты могут переслать карту дальше. Для домашнего использования всегда ставь 0.

camd35/cs378x как альтернативы

camd35 (он же cs357x/cs378x) используется реже. cs378x — UDP-вариант camd35. Встречается на старых ресиверах с Enigma1. OScam их поддерживает, но если ресивер понимает newcamd или cccam — используй их.

Конфиг секции [account] в oscam.user

[account]
user        = client1
pwd         = Str0ngP@ss2026
group       = 1
caid        = 0500
au          = my_card
uniq        = 0
monlevel    = 0
maxconnections = 1

group должен совпадать с группой ридера — иначе клиент авторизован, но ECM идёт в никуда. maxconnections = 1 ограничивает одновременные подключения с одного аккаунта. au = my_card привязывает к конкретному ридеру для EMM-обновлений.

Безопасность и стабильность сервера 24/7

Card server на публичном IP без защиты — это открытый порт для брутфорса. Видел логи где за сутки прилетало 50 000 попыток авторизации. Вот минимальный набор защиты.

Firewall: открыть только нужные порты для конкретных IP

Если клиентов мало и IP у них статические — белый список:

ufw default deny incoming
ufw allow from 192.168.1.0/24 to any port 12000
ufw allow from 203.0.113.42 to any port 15000
ufw allow ssh
ufw enable

WebIF (порт 8888) — только на локальный интерфейс. В oscam.conf:

[webif]
httpport    = 8888
httpallowed = 127.0.0.1,192.168.1.0/24
httpuser    = admin
httppwd     = changeme2026!

Никогда не оставляй WebIF доступным с публичного IP без пароля.

fail2ban для защиты WebIF и newcamd

Создай фильтр /etc/fail2ban/filter.d/oscam.conf:

[Definition]
failregex = .* user .+ .* wrong password.*
ignoreregex =

И jail в /etc/fail2ban/jail.local:

[oscam]
enabled  = true
filter   = oscam
logpath  = /var/log/oscam/oscam.log
maxretry = 5
bantime  = 3600
findtime = 600

Мониторинг ECM-time через WebIF и логи

ECM-time < 400ms — отлично. 400–800ms — приемлемо, лёгкое подмерзание при смене канала. Больше 1000ms — проблема, клиенты будут жаловаться. Больше 2000ms — сервис нефункционален.

В WebIF (http://127.0.0.1:8888) вкладка "Readers" показывает avg/min/max ECM-time в реальном времени. В логах ищи:

grep "ECM time" /var/log/oscam/oscam.log | tail -50

Reshare = 0 для домашнего использования

Повторю: reshare = 0 в секции [cccam] и на уровне каждого [account]. Без этого клиент теоретически может использовать твой card server как источник для своего сервера. Для домашней раздачи это лишнее.

Логротацию тоже настрой — oscam.log растёт быстро:

[global]
logfile             = /var/log/oscam/oscam.log
logduplicatelines   = 0
maxlogsize          = 1024

Troubleshooting: типичные ошибки и их диагностика

ECM not found / rejected

Первым делом смотри что пишет ресивер в ecm.info (или dvbapi.info): какой CAID запрашивается и какой provid. Сравни с тем что прописано в oscam.server. Несоответствие CAID или провайдера — ECM rejected гарантирован.

Если на карте два CAID (например, основной пакет 0500/032F00 и бонусный 1702/000000) — прописывай оба в caid через запятую: caid = 0500,1702. Иначе второй CAID будет молча отклоняться.

Cannot read ATR / card not responding

Первое — права на устройство (chmod 666 или udev rule). Второе — частота карты. Стандарт 368, но некоторые карты работают только на 357 или только на 600. Меняй cardmhz в oscam.server и перезапускай. Третье — питание. Ридер в USB-хабе без внешнего питания может не держать напряжение.

После ребута сервера иногда ридер вообще не откликается до физического переподключения. Лечится udev-правилом с ресетом USB или скриптом в systemd:

ExecStartPre=/bin/sh -c 'echo 1 > /sys/bus/usb/devices/1-1/authorized; sleep 1'

Client connected but no decoding

Самая хитрая ошибка — клиент успешно авторизован в логах, но декодирования нет. Причин три:

  1. Несоответствие group: group = 1 в [account], а ридер в group = 2
  2. Неправильный CAID в [account] — запрос приходит, но фильтруется
  3. Карта не активна или EMM не прошли — права на просмотр конкретного пакета отсутствуют

Запусти tail -f /var/log/oscam/oscam.log и переключи канал на ресивере. В логе должна появиться строка с ECM-запросом. Если строки нет — проблема на стороне клиента или маршрутизации.

Высокий ECM-time и зависания канала

Если ECM-time стабильно высокий (1500–3000ms) — смотри по порядку: старый USB-кабель (длина больше 1.5м — уже риск), USB-хаб без питания, слишком много клиентов на одной карте. Большинство провайдеров ограничивают одновременные декодирования — при 10+ одновременных запросах карта начнёт возвращать overuse-ошибки.

Между клиентом и сервером в разных странах тоже бывает: RTT 120–200ms + время обработки карты = ECM-time за пределами таймаута ресивера (обычно 1500ms).

Критерии выбора внешнего card server провайдера

Иногда поднять собственный card server с физической картой не вариант — нет карты, нет ридера, нет постоянного IP. Тогда подключаются к внешнему провайдеру. Как выбирать, не называя конкретные сервисы.

На что смотреть: uptime, ECM-time, локация сервера

Uptime должен быть 99%+. Проверяй реальные отзывы, а не цифры на лендинге. ECM-time стабильно ниже 500ms — хороший знак. Если на тестовом периоде видишь скачки до 1500–2000ms — это не улучшится на постоянной подписке.

Географическая близость сервера к тебе влияет напрямую: RTT 10ms vs RTT 150ms — разница в ECM-time ощутима. Спрашивай где физически находится сервер.

Какие протоколы должен поддерживать

Минимум — newcamd или cccam. Лучше если оба, с возможностью выбора. Уточни hop level: h0 означает прямая карта на сервере провайдера, h1 — они сами берут у кого-то. h0 надёжнее и быстрее. h2 и выше — лотерея.

Признаки нестабильного сервиса

Зависания при переключении каналов в прайм-тайм (19:00–23:00) — перегруженный сервер. ECM rejected на популярных пакетах в эти часы. Периодические разрывы соединения без видимой причины. Если тестовый период выдают только на 24 часа ночью — это не случайность.

Юридические аспекты использования

Законодательство по card sharing различается по странам. В ряде европейских стран (Германия, Великобритания, Франция) это криминализировано — коммерческое распространение сигнала без лицензии преследуется. Для частного использования ситуация варьируется. Перед тем как поднимать публичный card server — изучи законодательство своей страны. Эта статья описывает техническую сторону в образовательных целях.

Какой минимальный VPS подойдёт для card server на 5-10 клиентов?

1 vCPU и 512MB RAM более чем достаточно для OScam с 10 клиентами. OScam потребляет меньше 50MB памяти в рабочем состоянии. Главное — не процессор и RAM, а сетевая стабильность и RTT до клиентов. Бери VPS в локации ближе к себе и к источнику карты. 10GB SSD с запасом хватит для логов и конфигов.

Чем newcamd отличается от cccam на практике?

newcamd — бинарный протокол, один порт на один CAID, DES-шифрование. Исторически чуть быстрее и проще в отладке. cccam — текстовый, один порт на всё, поддерживает hop-level (передача карты между серверами). Для домашнего card server с прямой картой — newcamd проще настроить и легче диагностировать по логам. cccam нужен когда строишь цепочку из нескольких серверов.

Почему ECM-time скачет от 200ms до 2000ms?

Причин несколько. USB-ридер за хабом без внешнего питания — первое что проверяй. Длинный USB-кабель (более 1.5м) даёт нестабильность. Несколько клиентов одновременно на одной карте создают очередь запросов. Сетевая задержка между клиентом и сервером. И иногда — сама карта: старый чип начинает медленнее отвечать на ECM-запросы.

Как защитить card server от DDoS и брутфорса?

Белый список IP через ufw — самое эффективное. Если IP клиентов статические, закрой порты для всех остальных. fail2ban на oscam.log банит после 5 неудачных попыток. Нестандартные порты (не 12000 и не 15000, а что-то в диапазоне 40000–60000) снижают количество сканов. Пароли минимум 16 символов с цифрами и спецсимволами. WebIF — только на localhost или LAN.

Можно ли запустить OScam в Docker?

Да. Для USB-ридера нужен проброс устройства: --device=/dev/ttyUSB0:/dev/ttyUSB0. Часто без --privileged не работает из-за udev. Для PCSC-ридера монтируй сокет: -v /var/run/pcscd:/var/run/pcscd. Порты пробрасываются стандартно через -p 12000:12000 -p 15000:15000. Плюс контейнера — изоляция и легкий перезапуск. Минус — лишняя сложность при отладке USB.

Что делать если карта инициализируется но не дешифрует канал?

Первый шаг — ecm.info на ресивере: какой CAID и provid запрашивается. Сравни с тем что в oscam.server. Второй — проверь совпадение group у [reader] и [account]. Третий — убедись что EMM прошли и карта активна для нужного пакета (в логах должны быть строки с EMM). Четвёртый — запусти tail -f oscam.log и переключи канал, смотри что происходит с ECM-запросом в реальном времени.

Сколько клиентов выдержит одна смарт-карта?

Реалистично 3–5 одновременных декодирований без деградации. При 8–10 одновременных ECM-time начинает расти, появляются rejected. Большинство провайдеров встраивают защиту от overuse прямо в карту — при превышении лимита она начинает отклонять запросы. Реальный предел виден по логам: если avg ECM-time растёт линейно с добавлением клиентов — ты уже близко к пределу.

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.