Кардшаринг сервер: настройка CCcam и OScam с нуля
Поднять собственный кардшаринг сервер — задача посложнее, чем просто вбить C-линию в ресивер. Здесь нужно понимать, что происходит на уровне протокола, как читать логи и где искать проблему, когда всё сделано «по инструкции», а каналы всё равно не открываются. В этом материале — конкретика: реальные пути, рабочие примеры конфигов и диагностика по симптомам.
Что такое кардшаринг сервер и как он работает
Базовая схема проще, чем кажется. Ресивер-клиент принимает зашифрованный поток, вытаскивает из него ECM-пакет (Entitlement Control Message) и отправляет его на сервер. Сервер пропускает этот пакет через физическую смарт-карту, получает DCW (Decryption Control Word) и возвращает его клиенту. Клиент расшифровывает видео. Весь цикл должен укладываться в 300–500 мс, иначе пойдут фризы.
Принцип работы протокола (запрос ECM и ответ DCW)
ECM генерируется каждые несколько секунд — это стандарт DVB. Если ответ с DCW не пришёл вовремя, декодер просто не успевает расшифровать следующий криптопериод. Вот откуда фризы при высоком ECM time: не из-за плохого сигнала, а из-за задержки на пути карта → сервер → клиент.
Роль сервера и клиента в схеме
Сервер — это машина с USB- или встроенным ридером и вставленной смарт-картой. Это может быть Raspberry Pi, старый роутер на OpenWRT, Enigma2-ресивер или обычный VPS. Клиент — любой ресивер с поддержкой CCcam, OScam или newcamd. Сервер всегда работает в режиме ожидания входящих ECM-запросов.
Чем отличается локальная карта от шаринга
Локальная карта вставлена прямо в ридер на вашем сервере — минимальный latency, максимальная надёжность. Решаринг — это когда ваш сервер сам является клиентом другого сервера, у которого карта. Каждый такой «hop» добавляет задержку и точку отказа. Чем больше хопов — тем выше ECM time и тем менее стабильна работа.
CCcam, OScam, MGCamd и NewCS: краткое сравнение
CCcam — самый распространённый протокол, простой в настройке, но разработка давно заморожена. OScam — активно развивается, поддерживает одновременно newcamd, cccam, camd35, gbox и ещё десяток протоколов, плюс гибкое управление доступом. MGCamd хорош как клиент на Enigma2, но как сервер уступает. NewCS — нишевое решение, почти не используется в новых установках.
Для нового кардшаринг сервера я бы выбирал OScam — он даёт больше контроля и нормальный веб-интерфейс для мониторинга.
Настройка сервера OScam: пошаговое руководство
OScam распространяется в исходниках, но под Debian/Ubuntu проще взять готовую сборку. На embedded-системах (OpenWRT, Enigma2) конфиги обычно лежат в /var/etc/oscam/, на обычном Linux — в /usr/local/etc/oscam/ или там, куда указывает флаг -c при запуске.
Установка OScam на Linux (Debian/Ubuntu) и роутеры
На Debian 12:
apt-get install build-essential libpcsclite-dev libssl-dev
# Скачать исходники с oscam.org/svn или готовый бинарник под свою архитектуру
./configure --enable-reader-smartreader --enable-reader-internal
make && make install
На OpenWRT ставится через opkg: opkg install oscam. На Enigma2-боксах есть готовые ipk-пакеты под конкретную платформу (ARM, MIPS). Убедитесь, что бинарник скомпилирован под вашу архитектуру — x86_64 на роутере работать не будет.
Структура файлов: oscam.conf, oscam.server, oscam.user
oscam.conf — глобальные настройки демона, логирование, веб-интерфейс. oscam.server — описание ридеров (физических карт и удалённых серверов). oscam.user — учётные записи клиентов. Каждый файл имеет строгую структуру с секциями в квадратных скобках.
Настройка ридера в oscam.server (PHOENIX, smargo, internal)
Минимальный рабочий блок для внутреннего ридера Enigma2:
[reader]
label = local_card
protocol = internal
device = /dev/sci0
caid = 0500
detect = cd
mhz = 357
cardmhz = 357
group = 1
emmcache = 1,3,2
Для smargo USB-ридера замените protocol = internal на protocol = smartreader и device = /dev/ttyUSB0. PHOENIX-ридер: protocol = mouse. Значение caid — это идентификатор системы шифрования вашей карты (Irdeto — 0604, Nagravision — 1800, Viaccess — 0500, Conax — 0B00 и т.д.).
Параметр detect = cd означает автоопределение карты по сигналу CD порта. Если карта периодически пропадает из ридера — попробуйте detect = 0 и принудительный reset через oscam -c /usr/local/etc/oscam.
Создание учётных записей в oscam.user
[account]
user = client1
pwd = secretpass123
group = 1
caid = 0500
au = 1
uniq = 0
sleep = 0
Параметр group должен совпадать с group у ридера — именно так OScam понимает, какая карта обслуживает какого клиента. au = 1 включает автообновление подписки (EMM). uniq = 0 разрешает несколько одновременных подключений с одного аккаунта — для теста нормально, в продакшне лучше uniq = 3.
Веб-интерфейс мониторинга (httpport, обычно 8888)
В oscam.conf в секции [webif]:
[webif]
httpport = 8888
httpuser = admin
httppwd = adminpass
httprefresh = 10
После запуска oscam -b -r 2 -c /usr/local/etc/oscam веб-интерфейс доступен на http://IP:8888. Там видно ECM time по каждому клиенту, статус ридера и текущие запросы. Флаг -b — фоновый режим, -r 2 — уровень логирования.
Настройка сервера CCcam: конфиги и синтаксис
CCcam проще в понимании, но менее гибкий. Весь конфиг — один файл /etc/CCcam.cfg (или /var/etc/CCcam.cfg на embedded). Синтаксис без секций, просто директивы в верхнем регистре.
Файл CCcam.cfg: основные директивы
SERVER LISTEN PORT: 12000
WEBINFO LISTEN PORT: 16001
WEBINFO USERNAME: admin
WEBINFO PASSWORD: password123
ALLOW TELNET: yes
DEBUG: 0
LOG FILE: /var/log/CCcam.log
LOG WARNINGS: 1
Права на файл обязательно выставить правильно: chmod 600 /etc/CCcam.cfg. Если файл читается другими пользователями — это дыра в безопасности, пароли аккаунтов будут видны всем процессам в системе.
Раздача линии: F-строка (F: user pass uphops downhops)
F-строка создаёт аккаунт для клиента:
F: username password 1 0 0 0 { 0:0:1 }
Здесь: uphops = 1 — клиент видит карты с глубиной до 1 хопа, downhops = 0 — клиент не может дальше шарить полученные карты. Последний блок { 0:0:1 } — фильтр по CAID (0 = все). Для ограничения по конкретному CAID: { 0500:0:1 }.
Подключение к другому серверу: C-строка
C: remote-server.example.com 12000 myuser mypassword no
Последний параметр — использование newcamd (yes/no). C-строка делает ваш сервер клиентом другого кардшаринг сервера. Полученные карты можно дальше раздавать своим клиентам через F-строки, если это разрешено uphops на стороне источника.
Параметры server listen port и share limits
SHARE LIMIT: 10
CCCAM REVISION CHECK: no
STANDARD SHARING ECMTIME: 3000
SHARE LIMIT — максимальное количество одновременных ECM-запросов. STANDARD SHARING ECMTIME: 3000 — таймаут ожидания ответа в миллисекундах. Если карта не успевает ответить за это время, CCcam считает запрос неудачным.
Файлы CCcam.prio и CCcam.channelinfo
CCcam.prio задаёт приоритет карт при наличии нескольких источников для одного CAID. Синтаксис: CAID:provid:SID:CAID:provid — говорит CCcam, какую карту использовать для конкретного канала. CCcam.channelinfo — это маппинг SID на читаемые названия каналов, нужен только для отображения в веб-интерфейсе.
Проброс портов, firewall и сетевые настройки
Самое частое место, где всё ломается у новичков. Сервер запущен, карта читается, а клиенты снаружи не подключаются. Почти всегда причина — в сети, не в конфиге.
Какие порты открывать на роутере
Для CCcam: TCP 12000 (или тот, что в SERVER LISTEN PORT). Для OScam: порт определяется протоколом — newcamd обычно 15000–15010, cccam-эмуляция 12000, camd35 2000. Плюс порт веб-интерфейса (8888 для OScam, 16001 для CCcam) — его наружу лучше не открывать вообще или закрыть файрволом.
Port forwarding на роутере: в разделе NAT/Virtual Servers добавить правило — внешний TCP-порт 12000 → внутренний IP сервера, порт 12000. Без этого роутер просто не знает, куда перенаправить входящий пакет.
Настройка iptables для сервера
# Разрешить входящие подключения клиентов
iptables -A INPUT -p tcp --dport 12000 -j ACCEPT
iptables -A INPUT -p tcp --dport 15000 -j ACCEPT
# Веб-интерфейс только с локальной сети
iptables -A INPUT -p tcp --dport 8888 -s 192.168.1.0/24 -j ACCEPT
iptables -A INPUT -p tcp --dport 8888 -j DROP
# Сохранить правила
iptables-save > /etc/iptables/rules.v4
DynDNS для динамического IP
Если у вас динамический IP от провайдера, клиентам нельзя дать фиксированный адрес. Решение — DynDNS-сервис: no-ip.com, DuckDNS, Afraid.org. На роутере или сервере запускается клиент, который обновляет DNS-запись при смене IP. Клиенты подключаются по доменному имени типа myserver.duckdns.org.
Проблема хуже: серый IP за NAT провайдера. Это двойной NAT — у вашего роутера нет публичного IP вообще, он получает адрес из диапазона 10.x.x.x или 100.64.x.x. В таком случае port forwarding на вашем роутере бесполезен — пакеты застревают на уровне провайдера. Выход: платный белый IP у провайдера или VPN-туннель (WireGuard, OpenVPN) с VPS, у которого есть белый IP.
Проверка доступности порта снаружи
# С другой машины снаружи
telnet your-server-ip 12000
nc -zv your-server-ip 12000
# На самом сервере — убедиться, что процесс слушает
netstat -tlnp | grep 12000
ss -tlnp | grep 12000
Если netstat показывает, что порт слушается, а снаружи connection refused — проблема точно в firewall или NAT.
Диагностика и устранение типичных ошибок
Реальная работа с кардшарингом — это 20% настройки и 80% диагностики. Вот основные симптомы и что с ними делать.
Клиент не подключается (connection refused / timeout)
Connection refused: процесс не запущен или слушает не тот порт. Проверить: ps aux | grep [Oo][Ss]cam, netstat -tlnp | grep 12000. Timeout: процесс запущен, порт слушается, но firewall или NAT блокирует. Проверить iptables: iptables -L -n -v | grep 12000. Также проверить — не слушает ли OScam только на localhost (127.0.0.1), а не на всех интерфейсах (0.0.0.0).
Карта читается, но каналы не открываются
В веб-интерфейсе OScam видно, что ридер active, карта определена — а каналы серые. Первое, что проверить: совпадение CAID. В oscam.log ищем строки с ECM-запросами:
grep "ECM" /usr/local/var/log/oscam/oscam.log | tail -50
Если видите no matching reader — CAID в запросе не совпадает с тем, что прописан в ридере или аккаунте. Если rejected — проблема с group или caid-фильтром в oscam.user. При решаринге с большим числом хопов (5+) каналы могут не открываться просто из-за таймаута — ECM не успевает пройти туда-обратно за 300 мс.
Фризы и подвисания изображения (ECM time)
ECM time больше 500 мс — уже проблема. В веб-интерфейсе OScam (вкладка Readers) смотрим колонку «Last ECM». Причины высокого времени: перегруженный сервер, медленная карта, большой ping до сервера, много хопов при решаринге.
В CCcam: grep "ECM time" /var/log/CCcam.log. Параметр CCCAM MAX HOPS в CCcam.cfg ограничивает максимальную глубину решаринга — поставьте 3-4, чтобы не тянуть карты с огромным latency.
Ошибки чтения смарт-карты в ридере
Симптомы: ридер периодически уходит в статус «error», карта пропадает. В oscam.log ищем card error или card not found. Частая причина — питание USB-ридера. На роутерах USB-порт бывает слабым, помогает активный USB-хаб с отдельным питанием. Другая причина: карта требует пин-кода при инициализации. В oscam.server добавить pincode = 1234. Если карта требует периодической реинициализации — параметр readtiers = 1 и cardmhz подобрать под конкретную карту.
Конфликт CAID при нескольких картах в одном ридере (мультикарточный ридер): OScam может путаться с приоритетами. Решение — создать отдельный блок [reader] для каждой карты с явным указанием CAID и разными group.
Анализ логов OScam и CCcam
# OScam — живой хвост лога
tail -f /usr/local/var/log/oscam/oscam.log
# Найти все отказы по конкретному CAID
grep "0500" /usr/local/var/log/oscam/oscam.log | grep -i "reject\|error\|not found"
# CCcam — смотреть подключения
grep "connected\|disconnected" /var/log/CCcam.log | tail -30
В логах OScam каждая строка содержит временную метку, имя ридера/клиента и тип события. Внимание: если сервер и клиент в разных часовых поясах — временны́е метки в логах будут расходиться, что осложняет сопоставление событий. Убедитесь, что на сервере правильно выставлен timezone: timedatectl set-timezone Europe/Moscow.
Как выбрать надёжного провайдера: критерии
Если своей карты нет и нужно подключиться к чужому кардшаринг серверу — выбор провайдера критичен. Рынок полон нестабильных решений, которые работают неделю и пропадают.
Стабильность аптайма и резервные серверы
Хороший провайдер держит несколько серверов в разных локациях с автоматическим failover. Если в конфиге дают только один IP без резервного — это признак нестабильной инфраструктуры. Спросите перед оплатой, есть ли резервный сервер и как переключаться при сбое основного.
Время ответа ECM и пинг до сервера
Географическая близость сервера напрямую влияет на ECM time. Пинг 10 мс против 150 мс — это разница в комфорте просмотра. Перед подпиской на тестовый период сделайте ping server-ip и traceroute server-ip. Если сервер в Азии, а вы в Европе — ECM time будет плохим даже при идеальной настройке.
Поддержка нужных протоколов и пакетов (CAID)
Проверьте, что сервер поддерживает нужный вам CAID и protocol. Не все провайдеры держат локальные карты — многие сами являются клиентами третьего сервера. Решаринг с 3+ хопами даёт нестабильный ECM time. Спросите прямо: карты локальные или решаринг?
Тестовый период перед оплатой
Нормальный провайдер дает 24–48 часов тестового доступа без оплаты. Это стандарт. Если тест не предлагают или требуют полную предоплату — красный флаг. За тестовый период проверьте ECM time в реальных условиях (не только ночью, когда нагрузка минимальна), стабильность при переключении каналов и скорость реакции поддержки на вопрос.
Поддержка и реакция на сбои
Сбои бывают у всех. Важно, как быстро их устраняют. Провайдер без обратной связи или с ответом «через 2-3 дня» — не вариант для нормального использования. Минимум — Telegram-канал со статусом или email с ответом в течение нескольких часов.
Признаки ненадёжного провайдера: обещания 99.9% uptime без объяснения инфраструктуры, отсутствие тестового периода, частые реконнекты в логах (grep "reconnect" /var/log/CCcam.log), завышенное количество хопов (проверить через CCcam webif или OScam reader stats).
Какой порт по умолчанию использует CCcam сервер?
Стандартный порт — 12000, задаётся директивой SERVER LISTEN PORT в CCcam.cfg. Веб-интерфейс по умолчанию на порту 16001 (WEBINFO LISTEN PORT). Оба значения можно изменить на любой свободный порт, но клиенты должны знать актуальный номер.
Чем OScam лучше CCcam для сервера?
OScam активно поддерживается и обновляется, CCcam — нет. OScam одновременно слушает несколько протоколов (newcamd, cccam, camd35), имеет гибкую систему групп для разграничения доступа, детальный веб-мониторинг с ECM time по каждому клиенту и лучшую поддержку современных карт. CCcam проще в первоначальной настройке, но функционально уступает.
Почему клиент подключается, но каналы не открываются?
Проверьте несколько вещей по порядку: совпадение CAID и provid карты с запрашиваемым каналом в oscam.log, значение hops (слишком большое — карта недостижима), права аккаунта (group в oscam.user должна совпадать с group ридера), время ответа ECM в веб-интерфейсе. При решаринге с 4+ хопами каналы могут не открываться просто из-за таймаута.
Где находятся конфигурационные файлы OScam?
На обычном Linux — /usr/local/etc/oscam/. На embedded-ресиверах (Enigma2, OpenWRT) — /var/etc/oscam/. Точный путь задаётся при запуске флагом -c: oscam -b -c /etc/oscam. Основные файлы: oscam.conf, oscam.server, oscam.user.
Нужен ли белый IP для кардшаринг сервера?
Для входящих подключений клиентов снаружи — да, нужен внешний доступ. При динамическом белом IP используется DynDNS (DuckDNS, no-ip.com). При сером IP за двойным NAT провайдера пакеты снаружи просто не дойдут до вашего роутера. Решение: купить белый IP у провайдера или поднять WireGuard-туннель через VPS с белым IP.
Какое нормальное время ответа ECM?
До 300 мс — хорошо, 300–500 мс — приемлемо, выше 500 мс — начнутся фризы при переключении каналов. ECM time зависит от пинга до сервера, нагрузки на карту и количества хопов при решаринге. Смотреть в реальном времени можно в веб-интерфейсе OScam (порт 8888) или через grep "ECM time" /var/log/CCcam.log.