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.

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.