Cardsharing server: настройка CCcam и OScam с нуля

Поднять собственный cardsharing server — задача вполне реальная, если понимать архитектуру. Проблема в том, что большинство гайдов в интернете либо устарели на 5+ лет, либо описывают только клиентскую сторону, а серверную часть замалчивают. Здесь разберём именно серверную сторону: конфиги, порты, reader-блоки, troubleshooting. Без воды.

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

Базовая цепочка простая. Смарт-карта вставлена в физический card reader, подключённый к машине. Демон (CCcam или OScam) читает с карты control word — 8-байтный ключ, которым зашифрован TS-поток. Этот control word передаётся клиенту по TCP, клиент подставляет его в декриптор тюнера, и канал открывается.

Без физической карты или валидного upstream-источника сервер не работает. Демон — это просто маршрутизатор control words, не генератор ключей.

Архитектура: DVB-карта → демон → клиент

DVB-карта или внешний USB card reader подключается к серверу через PCSC-lite. OScam обращается к нему через reader-блок в конфиге. Клиент (ресивер с Enigma2, Android-бокс, PC с VLC + softcam) подключается к серверу по TCP и запрашивает control word для конкретного канала. Сервер запрашивает ECM у карты, получает ответ, возвращает клиенту.

Протоколы CCcam, Newcamd, CS378x, GBox

Протоколов несколько, и у каждого свой порт и своя область применения:

  • CCcam — TCP 12000. Самый распространённый, понимают почти все ресиверы. Проприетарный протокол.
  • Newcamd — TCP 15000. Использует DES-ключ для аутентификации. Поддерживается OScam и большинством клиентов.
  • CS378x — TCP 8080. Более современный, меньше overhead'а, но поддержка у клиентов хуже.
  • GBox — P2P протокол для каскадирования между серверами. Используется редко, настройка сложнее.

Что такое ECM и EMM пакеты

ECM (Entitlement Control Message) — пакет, который приходит в TS-потоке каждые ~10 секунд и содержит зашифрованный control word. Карта расшифровывает его и возвращает CW демону. Это и есть основной трафик cardsharing.

EMM (Entitlement Management Message) — пакеты для обновления прав карты: продление подписки, обновление ключей шифрования. Важны для долгосрочной работы карты. Если демон не передаёт EMM на карту, карта со временем перестаёт открывать каналы.

Разница между server и reseller-узлом

Server с физической картой — первый hop. Reseller — это узел, у которого нет своей карты: он принимает control words с сервера первого уровня и раздаёт их дальше. Каждый дополнительный hop добавляет задержку. Два hop'а — ещё приемлемо. Три и больше — ECM time растёт, каналы начинают подвисать.

Подготовка сервера: железо, ОС и зависимости

Для одной карты хватит Raspberry Pi 4 с 1GB RAM — он спокойно держит 5-10 клиентских подключений. Если планируете несколько карт или 20+ клиентов, берите x86-машину или VPS с 2 vCPU и 1GB RAM. CPU почти не нагружается — bottleneck обычно в сети и стабильности карты.

Минимальные требования: CPU, RAM, сеть

CPU: любой, даже ARMv7 справится. RAM: 256MB достаточно для OScam, но лучше 512MB чтобы не было swap-активности. Сеть: минимум 10 Mbps стабильного канала. Пинг к клиентам желателен <50ms для нормального ECM time.

Выбор Linux-дистрибутива

Для x86 — Debian 12 или Ubuntu 22.04 LTS. Для Raspberry Pi и Orange Pi — Armbian с Debian-based ядром. Не берите Arch или Gentoo если не готовы поддерживать систему вручную — OScam на rolling-release ломается после обновлений libc.

PCSC-lite и драйверы для card reader

Устанавливаем зависимости:

apt update && apt install -y pcscd pcsc-tools libccid libpcsclite-dev

Поддерживаемые card reader: Phoenix-совместимые (например Smargo SmartReader Plus), Omnikey 3121, любой CCID-совместимый USB reader. После подключения reader проверяем карту:

pcsc_scan

Если карта видна — строка ATR появится в выводе. Если вывод пустой — reader не определился. Смотрим dmesg | tail -20 и ищем USB-ошибки.

Настройка статического IP и проброс портов на роутере

Статический IP на сервере через netplan (Ubuntu 22.04):

# /etc/netplan/01-config.yaml
network:
  version: 2
  ethernets:
    eth0:
      addresses: [192.168.1.100/24]
      routes:
        - to: default
          via: 192.168.1.1
      nameservers:
        addresses: [8.8.8.8, 1.1.1.1]

