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— глобальные настройки, протоколы, WebIFoscam.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
Самая хитрая ошибка — клиент успешно авторизован в логах, но декодирования нет. Причин три:
- Несоответствие group:
group = 1в [account], а ридер вgroup = 2 - Неправильный CAID в [account] — запрос приходит, но фильтруется
- Карта не активна или 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 растёт линейно с добавлением клиентов — ты уже близко к пределу.
Практические советы для стабильного просмотра
Даже самая стабильная линия 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 или внешние мониторы.