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, счётчик должен расти.

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

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