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.user → newcamdkey) и клиенте. Если ключ не совпадает — подключение будет отклонено с ошибкой аутентификации.
Проверка 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. Диагностика: ping → traceroute → mtr. Если пинг нормальный — проверьте загрузку 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 или внешние мониторы.