Card Sharing сервер: настройка CCcam и OScam с нуля

Поднять собственный card sharing сервер — задача вполне посильная, если понимать что происходит под капотом. Я разберу весь путь: от выбора софта до конфигов и диагностики. Без воды, только то что реально нужно.

Большинство гайдов в интернете копипастят конфиги не объясняя параметры. Здесь будет иначе — разберём каждый ключевой параметр, потому что иначе при первой же проблеме будешь гадать вслепую.

Что такое card sharing сервер и как он работает

Логика простая. Ресивер клиента шлёт зашифрованный ECM (Entitlement Control Message) на card sharing сервер. Сервер передаёт этот запрос физическому ридеру со смарт-картой, получает обратно control word (CW) — 8-байтный ключ для расшифровки — и возвращает его клиенту. Клиент расшифровывает видеопоток. Всё это должно происходить быстрее чем раз в 10 секунд, иначе картинка замёрзнет.

Архитектура: сервер, клиент, DVB-карта

На стороне сервера: Linux-машина (или ресивер) с DVB-картой или USB-картридером, демон OScam/CCcam, физическая смарт-карта в ридере. На стороне клиента: ресивер с Enigma2 или другой поддерживаемой платформой, демон OScam/CCcam в режиме клиента, соединение по TCP до сервера.

DVB-карта нужна только если сервер сам принимает сигнал и читает карту локально. Если сервер только проксирует C-линии от вышестоящего провайдера — DVB-карта не нужна вообще.

Роль ECM и EMM в обмене ключами

ECM (Entitlement Control Message) содержит зашифрованный control word. Его расшифровывает смарт-карта с помощью ключей провайдера. EMM (Entitlement Management Message) обновляет права на карте — например активирует новые каналы или продлевает подписку. EMM сервер обрабатывает автоматически, клиенту это не видно.

Протоколы CCcam, Newcamd, CS378x — отличия

CCcam — бинарный протокол, порт по умолчанию 12000. Закрытый, но широко поддерживается. Newcamd — старый, порт 10000-10010, до сих пор встречается в устройствах на базе старого firmware. CS378x (он же camd35) — более эффективный протокол, используется в OScam, порт 10000 по умолчанию. Именно CS378x рекомендую для новых установок — меньше накладных расходов и лучше работает с нагрузкой.

Почему задержка ECM критична для стабильной картинки

Норма ECM time — 50-300ms. При 300-500ms начинаются заметные микрофризы. Выше 500ms — каналы регулярно замерзают на секунду-две. Смена control word происходит каждые 10 секунд, и новый CW должен прийти до того как текущий истёк. Если сервер не успевает — получаешь классическую «заморозку каждые 10 секунд».

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

Здесь нет универсального ответа, но есть чёткая логика выбора.

CCcam — простота и стабильность, но закрытый код

CCcam — закрытый бинарник, последняя публичная версия 2.3.0. Конфиг один — /etc/CCcam.cfg, простой синтаксис. Работает из коробки. Минусы: нет webif нормального, отладка затруднена, разработка фактически заморожена. Хорош если нужно быстро поднять простое проксирование C-линий без лишней возни.

OScam — гибкость, активная разработка, форк OScam-Emu

OScam — open source, поддерживает CCcam, Newcamd, CS378x, gbox и ещё несколько протоколов. Имеет webif на порту 8888 (или 988 в некоторых сборках), dvbapi для прямой интеграции с Enigma2, детальные логи. OScam-Emu — форк с поддержкой дополнительных карт и softcam-ключей. Для большинства задач в 2026 году — выбор очевиден: OScam.

Mgcamd — лёгкий клиент, не сервер

Mgcamd — это клиент, не сервер. Путаница в этом месте встречается постоянно. Он подключается к CCcam/OScam серверу и передаёт CW декодеру. Запускать Mgcamd на машине которую планируешь использовать как сервер — не имеет смысла.

Какой выбрать под Enigma2, под Linux x86, под роутер

ПлатформаРекомендация
Enigma2 (Dreambox, Vu+, Zgemma)OScam через ipk-пакет + dvbapi
Linux x86/x64 (VPS, мини-PC)OScam из исходников (svn trunk)
OpenWrt роутер (64+ MB RAM)OScam из opkg, 1-3 клиента max
Только проксирование C-линийCCcam 2.3.0 — проще в настройке
Сложная схема с несколькими картамиOScam с lb_mode для балансировки

Установка OScam на Linux: пошагово

Работаем на Debian/Ubuntu x86_64. Нужны: subversion, build-essential, libssl-dev, libpcsclite-dev.

apt-get install subversion build-essential libssl-dev libpcsclite-dev

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

