Кардшаринг сервер: настройка CCcam и OScam с нуля
Если вы читаете это, значит уже разобрались с тем, что такое кардшаринг, и теперь хотите поднять собственный кардшаринг сервер, а не зависеть от чужого. Правильный подход. В этом материале — конкретные конфиги, реальные пути к файлам, рабочие команды и объяснение каждого параметра. Без воды.
Что такое кардшаринг сервер и как он работает
Сервер в этой схеме — центральный узел, к которому физически подключена смарт-карта с платной подпиской. Когда ресивер клиента встречает зашифрованный канал, он отправляет на сервер ECM-пакет (Entitlement Control Message). Сервер передаёт этот пакет карте, получает обратно DCW (Decryption Control Word) — и возвращает его клиенту. Клиент расшифровывает картинку.
Весь цикл должен укладываться примерно в 200–250 мс. Если нет — фризы.
Архитектура: сервер, клиент и протокол обмена ключами
Физически это выглядит так: смарт-карта вставлена в CAM-модуль (CI+) или встроенный картридер ресивера на стороне сервера. Сервер слушает входящие соединения на TCP-порту (обычно 12000 для CCcam-протокола или 15000+ для newcamd). Клиентский ресивер подключается, аутентифицируется парой логин/пароль и начинает слать ECM-запросы.
Протоколов несколько: CCcam, newcamd, camd3, radegast. OScam поддерживает их все одновременно. CCcam — только свой фирменный протокол.
Чем отличается CCcam от OScam
CCcam — проприетарный, разработка давно заброшена. Последние рабочие сборки датируются 2012–2014 годами. Настраивается через один файл, порог вхождения низкий. Минус — почти нет нормального логирования и статистики.
OScam — открытый код, активно развивается сообществом. Конфигурация разбита на несколько файлов, каждый отвечает за своё. Зато веб-интерфейс, подробная статистика по каждому ридеру, ECM time в реальном времени, поддержка множества протоколов на разных портах. Для сервера я бы выбирал OScam — это просто другой уровень контроля.
Что такое DCW, ECM и control word
ECM — это зашифрованный пакет, который оператор передаёт в потоке вместе с видео. Внутри него — зашифрованный control word. Смарт-карта с действующей подпиской умеет этот пакет расшифровать и вернуть голый DCW — 8 байт, которыми и расшифровывается видео. Control word меняется каждые 10 секунд (crypto period). Если клиент не получил новый DCW вовремя — картинка замерзает.
Настройка сервера на OScam: конфигурационные файлы
OScam хранит конфиги в директории, которую указываете при запуске ключом -c. Чаще всего это /usr/local/etc/ или /var/etc/. На Enigma2-ресиверах (VU+, Dreambox) путь нередко /etc/tuxbox/config/oscam/. Проверить просто:
ps aux | grep oscam
В выводе будет строка с -c /путь/к/конфигам.
oscam.conf — глобальные параметры и веб-интерфейс
Основной конфиг. Минимальная рабочая секция [global]:
[global]
logfile = /var/log/oscam.log
maxlogsize = 500
ecmfmt = %c %11e %08X %04X %04X %s
clienttimeout = 5000
fallbacktimeout = 2500
bindwait = 120
sleep = 0
unlockparental = 0
serialreadertimeout = 1500
waitforcards = 1
preferlocalcards = 1
Параметр preferlocalcards = 1 заставляет OScam сначала пробовать локальную карту, потом уже шареные ридеры. Всегда включайте его на сервере.
Веб-интерфейс настраивается в секции [webif]:
[webif]
httpport = 8888
httpuser = admin
httppwd = yourpassword
httprefresh = 10
httpallowed = 127.0.0.1,192.168.1.0/24
Порт 8888 по умолчанию. Параметр httpallowed ограничивает доступ к веб-интерфейсу по IP — не забудьте прописать свою подсеть, иначе зайти не получится.
oscam.server — описание ридеров и смарт-карт
Каждый ридер — отдельная секция в файле oscam.server. Пример для физического картридера:
[reader]
label = local_card
protocol = internal
device = /dev/sci0
caid = 0604
detect = cd
mhz = 357
cardmhz = 357
group = 1
emmcache = 1,3,5
lb_weight = 100
Поле protocol зависит от типа ридера: internal — встроенный картридер, serial — внешний через COM, camd35, cccam, newcamd — для подключения к удалённым серверам. Поле device для внешних ридеров будет адресом удалённого сервера.
Параметр caid — идентификатор системы условного доступа. Ошибиться здесь = ридер будет игнорировать ECM-запросы. Значения: 0604 (Irdeto), 0500 (Viaccess), 0100 (Seca), 1800 (Nagravision), 0963/0960 (Conax), 0B00 (Conax тоже), 0D00 (CryptoWorks).
oscam.user — учётные записи клиентов
Файл oscam.user — это список клиентов вашего сервера. Каждая секция [account] — один клиент:
[account]
user = client1
pwd = secret123
group = 1
caid = 0604
au = 1
ident = 0604:000000
monlevel = 0
maxconnections = 1
Параметр group здесь ключевой. Он должен совпадать с group в соответствующем ридере oscam.server. Если клиент в группе 1, а ридер в группе 2 — клиент карту не получит. Через группы разграничиваете доступ к разным картам для разных клиентов.
au = 1 включает передачу EMM (Entitlement Management Message) — нужно для обновления прав на карте. Включайте только если знаете зачем.
maxconnections = 1 — один логин, одно подключение. Защита от слива учётных данных.
Раздача по протоколу CCcam (порт 12000) и newcamd
Чтобы OScam принимал подключения по CCcam-протоколу, добавьте секцию в oscam.conf:
[cccam]
port = 12000
reshare = 0
version = 2.3.0
build = 3650
reshare_mode = 0
reshare = 0 означает, что клиенты не могут пересылать карту дальше. Это правильно — не давайте клиентам реширить без необходимости.
Для newcamd — отдельная секция [newcamd]:
[newcamd]
port = 15000@0604:000000
key = 0102030405060708091011121314
Формат порта тут специфический: порт@CAID:ident. Ключ — 14 байт в hex, произвольный, должен совпадать на клиенте и сервере.
Настройка сервера на CCcam: файл CCcam.cfg
Конфиг CCcam лежит в /etc/CCcam.cfg или /var/etc/CCcam.cfg — зависит от сборки. На Enigma2 обычно /var/etc/. Весь конфиг — один файл, синтаксис простой.
Синтаксис строк F: для клиентов
Строка F: описывает учётную запись клиента, которому сервер раздаёт доступ:
F: username password 1 0 0 { } { }
# F: логин пароль hops au sharedowngrade { CAID } { провайдеры }
Разберём каждое поле:
username/password— учётные данные клиента- Первая цифра (
1) — количество hops для реширинга этому клиенту - Вторая цифра (
0) — au (0 = выключено) - Третья цифра (
0) — share downgrade { }— список CAID, пусто = все доступные- Второй
{ }— список провайдеров
Чтобы ограничить клиента только одним CAID, например Irdeto:
F: username password 1 0 0 { 0604 } { }
Строки C: для подключения к другим серверам
Строка C: — подключение вашего сервера к вышестоящему источнику карт:
C: server.example.com 12000 mylogin mypassword yes
# C: хост порт логин пароль reconnect
Последнее поле yes — автоматическое переподключение при обрыве. Почти всегда нужно.
Параметры hops, distance и lifetime
В CCcam.cfg глобальные параметры задаются так:
SERVER HOPS : 1
SHARE LIMIT : 10
MINIMIZE DISTANCE : yes
KEEPCONNECTED : 1
SERVER HOPS — максимальное количество пересылок карты, которые сервер будет принимать от внешних источников. Значение 1 означает только локальные карты. Чем больше hops, тем выше ECM time и тем нестабильнее картинка. Hop 1 (локальная карта) даёт ECM в районе 50–150 мс. Hop 3–4 — уже легко 400–600 мс, что ведёт к фризам.
MINIMIZE DISTANCE : yes — CCcam будет выбирать ридер с наименьшим количеством пересылок. Включайте всегда.
Сетевые параметры и порт сервера:
SERVER PORT : 12000
ALLOW TELNET : no
ALLOW HTTP : yes
HTTP PORT : 8080
HTTP REMOTECONFIG : no
Telnet оставляйте выключенным — передаёт данные в открытом виде. HTTP-интерфейс CCcam значительно беднее OScam, но для базового мониторинга сгодится.
Порты, проброс и сетевая часть
Без правильной сетевой настройки кардшаринг сервер будет работать только внутри локальной сети. Чтобы клиенты подключались снаружи — нужен проброс порта и публичный IP.
Открытие порта 12000 на роутере (port forwarding)
В веб-интерфейсе роутера находите раздел NAT / Port Forwarding / Virtual Servers (название зависит от прошивки). Создаёте правило:
- Протокол: TCP
- Внешний порт: 12000
- Внутренний IP: локальный адрес сервера (например, 192.168.1.100)
- Внутренний порт: 12000
Если используете OScam с newcamd — отдельное правило для порта 15000. Если несколько карт на разных портах — правило для каждого. На маршрутизаторах с OpenWrt/DD-WRT это делается через iptables или раздел Firewall → Port Forwarding в LuCI.
Статический IP или динамический DNS (DDNS)
Домашний интернет почти всегда выдаёт динамический IP — он меняется при каждом переподключении. Клиенты потеряют сервер при смене адреса.
Решения два. Первое — платный статический IP у провайдера (обычно 100–500 рублей в месяц). Второе — DDNS-сервис: регистрируете домен вида myserver.ddns.net, на сервере запускаете клиент DDNS (ddclient, inadyn), который обновляет запись при смене IP. Клиент подключается по имени хоста.
Но есть проблема серьёзнее динамического IP — CGNAT. Многие провайдеры (особенно мобильные) выдают «серый» IP из диапазона 100.64.0.0/10. Ваш роутер за NAT провайдера — проброс порта не поможет совсем. Снаружи ваш сервер просто не виден. В этом случае вариантов два: запросить у провайдера белый IP (иногда дают бесплатно) или арендовать VPS с публичным IP и поднять там туннель (WireGuard, OpenVPN) до домашней машины.
Проверка доступности порта снаружи
После настройки проброса проверьте доступность с другой машины (не из своей локальной сети):
telnet your.external.ip 12000
# или
nc -zv your.external.ip 12000
Если соединение устанавливается — CCcam ответит баннером, OScam — просто откроет соединение. Если Connection refused — порт закрыт или сервис не запущен. Если Connection timed out — порт не пробрасывается или CGNAT.
Ещё один частый случай на VPS — порт 12000 уже занят другим процессом. Проверяйте:
ss -tlnp | grep 12000
# или
lsof -i :12000
Если порт занят — либо меняйте порт в конфиге, либо разбирайтесь, что за процесс его держит.
Диагностика и решение типичных ошибок
Большинство проблем с кардшаринг сервером делятся на две категории: клиент не подключается вообще или подключается, но картинки нет. Это совершенно разные проблемы с разными причинами.
Клиент подключается, но нет изображения (no DCW / ECM timeout)
Клиент подключился — значит с сетью и аутентификацией всё в порядке. Но DCW не приходит. Первое, что проверяем в OScam webif (http://server-ip:8888): статус ридера. Если ридер показывает CONNECTED, но счётчик ECM стоит на нуле — ридер не получает запросы. Чаще всего причина — несовпадение CAID или ident.
Смотрите что просит клиент (вкладка Clients в webif) и что умеет обслуживать ридер. Если клиент шлёт ECM с CAID 0604, ident 000000, а в ридере прописан caid = 0604, ident 020810 — запрос отклонится. Сверяйте точно.
Вторая причина — клиент не в нужной группе. Проверьте group в oscam.user для этого клиента и group в oscam.server для ридера. Должны совпадать.
Freeze и фризы изображения по таймауту
Картинка есть, но периодически замерзает на 1–3 секунды. Это ECM timeout — клиент не получает новый DCW к концу crypto period (10 секунд).
В OScam webif, вкладка Readers: смотрите колонку ECM time. Нормально — до 250 мс. 300–400 мс — на грани, фризы будут редкими. Больше 500 мс — стабильные фризы.
Причины высокого ECM time: высокий ping до источника карты, большое количество hops, перегруженный ридер. Отдельная история — рассинхрон времени между сервером и клиентом. Некоторые системы проверяют временну́ю метку в ECM. Если расхождение больше нескольких секунд — карта может отказывать. Настройте NTP:
ntpdate pool.ntp.org
# или через systemd:
timedatectl set-ntp true
Особенно актуально для Enigma2-ресиверов, которые после перезагрузки могут иметь неправильное время.
Ошибки прав доступа и неверный CAID/provider ID
В логах OScam ищите строки вида:
CAID: 0604, ident: 020810, rejected by user config
или
no matching reader found for ECM
Первое — клиент есть, но его CAID/ident не совпадает с тем, что разрешено в oscam.user. Уберите ограничение по ident или пропишите правильный. Второе — ни один ридер не может обслужить запрос. Проверяйте группы и CAID ридеров.
Бывает, оператор меняет CAID или структуру ident — карта перестаёт работать без каких-либо ошибок подключения. Обновляйте параметры ридера при таких событиях.
Если у вас несколько ридеров с одним CAID (например, два источника для надёжности), настройте приоритет и fallback:
[reader]
label = primary_card
lb_weight = 100
[reader]
label = backup_card
lb_weight = 50
fallback = 1
fallback = 1 — ридер используется только если основные недоступны. lb_weight задаёт приоритет при балансировке нагрузки.
Чтение логов OScam через веб-интерфейс
OScam webif — главный инструмент диагностики. Вкладка Log показывает лог в реальном времени. Можно также читать файл напрямую:
tail -f /var/log/oscam.log
Путь к логу задаётся в oscam.conf параметром logfile. Уровень детализации — параметр debuglevel (значение 1 для базовой диагностики, 64 и выше — для детальной трассировки ECM).
На вкладке Status — сводка по всем клиентам и ридерам: кто подключён, сколько ECM обработано, среднее время. Это первое место, куда смотреть при любой проблеме.
Как выбрать надёжный источник доступа: критерии
Если своей карты нет и нужно подключиться к внешнему ридеру через строку C: (CCcam) или удалённый ридер в oscam.server — вопрос выбора источника становится ключевым. Конкретные сервисы называть не буду, но критерии — вот они.
На что смотреть: аптайм, ping, локальные карты vs решары
Первое — hop count. Локальная карта (hop 1) стабильно быстрее и надёжнее реширинга. ECM time у hop 1 обычно 50–150 мс, у hop 3–4 — легко 400+ мс. Спрашивайте у источника напрямую: локальные карты или решары. Если не отвечают или уклоняются — скорее всего решары.
Второе — заявленный аптайм. Хороший показатель — 99%+ за 30 дней. Как проверить? Только на практике, но тестовый доступ на 24–48 часов позволяет составить первичное мнение.
Третье — пинг до сервера источника. Проверяйте до подключения:
ping server.example.com
Больше 150–200 мс — с учётом обработки на сервере ECM time легко уйдёт за 300 мс, и фризы гарантированы при любом дополнительном замедлении.
Стабильность ECM-времени и количество hops
Важна не только средняя, но и максимальная задержка. Источник с средним ECM 150 мс, но пиками до 600 мс — хуже источника со стабильными 200 мс. В OScam webif смотрите на колонку Max ECM — она показывает пиковое значение с момента последнего сброса статистики.
Количество hops в OScam ограничивается параметром cccmaxhops в секции [cccam] или параметром distance в секции [reader] для конкретного ридера:
[reader]
label = remote_source
protocol = cccam
device = server.example.com,12000
user = mylogin
password = mypassword
caid = 0604
group = 1
distance = 2
distance = 2 — принимать карты глубиной не более 2 hops. Источник пришлёт что есть, но ридер отфильтрует по глубине.
Тестовый период и техподдержка
Уважающий себя источник даёт тестовый доступ перед оплатой. Это нормально и ожидаемо. За время теста обязательно проверяйте:
- ECM time в OScam webif — несколько раз в разное время суток
- Стабильность при смене канала (время на открытие нового ECM)
- Поведение в прайм-тайм, когда нагрузка на сервер источника максимальная
- Скорость реакции поддержки на вопросы
Если тест не предлагают — повод насторожиться.
Какой порт по умолчанию использует кардшаринг сервер?
Стандартный порт CCcam-протокола — 12000 (TCP). Newcamd обычно работает в диапазоне 15000+, конкретный порт задаётся в конфиге OScam в формате port = 15000@CAID:ident. Веб-интерфейс OScam по умолчанию слушает порт 8888. Все порты можно менять в конфигурационных файлах — ограничений нет.
Чем OScam лучше CCcam для сервера?
OScam — открытый код с активной поддержкой сообщества. Поддерживает одновременно несколько протоколов (CCcam, newcamd, camd3) на разных портах, имеет детальный веб-интерфейс со статистикой по каждому ридеру и ECM time в реальном времени. CCcam проще в начальной настройке, но разработка давно заброшена, логирование примитивное, диагностировать проблемы значительно сложнее.
Почему клиент подключился, но нет изображения?
Чаще всего это несовпадение CAID или ident между клиентом и ридером, неправильная группа в oscam.user, или высокий ECM time из-за большого количества hops. Откройте OScam webif, вкладку Status — посмотрите, какой CAID запрашивает клиент и какой обрабатывает ридер. Сверьте ident в oscam.server и запросе клиента.
Можно ли поднять сервер на домашнем интернете?
Да, но необходим белый (публичный) IP и проброс порта 12000 на роутере. Если провайдер выдаёт серый IP за CGNAT (диапазон 100.64.0.0/10) — сервер снаружи недоступен, проброс порта не поможет. В этом случае нужен либо запрос статического IP у провайдера, либо VPS с туннелем (WireGuard или OpenVPN) до домашней машины.
Что означают hops и distance в конфиге?
Hops — количество пересылок карты между серверами. Hop 1 означает локальную карту, непосредственно подключённую к серверу — это самый стабильный вариант с ECM time 50–150 мс. При hop 3–4 ECM time растёт до 400–600 мс и выше, что даёт фризы. Параметр distance в OScam ограничивает глубину принимаемых ридеров — например, distance = 2 отфильтрует всё глубже hop 2.
Где находятся конфигурационные файлы OScam?
Зависит от сборки. На большинстве Linux-систем — /usr/local/etc/ или /var/etc/. На Enigma2-ресиверах (VU+, Dreambox, GigaBlue) чаще всего /etc/tuxbox/config/oscam/. Точный путь смотрите в строке запуска процесса: ps aux | grep oscam — там будет ключ -c /путь/. Основные файлы: oscam.conf, oscam.server, oscam.user.