На роутере пробрасываем порты: TCP 12000 (CCcam), TCP 15000 (Newcamd). Если провайдер выдаёт серый IP (CGNAT) — проброс портов невозможен физически. В этом случае нужен VPS-прокси с белым IP или reverse SSH tunnel: ssh -R 12000:localhost:12000 user@vps-ip. Команду добавляете в cron или systemd-service для автовосстановления соединения.

Dynamic DNS через DuckDNS или No-IP — нормальная альтернатива белому IP при домашнем подключении. Обновление через cron раз в 5 минут:

*/5 * * * * curl -s "https://www.duckdns.org/update?domains=YOURDOMAIN&token=YOURTOKEN&ip=" > /dev/null

Установка и базовая настройка OScam

OScam — open source, активно поддерживается, работает с большинством современных CAID. Собираем из исходников через simplebuild:

apt install -y subversion build-essential libssl-dev libpcsclite-dev
svn checkout https://svn.streamboard.tv/oscam/trunk oscam-trunk
cd oscam-trunk
./config.sh --enable all
make -j$(nproc)
cp oscam /usr/local/bin/oscam
chmod +x /usr/local/bin/oscam

Если сборка падает на ARM — попробуйте make USE_LIBCRYPTO=1. На Raspberry Pi иногда нужно отдельно поставить libssl-dev для armhf-архитектуры.

Структура конфигурационных файлов

Все конфиги лежат в /usr/local/etc/:

  • oscam.conf — глобальные параметры, WebIF, логирование
  • oscam.server — описание reader'ов (физических карт)
  • oscam.user — клиентские аккаунты
  • oscam.dvbapi — настройка DVBAPI бриджа для локального тюнера

Описание reader для смарт-карты

Пример блока для Conax:

[reader]
label        = conax_card
protocol     = pcsc
device       = /dev/scard0
caid         = 0B00
ident        = 0B00:000000
group        = 1
detect       = cd
mhz          = 357
cardmhz      = 357
au           = 1
fallback     = 0

Для Viaccess (CAID 0500):

[reader]
label        = viaccess_card
protocol     = pcsc
device       = /dev/scard0
caid         = 0500
ident        = 0500:032830,0500:007400
group        = 1
detect       = cd
mhz          = 357
cardmhz      = 357
au           = 1

Параметр mhz — тактовая частота reader'а в MHz × 100. Значение 357 соответствует 3.57 MHz — стандарт для большинства карт. Если OScam пишет card init failed, попробуйте cardmhz = 600 (6 MHz) — некоторые карты работают только на повышенной частоте.

Для Nagravision (CAID 1801/1802):

[reader]
label        = nagra_card
protocol     = pcsc
device       = /dev/scard0
caid         = 1801,1802
group        = 1
detect       = cd
mhz          = 357
cardmhz      = 357
au           = 1
resetcycle   = 300

Параметр resetcycle = 300 сбрасывает карту каждые 300 ECM-циклов — помогает когда карта "засыпает" после долгой неактивности.

Создание user блока

Файл oscam.user:

[account]
user         = client1
pwd          = secretpassword123
group        = 1
au           = 1
numusers     = 1
cccmaxhops   = 1
cccreshare   = 0
auprovid     = 032830

Флаг AU=1 разрешает этому клиенту получать EMM-обновления. numusers=1 ограничивает одновременные подключения с этого аккаунта. cccreshare=0 запрещает клиенту делиться с третьими лицами.

Включение WebIF на порту 8888

В oscam.conf:

[webif]
httpport      = 8888
httpuser      = admin
httppwd       = yourwebifpassword
httpallowed   = 127.0.0.1,192.168.1.0/24
httprefresh   = 10

WebIF доступен на http://192.168.1.100:8888. Там видно активные reader'ы, подключённых клиентов, ECM/EMM статистику в реальном времени.

Запуск демона:

/usr/local/bin/oscam -b -c /usr/local/etc

Флаг -b — фоновый режим. Логи: tail -f /var/log/oscam.log или journalctl -u oscam -f если добавили systemd-юнит.

Альтернатива: настройка CCcam.cfg

CCcam проще в настройке, но последнее обновление вышло в 2017 году. Для современных CAID (особенно Irdeto 2, Nagravision 3) CCcam работает хуже OScam. Если у вас старый ресивер который не умеет OScam-протоколы — CCcam ваш вариант. В остальных случаях берите OScam.

Структура файла CCcam.cfg

Файл лежит в /var/etc/CCcam.cfg (на Enigma2-ресиверах) или /etc/CCcam.cfg на Linux-машине. Структура:

# Порт сервера
SERVER LISTEN PORT : 12000

# WebInfo порт
WEBINFO LISTEN PORT : 8080