svn co https://www.streamboard.tv/svn/oscam/trunk oscam-svn
cd oscam-svn
./config.sh --enable all
make

После сборки бинарь лежит в Distribution/. Копируем:

cp Distribution/oscam-svn* /usr/local/bin/oscam
chmod 755 /usr/local/bin/oscam

Если svn-репозиторий недоступен — есть simplebuild.sh скрипт который автоматически подбирает оптимальные флаги компиляции под текущую систему. Ищи его в корне репозитория.

Создание systemd-юнита /etc/systemd/system/oscam.service

[Unit]
Description=OScam cardserver
After=network.target

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

[Install]
WantedBy=multi-user.target

Создаём пользователя и запускаем:

useradd -r -s /bin/false oscam
systemctl daemon-reload
systemctl enable --now oscam

Никогда не запускай oscam от root в продакшне. Это не паранойя — это базовая гигиена.

Структура директории /usr/local/etc/

OScam ожидает конфиги в директории указанной через -c. Минимальный набор файлов:

  • /usr/local/etc/oscam.conf — глобальные параметры
  • /usr/local/etc/oscam.server — описание ридеров
  • /usr/local/etc/oscam.user — учётные записи клиентов
  • /usr/local/etc/oscam.dvbapi — маппинг для Enigma2 (опционально)
  • /usr/local/etc/oscam.services — группировка каналов (опционально)

Права доступа на конфиги (chmod 600)

chown -R oscam:oscam /usr/local/etc/
chmod 600 /usr/local/etc/oscam.*

oscam.user содержит пароли клиентов — 600 обязательно. oscam.server содержит данные ридеров — то же самое.

Конфигурационные файлы: oscam.conf, oscam.server, oscam.user

oscam.conf — глобальные параметры и webif

[global]
logfile                = /var/log/oscam/oscam.log
maxlogsize             = 512
logduplicatelines      = 0
cachedelay             = 0
preferlocalcards       = 1
lb_mode                = 1
lb_nbest_readers       = 2

[webif]
httpport               = 8888
httpuser               = admin
httppwd                = СЮДА_СИЛЬНЫЙ_ПАРОЛЬ
httpallowed            = 127.0.0.1,192.168.0.0/16
httprefresh            = 10

Параметр lb_mode=1 включает load balancing между ридерами — OScam сам выбирает самый быстрый ридер для каждого запроса. Без этого при нескольких ридерах получишь непредсказуемое поведение. preferlocalcards=1 отдаёт приоритет локальным картам перед C-линиями — логично если у тебя есть физическая карта.

oscam.server — описание ридеров и протоколов

[reader]
label                  = local_card
protocol               = internal
device                 = /dev/dvb/adapter0/ca0
caid                   = 0D00
ident                  = 0D00:AABBCC
group                  = 1
mhz                    = 357
cardmhz                = 357
inactivitytimeout      = 30

[reader]
label                  = cline_provider
protocol               = cccam
device                 = cline.example.com,12000
user                   = myuser
password               = mypass
caid                   = 0D00,0919
group                  = 1
reconnecttimeout       = 15
inactivitytimeout      = 60

inactivitytimeout — сколько секунд ждать перед тем как считать ридер неактивным и переподключаться. Для локальных карт можно ставить 30, для C-линий — 60. Слишком маленькое значение = постоянные реконнекты и нестабильность. reconnecttimeout — интервал попыток переподключения при обрыве. 15 секунд — разумный компромисс.

Параметр mhz задаёт тактовую частоту ридера в 10кГц. 357 = 3.57 МГц. Если карта не читается — попробуй 357, 368, 600. Некоторые карты капризны к частоте.

oscam.user — учётные записи клиентов

[account]
user                   = client1
pwd                    = strongpassword1
group                  = 1
au                     = 1
uniq                   = 1
maxconn                = 1
caid                   = 0D00
ident                  = 0D00:AABBCC
inactivitytimeout      = 120

uniq=1 запрещает одновременный вход с одного аккаунта с разных IP — важно если ты шаришь доступ и не хочешь чтобы один аккаунт использовался несколькими людьми. maxconn=1 — максимум одно соединение. au=1 разрешает клиенту EMM-обновления.

oscam.dvbapi — маппинг CAID для Enigma2

[dvbapi]
enabled                = 1
au                     = 1
pmt_mode               = 0
request_mode           = 1
boxtype                = dream

[services]
ident                  = 0D00:AABBCC,CCDDEE

Без правильного oscam.dvbapi Enigma2 не будет слать ECM запросы к oscam. Это частая причина «всё настроено но не работает».

oscam.services — группировка каналов по провайдерам

