Кардшаринг сервер: настройка CCcam и OScam с нуля
Если вы уже разобрались с теорией и хотите поднять рабочий кардшаринг сервер — вы попали по адресу. Здесь не будет рассказа о том, «что такое спутниковое телевидение». Только конфиги, пути к файлам, команды и разбор ошибок, с которыми сталкивается большинство.
Материал рассчитан на человека с Linux-терминалом открытым прямо сейчас.
Что такое кардшаринг сервер и как он работает
Быстро по сути. Ресивер принимает зашифрованный сигнал и не может его расшифровать без control word (CW) — 8-байтного ключа, который меняется каждые ~10 секунд. Чтобы получить CW, он отправляет ECM-запрос на сервер. Сервер передаёт этот запрос к смарт-карте, карта возвращает CW, и оно отправляется обратно клиенту. Весь цикл должен занимать меньше 1–2 секунд — иначе фризы.
Принцип обмена ECM/EMM запросами
ECM (Entitlement Control Message) — зашифрованный пакет с данными для получения CW. EMM (Entitlement Management Message) — пакеты управления подпиской, которые обновляют права на карте. Ресивер постоянно шлёт ECM-запросы с частотой смены ключа. Если сервер не успел ответить до следующей смены — канал зависает.
Важно понимать: задержка даже в 300–400 мс на пути туда-обратно уже создаёт риск фризов на каналах с быстрой сменой CW (некоторые спортивные пакеты меняют ключ каждые 5 секунд).
Роль сервера и клиента в схеме
В рамках одного демона (OScam или CCcam) устройство может быть одновременно и сервером, и клиентом. Сервер — тот, кто раздаёт CW другим. Клиент — тот, кто запрашивает CW у сервера выше. Один и тот же OScam на вашей машине может принимать карту локально (reader), отдавать её вниз по сети клиентам и одновременно проксировать чужие линии.
Чем отличаются протоколы CCcam, Newcamd и CS378x
CCcam-протокол — проприетарный, порт по умолчанию 12000/tcp. Самый распространённый, практически все ресиверы его поддерживают. Newcamd использует порт 15000, шифрует трафик DES, чуть безопаснее в открытых сетях. CS378x — это CCcam-совместимый протокол внутри OScam, более гибкий в плане настройки фильтров.
OScam поддерживает все три и ещё несколько — camd33, camd35, radegast. CCcam «из коробки» говорит только на своём протоколе, но клиенты могут подключаться через Newcamd-прокси.
Установка и базовая настройка OScam
OScam — это то, что я рекомендую для серьёзной настройки. Активно разрабатывается, есть веб-интерфейс, детальные логи и гибкая система фильтрации по CAID/ident.
Сборка из исходников и готовые бинарники
Для Debian/Ubuntu быстрее взять готовый бинарник под вашу архитектуру с официального SVN-репозитория OScam (r11XXX, последние ревизии). Для ARM-ресиверов (Dreambox, VU+, Octagon) обычно есть prebuilt под mipsel или ARM. Сборка из исходников нужна, если хотите включить специфические модули — например, поддержку PCSC-ридера на x86:
svn checkout https://svn.streamboard.tv/oscam/trunk oscam-src
cd oscam-src
make CONF_DIR=/etc/tuxbox/config USE_PCSC=1
На ARM-ресивере с устаревшей сборкой OScam (до r11500) может не быть поддержки более новых протоколов шифрования — если карта не читается, это первое, что проверяю.
Структура каталога /etc/tuxbox/config или /var/keys
На большинстве Linux-ресиверов конфиги лежат в /etc/tuxbox/config/. На x86 Linux чаще используют /usr/local/etc/oscam/ или /etc/oscam/. Некоторые сборки под Enigma2 кладут всё в /var/keys/. Проверить, откуда демон читает конфиги, можно запуском с флагом:
oscam --version
Строка Config dir: покажет активный путь.
Файлы oscam.conf, oscam.server, oscam.user
Минимальный рабочий oscam.conf:
[global]
logfile = /var/log/oscam.log
maxlogsize = 500
nice = -1
[webif]
httpport = 8888
httpuser = admin
httppwd = yourpassword
httprefresh = 10
oscam.server описывает ридеры — физические карты или upstream-линии. Пример reader для смарт-карты через phoenix-ридер:
[reader]
label = local_card
protocol = phoenix
device = /dev/ttyUSB0
caid = 0500
detect = CD
mhz = 368
cardmhz = 368
Для CCcam-линии от провайдера reader выглядит иначе:
[reader]
label = upstream_cccam
protocol = cccam
device = server.example.com,12000
user = mylogin
password = mypassword
caid = 0500,1810
oscam.user — учётки для ваших клиентов:
[account]
user = client1
pwd = pass123
caid = 0500
au = 1
Запуск демона и проверка веб-интерфейса
Запуск в фоне с уровнем логирования 2:
oscam -b -r 2 -c /etc/tuxbox/config
После запуска веб-интерфейс доступен на http://IP_сервера:8888. Там видны все ридеры, подключённые клиенты и статус каждого ECM-запроса в реальном времени. Это самый удобный инструмент для первичной отладки.
Настройка CCcam сервера: CCcam.cfg на практике
CCcam проще в базовой настройке — один файл, синтаксис понятный. Но он менее гибкий в сравнении с OScam при работе с несколькими CAID и фильтрами.
Структура строк F: для клиентов
F-line добавляет пользователя, которому вы раздаёте шару:
F: username password 1 0 0 { 0:0:1 }
Разбираем по полям: username — логин клиента, password — пароль, первая цифра после пароля — количество допустимых hop'ов вниз (1 = клиент не может дальше раздавать эту шару), затем флаги. Фигурные скобки — фильтр по CAID:ident:provid. 0:0:1 означает «всё разрешено».
Строки C: для подключения к внешним линиям
C-line описывает upstream — сервер, от которого вы принимаете шару:
C: server.host.com 12000 mylogin mypassword
Здесь нет фигурных скобок — CCcam примет всё, что пришлёт сервер. Можно добавить несколько C-line, CCcam будет переключаться между ними при недоступности.
Параметры hops, distance и share limits
Hop — это «расстояние» от локальной карты. Карта на сервере = hop 0. Клиент, получающий CW напрямую от карты = hop 1. Если тот клиент раздаёт дальше — hop 2 и так далее. Чем больше hop'ов, тем выше задержка и тем нестабильнее сигнал.
В глобальной секции CCcam.cfg:
SHARE LIMITS: 5
UPSTREAM PRIORITY: 1
MAX HOPS: 3
MAX HOPS: 3 означает, что CCcam не будет раздавать карты с расстоянием более 3 от источника. Разумное значение — не больше 2–3.
Размещение файла /var/etc/CCcam.cfg
На большинстве ресиверов с Enigma2 файл находится по пути /var/etc/CCcam.cfg. На обычном Linux — /etc/CCcam.cfg. После правки нужен перезапуск демона:
killall -9 CCcam && CCcam &
Или через init.d, если CCcam установлен как сервис:
/etc/init.d/CCcam restart
Права на файл должны быть 600, владелец — тот пользователь, под которым запускается демон. Если файл читается всеми — это дыра в безопасности. chmod 600 /var/etc/CCcam.cfg.
Открытие портов и сетевая настройка
Сетевая часть — то, где большинство застревает. Сервер поднят, конфиги правильные, а клиенты не подключаются. Почти всегда это NAT или firewall.
Проброс портов на роутере (NAT)
Порты, которые нужно пробросить:
- CCcam: 12000/tcp
- Newcamd: 15000/tcp
- OScam webif: 8888/tcp (только для локального доступа, наружу лучше не открывать)
- CS378x: по умолчанию 15001/tcp
В роутере нужно создать правило port forwarding: внешний порт → внутренний IP сервера → тот же порт. Если провайдер использует CGNAT (Carrier-Grade NAT), проброс работать не будет — ваш «внешний» IP на самом деле тоже за NAT провайдера. В этом случае проброс бесполезен и нужен другой подход.
Для CGNAT — единственные рабочие варианты: VPN с выделенным IP или реверс-туннель через внешний VPS. Например, через SSH:
ssh -R 12000:localhost:12000 [email protected] -N
Тогда клиенты подключаются к IP вашего VPS, а трафик туннелируется на домашний сервер.
Динамический IP и DDNS
Если провайдер выдаёт динамический IP, каждый раз менять C-line у клиентов неудобно. Решение — DDNS. Сервисы вроде DuckDNS (бесплатный) или No-IP дают вам постоянное доменное имя, которое автоматически обновляется при смене IP.
На роутерах с OpenWrt или на самом сервере можно поставить ddclient:
apt install ddclient
# затем настроить /etc/ddclient.conf под ваш DDNS-сервис
После этого в C-line клиентов прописываете доменное имя вместо IP — и при смене адреса ничего переделывать не нужно.
Настройка iptables/firewall на сервере
Разрешить входящие подключения на порт CCcam:
iptables -A INPUT -p tcp --dport 12000 -j ACCEPT
iptables -A INPUT -p tcp --dport 15000 -j ACCEPT
Если нужно ограничить доступ только с определённых IP (например, IP клиентов):
iptables -A INPUT -p tcp -s 203.0.113.45 --dport 12000 -j ACCEPT
iptables -A INPUT -p tcp --dport 12000 -j DROP
Сохранить правила:
iptables-save > /etc/iptables/rules.v4
Типичная ошибка — несколько демонов пытаются слушать один и тот же порт после некорректного перезапуска. Проверить:
ss -tlnp | grep 12000
Если видите два процесса на одном порту — убейте старый: kill -9 PID.
Как выбрать провайдера линий: критерии без названий
Этот сайт носит информационный характер, и мы не рекламируем конкретных провайдеров. Но объяснить, на что смотреть при выборе — вполне можем.
Стабильность аптайма и пинг сервера
Пинг до сервера — самый важный параметр. Всё, что выше 100–150 мс, начинает создавать проблемы на каналах с частой сменой CW. Нормальный кардшаринг сервер с локальными картами даёт ECM time в диапазоне 50–120 мс. Если в логах видите 400–600 мс — это не ваш интернет, это сервер далеко или перегружен.
Аптайм ниже 99% в месяц — красный флаг. Перебои в 3–4 часа ночи — типичный признак нестабильного сервера или проводимых работ без предупреждения.
Поддержка нужных CAID и пакетов
CAID (Conditional Access ID) — идентификатор системы шифрования. Viaccess — 0500, Nagravision — 1810, Irdeto — 0604, Conax — 0B00. Перед подключением уточните, какие CAID покрывает сервер, и сравните с тем, что нужно именно вам. Универсальных серверов, которые хорошо работают со всеми системами сразу, практически не существует.
Локальные карты против решары
Это ключевое различие, которое почти нигде нормально не объясняется. Локальная (local) карта — физически вставлена в ридер на сервере провайдера. ECM обрабатывается напрямую, без посредников. Решара (reshare) — это когда сервер сам является клиентом чьей-то линии и раздаёт её дальше.
При длинной цепочке reshare каждый hop добавляет задержку. Если оригинальный сервер временно перегружен — все клиенты всей цепочки получают фризы одновременно. Чем длиннее цепочка, тем нестабильнее. Идеальный вариант — hop 0 или hop 1 от локальной карты.
Решение типовых проблем и отладка
Большинство проблем решается чтением логов. Не гаданием, не перезагрузкой — именно чтением логов.
Канал не открывается: чтение логов OScam
Открыть лог в реальном времени:
tail -f /var/log/oscam.log
Или смотреть прямо в веб-интерфейсе на вкладке Logs. Ключевые статусы ECM:
found (Xms)— всё хорошо, CW получен за X миллисекундnot found— ни один ридер не смог декодировать запросtimeout— ридер не ответил вовремяrejected (E)— несовпадение CAID или ident
Статус not found при рабочем соединении обычно означает, что карта не подписана на этот пакет. timeout — сетевая проблема или перегруз.
Фризы и подёргивания изображения
Фризы при статусе found в логах — парадокс, с которым сталкиваются многие. Причина почти всегда в том, что ECM time слишком близко к лимиту смены ключа. Если канал меняет CW каждые 10 секунд, а ECM time составляет 8–9 секунд — формально «found», но на практике ресивер не успевает применить ключ до следующей смены.
Смотрите среднее ECM time в веб-интерфейсе OScam на вкладке Readers. Нормально — до 200 мс. Плохо — более 500 мс. Критично — более 1000 мс.
Ошибки ECM timeout и rejected
rejected (E) — буква E означает «entitlement», то есть запрос пришёл с CAID или ident, которые не совпадают с тем, что ожидает ридер. Проверьте секцию caid в oscam.server и убедитесь, что указаны все нужные значения. Иногда проблема в том, что ident не добавлен в фильтр reader'а.
Пример исправления в oscam.server:
[reader]
label = my_reader
caid = 0500
ident = 0500:032830,0500:032831
timeout без других ошибок — смотрите на пинг до upstream-сервера и на загрузку CPU на самом сервере. OScam умеет показывать статистику по каждому reader'у, включая количество timeout'ов за сессию.
Проблемы с правами на конфиг-файлы
Два классических случая, которые ломают всё и при этом выглядят как «демон запустился, но ничего не работает».
Первый — неверные права. OScam иногда молча игнорирует файлы, к которым нет доступа. Правильные права:
chmod 600 /etc/tuxbox/config/oscam.*
chown oscam:oscam /etc/tuxbox/config/oscam.*
Второй — CRLF в конфигах. Если вы редактировали файл в Windows (Notepad, WordPad) и скопировали на сервер — в конце каждой строки есть символ \r, который Linux не обрезает автоматически. OScam либо не стартует, либо не читает такие строки. Исправить:
sed -i 's/\r//' /etc/tuxbox/config/oscam.conf
Или используйте dos2unix:
apt install dos2unix
dos2unix /etc/tuxbox/config/oscam.*
Аналогично для CCcam.cfg — та же проблема с CRLF, особенно если F-line или C-line скопированы из письма или веб-страницы.
Ещё один нетривиальный случай: карта читается локально (в логах видите successful read), но EMM не обновляется. Это либо неверный protocol в reader, либо нет прав на запись в устройство. Проверьте, что у пользователя OScam есть права на /dev/ttyUSB0 (или другой serial device):
usermod -aG dialout oscam
Частые вопросы
Какой порт по умолчанию использует кардшаринг сервер?
Зависит от протокола. CCcam слушает на 12000/tcp, Newcamd — на 15000/tcp, веб-интерфейс OScam — на 8888/tcp. Все эти значения меняются в конфиг-файлах: в CCcam.cfg — параметр SERVER LISTEN PORT, в oscam.conf — секция [webif] с параметром httpport.
Что лучше для сервера — CCcam или OScam?
OScam гибче: поддерживает больше протоколов (CCcam, Newcamd, CS378x, camd35 и другие), имеет полноценный веб-интерфейс, подробные логи и активно разрабатывается. CCcam проще в начальной настройке и привычнее для тех, кто пришёл со старых ресиверов. Оба демона совместимы между собой — OScam может работать как клиент CCcam и наоборот.
Почему каналы фризят при рабочем подключении?
Чаще всего — высокий ping до сервера или длинная цепочка решары. Смотрите ECM time в логах OScam: если стабильно выше 400–500 мс, проблема в сети или перегрузе источника. Также причиной может быть нестабильный интернет с пакетными потерями — OScam не всегда успевает повторить запрос.
Где находится файл конфигурации CCcam?
На ресиверах с Enigma2 — обычно /var/etc/CCcam.cfg. На обычном Linux — /etc/CCcam.cfg. После любых правок нужен перезапуск демона: killall CCcam && CCcam & или через init-скрипт. Права на файл — 600, иначе конфиг может не читаться.
Можно ли поднять сервер на обычном Linux-ПК без ресивера?
Да. OScam собирается под x86 и x86_64 без проблем. Для работы с локальной смарт-картой нужен ридер — PCSC-совместимый (например, ACR38U) или phoenix-ридер через USB-serial. Если локальной карты нет, OScam можно использовать как proxy-сервер: принимать upstream-линию и раздавать её клиентам без физической карты.
Что означает ошибка ECM timeout в логах?
Сервер не успел вернуть control word за отведённое время. Причины: высокая задержка в сети, перегруз upstream-ридера, неверный CAID или ident (запрос уходит не к тому ридеру и висит до таймаута). Проверьте, что CAID в oscam.server совпадает с тем, что запрашивает клиент. Таймаут можно настроить параметром ctimeout в секции reader — по умолчанию 2500 мс.