# Логирование
DEBUG LEVEL : 0
DEBUG FILENAME : /tmp/CCcam.log

# Пользователи (F-line)
F: username1 password1 0 0
F: username2 password2 1 0

# Подключение к upstream (C-line)
C: hostname.example.com 12000 youruser yourpassword

Строка F-line

Формат: F: username password uphops downhops

uphops — сколько hop'ов вверх может запросить клиент. downhops — сколько hop'ов вниз может раздать. Для обычного клиента ставьте 0 0 — только прямое подключение, без каскадирования.

Строка C-line для подключения к внешнему источнику

Если у вас нет физической карты, а есть upstream cardsharing server:

C: upstream.server.com 12000 youraccount yourpassword

CCcam подключится к этому серверу как клиент и будет транслировать control words своим F-line пользователям.

Перезапуск демона

# Мягкий перезапуск (перечитать конфиг)
killall -HUP CCcam

# Полный перезапуск
killall CCcam && sleep 2 && /usr/local/bin/CCcam

Логи смотрим через tail -f /tmp/CCcam.log. В отличие от OScam, WebIF у CCcam минимальный — только статус подключений.

Подключение клиента (Enigma2, DreamOS, Wooshbuild)

На стороне ресивера настраивается softcam-клиент. Для Newcamd-протокола — файл newcamd.list.

Настройка newcamd.list на стороне ресивера

Путь файла зависит от дистрибутива: /etc/newcamd.list, или /etc/tuxbox/config/newcamd.list (после обновления прошивки путь может измениться — проверяйте). Формат строки:

CWS = hostname 15000 username password 01 02 03 04 05 06 07 08 09 10 11 12 13 14

Строка 01 02 ... 14 — это DES-ключ в HEX. Он должен совпадать на сервере (oscam.usernewcamdkey) и клиенте. Если ключ не совпадает — подключение будет отклонено с ошибкой аутентификации.

Проверка ECM через OSD

На Enigma2 включите debug-режим softcam и смотрите ECM time на OSD. Нормальные значения:

  • 200-400ms — отлично
  • 500-800ms — приемлемо
  • 800-1000ms — граница, иногда будут подвисания при переключении
  • >1000ms — проблема. Канал будет зависать каждые ~10 секунд при смене control word

DVBAPI бридж для прямой работы OScam с тюнером

Если OScam запущен прямо на ресивере (Enigma2 с OScam ipk), можно использовать DVBAPI режим — OScam работает напрямую с DVB-адаптером без промежуточного softcam-клиента. Файл oscam.dvbapi:

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

В этом режиме OScam перехватывает PMT напрямую и расшифровывает поток без дополнительных прокси-слоёв. Latency снижается, ECM time уменьшается на 50-150ms.

Troubleshooting: каналы не открываются

Вот конкретный чек-лист. Пройдите по порядку — не пропускайте шаги.

ECM timeout: проверка пинга и MTU

# С клиентского ресивера
ping -c 10 ваш.сервер.ip

# Проверка MTU
ping -M do -s 1472 ваш.сервер.ip

Если потери пакетов >1% или пинг нестабильный — ECM time будет скакать. MTU mismatch тоже убивает производительность: при фрагментации пакетов задержки вырастают в 5-10 раз.

Card not found: pcsc_scan и dmesg

pcsc_scan
dmesg | grep -i "usb\|card\|reader" | tail -20
systemctl status pcscd

Если pcscd не запущен — OScam не увидит карту. systemctl enable pcscd && systemctl start pcscd. Если reader определился в dmesg но pcsc_scan не видит карту — карта, возможно, вставлена не до конца или reader требует перезапуска питания.

Wrong CAID/Provider ID

Самая частая проблема — CAID в reader-блоке не совпадает с CAID транслируемого канала. Запустите OScam с флагом -r для получения raw-данных карты:

oscam -r -c /usr/local/etc

В логе увидите реальные CAID и ident карты. Сравните с тем, что прописано в oscam.server.

Firewall блокирует входящий трафик

iptables -L -n --line-numbers
ufw status verbose

Открыть порты через ufw:

ufw allow 12000/tcp
ufw allow 15000/tcp
ufw reload

Через iptables:

iptables -A INPUT -p tcp --dport 12000 -j ACCEPT
iptables -A INPUT -p tcp --dport 15000 -j ACCEPT
iptables-save > /etc/iptables/rules.v4

Time sync: установка NTP для корректной валидации

Расхождение системного времени больше 60 секунд ломает ECM-валидацию на некоторых системах шифрования. Устанавливаем chrony:

apt install -y chrony
systemctl enable chrony
systemctl start chrony
chronyc tracking