[PACKAGE1]
caid               = 0D00
provid             = AABBCC
srvid              = 1234,5678,9012

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

Сетевая часть: порты, NAT, проброс через роутер

Стандартные порты CCcam (12000), OScam cs378x (10000), webif (8888)

CCcam слушает на TCP 12000 по умолчанию. В /etc/CCcam.cfg это меняется через SERVER LISTEN PORT. OScam в режиме cs378x — TCP 10000, в режиме newcamd — 10000-10009 (по одному порту на CAID). Webif — 8888 (или 988 в Enigma2-сборках). Все эти значения задаются в конфигах и меняются произвольно.

Проброс портов на роутере и iptables

На роутере пробрасываем нужный порт на внутренний IP сервера. В iptables на сервере:

iptables -A INPUT -p tcp --dport 10000 -j ACCEPT
iptables -A INPUT -p tcp --dport 8888 -j ACCEPT
iptables -A INPUT -p tcp --dport 12000 -j ACCEPT

Сохраняем правила через iptables-save > /etc/iptables/rules.v4. На Debian/Ubuntu — пакет iptables-persistent автоматически загружает правила при старте.

Использование DDNS вместо статического IP

Если у тебя динамический IP от провайдера — клиенты будут терять сервер при каждой смене адреса. Решение: DDNS-сервис. DuckDNS (бесплатный) или No-IP (есть бесплатный tier) — устанавливаешь клиент, он обновляет DNS-запись при смене IP. В конфиге клиентов прописываешь hostname вместо IP. Не забудь настроить reconnecttimeout в oscam.server — при смене IP сервер переподключится сам через это время.

Защита webif: HTTPS, httpallowed, fail2ban

Webif открытый в интернет — это плохая идея. В oscam.conf:

httpallowed            = 127.0.0.1,192.168.0.0/16
httpforcesslv3         = 1

Для доступа снаружи — только через SSH-туннель:

ssh -L 8888:localhost:8888 user@server_ip

Потом открываешь http://localhost:8888 локально. Никакого открытого порта в интернете.

Если всё же нужен внешний доступ — fail2ban с фильтром на oscam.log:

# /etc/fail2ban/filter.d/oscam.conf
[Definition]
failregex = .* wrong password from <HOST>
ignoreregex =

Диагностика и типичные проблемы

Первое что делаешь при проблемах — включаешь подробное логирование. В oscam.conf:

[global]
logfile  = /var/log/oscam/oscam.log
debuglevel = 4

После перезапуска лог станет многословным, но там будет всё необходимое.

Чтение oscam.log: ECM not found, freezing, timeout

Типичные строки которые говорят о проблемах:

  • ECM not found — несоответствие CAID или provider ID. Проверь ident в oscam.server и oscam.dvbapi.
  • card not inserted — физическая проблема с ридером или картой.
  • connection timeout — сервер недоступен или заблокирован firewall.
  • too many connections — превышен лимит maxconn в oscam.user.

Webif: статус ридеров, ECM time, частота freezes

Webif OScam — главный инструмент диагностики в реальном времени. Вкладка «Readers» показывает статус каждого ридера, среднее ECM time, количество обработанных запросов. Вкладка «Users» — активные соединения и статистику по клиентам. Если видишь ECM time 50ms в webif но всё равно фризы — проблема не в сервере а в сети между сервером и ресивером. Проверяй пинг и потери пакетов.

Проверка смарт-карты через pcsc_scan и cardreader

apt-get install pcscd pcsc-tools
pcsc_scan

Если pcsc_scan не видит карту — проблема физическая: контакты, напряжение питания, сам ридер. Некоторые ридеры работают на 3.3V, некоторые на 5V. В oscam.server параметр mhz влияет на стабильность — попробуй разные значения (357, 368, 600).

Быстрая проверка через oscam: oscam -d — запускает дамп информации о смарт-карте без полного старта демона.

Что делать если каналы фризят каждые 10 секунд

Это классическая картина: смена CW происходит каждые 10 секунд, сервер не успевает доставить новый. Алгоритм:

  1. Смотришь ECM time в webif — если >500ms, проблема в сервере/ридере
  2. Если ECM time нормальный (50-200ms) — проверяешь пинг и потери пакетов до ресивера
  3. Проверяешь CAID и provider ID в oscam.dvbapi — часто они несоответствуют
  4. Проверяешь reconnecttimeout в oscam.server — слишком маленькое значение вызывает постоянные реконнекты

Если несколько ридеров конфликтуют между собой — добавь lb_mode=1 в oscam.conf и lb_weight для каждого ридера в oscam.server. OScam сам распределит нагрузку.