Проверьте System time offset — должно быть меньше 0.1 секунды. Если больше — NTP-синхронизация не работает, проверьте DNS и доступность NTP-серверов.

Безопасность сервера и оптимизация

Открытый cardsharing server в интернете привлекает сканеры и брутфорсеры. Без базовой защиты через неделю в логах будут тысячи попыток подключения с чужими аккаунтами.

Смена дефолтных портов и закрытие WebIF от внешки

WebIF на 8888 обязательно биндим только на localhost:

[webif]
httpport     = 8888
httpallowed  = 127.0.0.1

Для доступа к WebIF с удалённой машины используйте SSH-туннель:

ssh -L 8888:127.0.0.1:8888 user@ваш.сервер.ip

Затем открываете http://127.0.0.1:8888 в браузере на локальной машине.

fail2ban для блокировки переборщиков

Устанавливаем fail2ban и создаём jail для OScam:

apt install -y fail2ban

Файл /etc/fail2ban/jail.d/oscam.conf:

[oscam]
enabled  = true
port     = 12000,15000
filter   = oscam
logpath  = /var/log/oscam.log
maxretry = 5
findtime = 300
bantime  = 3600

Файл фильтра /etc/fail2ban/filter.d/oscam.conf:

[Definition]
failregex = .* login failed.*<HOST>
            .* wrong password.*<HOST>
ignoreregex =
systemctl restart fail2ban
fail2ban-client status oscam

Ограничение количества коннектов на user

В oscam.user для каждого аккаунта:

[account]
user         = client1
pwd          = strongpassword
numusers     = 1
cccmaxhops   = 1
cccreshare   = 0

cccmaxhops=1 означает что клиент не может каскадировать ваш сигнал на другие серверы. numusers=1 — только одно одновременное подключение с этого аккаунта.

Логирование и ротация через logrotate

Файл /etc/logrotate.d/oscam:

/var/log/oscam.log {
    daily
    rotate 7
    compress
    delaycompress
    missingok
    notifempty
    postrotate
        killall -HUP oscam
    endscript
}

Регулярное обновление OScam

OScam активно разрабатывается — новые версии закрывают баги с конкретными CAID и card reader'ами. Обновление:

cd oscam-trunk
svn up
make -j$(nproc)
systemctl stop oscam
cp oscam /usr/local/bin/oscam
systemctl start oscam

Делайте обновление раз в 1-2 месяца. Перед обновлением сделайте резервную копию конфигов: cp -r /usr/local/etc /usr/local/etc.bak.

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

CCcam слушает TCP 12000, Newcamd (OScam) — TCP 15000, CS378x — TCP 8080, WebIF OScam — TCP 8888. Все порты настраиваются в конфигурационных файлах и могут быть изменены на любые свободные.

В чём разница между CCcam и OScam?

CCcam — закрытый протокол, последнее обновление в 2017 году, проще в настройке но хуже работает с современными CAID. OScam — полностью open source, активно разрабатывается, поддерживает значительно больше систем шифрования, гибкие конфиги, лучший выбор для новых установок.

Можно ли запустить cardsharing server без физической смарт-карты?

Локально — нельзя. Для работы нужен либо физический card reader с вставленной смарт-картой, либо C-line к внешнему upstream-серверу. Демон только маршрутизирует control words, он их не генерирует самостоятельно.

Почему ECM time показывает больше 1 секунды?

Основные причины: высокий пинг до сервера (>100ms), перегруженный reader, медленный чип карты, потери пакетов в сети, неверный MTU. Диагностика: pingtraceroutemtr. Если пинг нормальный — проверьте загрузку reader в WebIF OScam.

Какие минимальные требования к железу для OScam сервера?

Raspberry Pi 3/4, Orange Pi Zero 2, любой VPS с 1 vCPU и 256MB RAM справятся с одной картой и 10 клиентами. CPU почти не нагружается. Главное — стабильная сеть и надёжный uptime. SD-карту в RPi берите качественную (Samsung или SanDisk), дешёвые умирают за 6-12 месяцев.

Нужен ли статический IP для cardsharing server?

Желателен, но не обязателен. Альтернатива — Dynamic DNS через DuckDNS или No-IP с обновлением через cron каждые 5 минут. При CGNAT от провайдера (серый IP) проброс портов невозможен — нужен VPS с белым IP как прокси или reverse SSH tunnel.

Как обновить права карты через EMM?

В oscam.user установите AU=1 для нужного пользователя и укажите auprovid с идентификатором провайдера. В reader-блоке тоже должен быть au=1. После этого OScam автоматически передаёт EMM-пакеты на карту. Проверка: WebIF → Readers → столбец EMM, счётчик должен расти.

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.