OScam падает раз в сутки без видимой причины? Скорее всего утечка памяти в конкретной svn-ревизии. Обнови до последней: cd oscam-svn && svn update && make — это решало проблему в большинстве случаев с которыми я сталкивался.

Безопасность сервера: что обязательно

Многие поднимают card sharing сервер и оставляют его с дефолтными настройками безопасности. Потом удивляются брутфорсу и посторонним подключениям.

Сильные пароли в oscam.user и webif

Никакого admin/admin, test/test, user/1234. Минимум 16 символов, случайные. В oscam.user поле pwd хранится в открытом виде — поэтому chmod 600 на этот файл обязателен. В webif — параметры httpuser и httppwd в oscam.conf.

Ограничение IP-доступа через httpallowed и nodeid

В oscam.user можно указать hostname для привязки клиента к конкретному IP или диапазону:

[account]
user      = client1
pwd       = strongpass
hostname  = 192.168.1.100

Это не замена паролю, но дополнительный слой. Для webif — httpallowed как показано выше.

Логи и мониторинг подозрительных подключений

Регулярная ротация логов через logrotate, иначе /var/log/oscam/oscam.log вырастет до нескольких гигабайт:

# /etc/logrotate.d/oscam
/var/log/oscam/oscam.log {
    daily
    rotate 7
    compress
    missingok
    postrotate
        systemctl kill -s HUP oscam
    endscript
}

Периодически просматривай лог на предмет wrong password — это признак брутфорса. При большом количестве таких строк — подключай fail2ban.

Бэкап конфигов перед каждым изменением

Перед обновлением OScam или изменением конфигов:

tar czf /root/backups/oscam_$(date +%Y%m%d_%H%M%S).tar.gz /usr/local/etc/oscam.*

Хранить конфиги в локальном git — отличная практика. После каждого изменения: cd /usr/local/etc && git add -A && git commit -m "changed oscam.user: added client2". Откат за секунду при необходимости.

После обновления OScam иногда меняется формат oscam.user — особенно это касалось параметра newcamd_keys. Если клиенты перестали подключаться после обновления — первым делом смотри changelog и сравнивай синтаксис.

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

CCcam слушает TCP 12000 по умолчанию. Переопределяется в /etc/CCcam.cfg директивой SERVER LISTEN PORT 12001. OScam в режиме cs378x использует порт 10000, webif OScam — 8888 или 988 в зависимости от сборки. Все порты меняются в конфигах.

Чем отличается CCcam от OScam?

CCcam — закрытый бинарник, поддерживает только собственный протокол, разработка заморожена. OScam — open source, поддерживает CCcam, Newcamd, CS378x, gbox, имеет webif, dvbapi для Enigma2, активно развивается. Для нового card sharing сервера в 2026 году — однозначно OScam.

Что такое ECM time и какое значение нормальное?

ECM time — время ответа на запрос control word от момента отправки до получения. Норма: 50-300ms. При 300-500ms начинаются заметные артефакты. Выше 500ms — регулярные фризы. Зависит от скорости ридера, нагрузки на смарт-карту и пинга. Смотреть в реальном времени — вкладка Readers в webif OScam.

Можно ли запустить card sharing сервер на роутере?

Да, если роутер на OpenWrt/Entware с минимум 64 MB RAM. OScam есть в opkg: opkg install oscam. Производительность ограничена — нормально работает с 1-3 клиентами. Для большего числа клиентов лучше взять отдельный мини-PC (Raspberry Pi 4, например) или VPS.

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

На что смотреть: аптайм выше 99%, ECM time стабильно ниже 300ms, поддержка нужного CAID и provider ID, возможность тестового периода перед оплатой, нормальная техподдержка, отсутствие переподписки одной C-линии нескольким клиентам одновременно. Последний пункт — частая причина высокого ECM time у дешёвых провайдеров.

Почему каналы фризят каждые 10 секунд?

Каждые 10 секунд происходит смена control word. Если фризы строго синхронны — сервер не успевает отдать новый CW. Причины: высокий ECM time (>500ms), потери пакетов в сети, перегруженная смарт-карта, неверный CAID или provider ID в oscam.dvbapi. Проверяй по очереди — начни с ECM time в webif.

Как защитить webif OScam от взлома?

Минимум: сильный пароль в httppwd, добавить httpallowed=127.0.0.1,192.168.0.0/16 — только локальная сеть. Для доступа снаружи — SSH-туннель: ssh -L 8888:localhost:8888 user@server. Можно включить HTTPS через httpforcesslv3=1 с самоподписанным сертификатом. При брутфорсе — fail2ban с фильтром на строки wrong password в oscam.log.

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

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