Card Sharing: что это, как работает CCcam и OScam в 2026

Card sharing — технология, которая позволяет нескольким спутниковым ресиверам одновременно использовать одну физическую смарт-карту через сеть. Звучит просто, но за этим стоит довольно нетривиальная архитектура с собственными протоколами, форматами пакетов и слоями шифрования. Если хочешь настроить собственный сервер, а не просто вставить C-line от кого-то — читай внимательно.

Что такое card sharing и как работает протокол

Вся идея card sharing строится на одном факте: спутниковый канал шифруется control words (CW) — парой 8-байтных ключей, которые меняются каждые 10 секунд. Смарт-карта умеет расшифровывать эти ключи из ECM-пакетов, которые приходят вместе с сигналом. Ресивер без карты — слепой. Ресивер с картой — видит всё, что на ней подписано.

Задача card sharing: взять одну карту, подключить к серверу, и раздавать расшифрованные CW нескольким клиентам по сети. Каждый клиент шлёт свой ECM на сервер, сервер отдаёт его карте, карта возвращает CW, сервер отправляет CW клиенту. Клиент подставляет CW в декодер — канал открывается. Всё это должно уложиться примерно в 500ms, иначе начнутся фризы.

Архитектура клиент-сервер

Сервер — это машина (может быть Raspberry Pi, VPS, или сам ресивер) с подключённым картридером и запущенным OScam или CCcam. Клиент — ресивер с установленным OScam/CCcam в режиме клиента. Между ними — TCP-соединение по одному из поддерживаемых протоколов.

Один сервер может обслуживать десятки клиентов одновременно. Лимит — скорость ответа карты и пропускная способность канала. На практике одна карта стабильно тянет 5–15 одновременных ECM-запросов без деградации.

ECM и EMM пакеты — что это и зачем

ECM (Entitlement Control Message) — пакет, содержащий зашифрованные control words. Приходит в потоке вместе с видео, меняется каждые 10 секунд. Карта расшифровывает ECM и возвращает CW.

EMM (Entitlement Management Message) — другой тип пакетов. Они обновляют права на карте, продлевают подписку, добавляют новые каналы. EMM не нужны для мгновенного просмотра, но без них карта через некоторое время теряет права на каналы. В OScam за EMM-обработку отвечает опция emmcache и настройки в oscam.server.

DVB-CA и роль control words

DVB-CA (Conditional Access) — стандарт описывающий как реализована система условного доступа в DVB-потоках. Каждый провайдер использует свою CAS (Conditional Access System): Conax, Irdeto, Viaccess, Nagravision, VideoGuard, Biss. У каждой системы свой CAID — четырёхзначный hex-идентификатор. Например, Nagravision — 0x1800, Viaccess — 0x0500, Irdeto — 0x0604.

Когда настраиваешь OScam, CAID указывается в oscam.server в параметре caid. Неправильный CAID — ридер не будет обрабатывать ECM от нужных каналов, и ты будешь долго гадать почему всё «не работает».

Чем card sharing отличается от IPTV

IPTV тебе присылает готовый видеопоток через интернет. Провайдер декодирует спутник на своей стороне, ты получаешь уже открытое видео. Никакого спутника у тебя нет — только подписка и m3u-плейлист.

Card sharing — ты сам ловишь спутниковый сигнал антенной, сам декодируешь. Сервер отдаёт только ключи (CW), а не видео. Трафик минимальный — несколько килобайт в секунду. Качество картинки зависит от твоего спутникового приёма, а не от интернет-канала провайдера.

CCcam vs OScam: какой софт выбрать

Если коротко: OScam для всего нового, CCcam — только если у тебя какое-то старое оборудование которое ничего другого не понимает.

CCcam — закрытый протокол, простота настройки

CCcam — проприетарный софт, последний раз обновлялся в 2014 году. Протокол реверс-инжинирен и задокументирован сообществом, поэтому его поддерживают практически все клиенты. Конфиг простой: один файл /etc/CCcam.cfg, синтаксис читаемый.

Но разработка мертва. Баги не фиксятся. Поддержка новых CAS-систем не добавляется. На Enigma2-ресиверах CCcam всё ещё живёт как legacy-плагин, но новые установки я бы на нём не делал.

OScam — open source, активная разработка

OScam (Open Source Cam) — это другая история. Активно развивается, последние коммиты в репозитории датированы 2025 годом. Поддерживает чтение карт через встроенные ридеры (protocol=internal), USB-картридеры (smartreader, pcsc), CI-слоты.

Поддерживаемые протоколы: CCcam, newcamd, radegast, gbox, camd33, camd35, scam. Можно поднять OScam-сервер и принимать подключения сразу по нескольким протоколам одновременно — удобно если клиенты разные.

Из минусов — конфигурация сложнее. Минимум пять отдельных файлов. Но оно того стоит.

NewCS, mgcamd — устаревшие альтернативы

NewCS — сервер для карт, mgcamd — клиент для ресиверов. Оба не обновляются уже много лет. Если встречаешь инструкции где написано «установи mgcamd» — знай, что статья написана лет 8 назад. Сейчас всё это заменяет OScam, который умеет работать и как сервер, и как клиент одновременно.

Совместимость с энигма-ресиверами (Vu+, Dreambox, Octagon)

Vu+ Solo, Duo, Ultimo — OScam ставится через плагин-менеджер в Enigma2 или вручную через ipkg/opkg. На Dreambox DM900/DM920 — аналогично. Octagon SF8008 — то же самое. Встроенный ридер обычно виден как /dev/sci0.

На всех этих ресиверах OScam работает как в режиме клиента (для card sharing от внешнего сервера), так и в режиме сервера (если в ресивере вставлена своя карта и ты хочешь раздавать).

Настройка OScam-сервера: пошаговый разбор конфигов

Конфиги OScam лежат в /etc/oscam/ на обычном Linux или в /var/etc/oscam/ на Enigma2-ресиверах. На некоторых дистрибутивах путь /usr/local/etc/oscam/. Посмотреть где OScam ищет конфиги можно командой oscam --help 2>&1 | grep config.

oscam.conf — глобальные параметры и веб-интерфейс

Основной конфиг. Минимальный рабочий вариант:

[global]
logfile                = /var/log/oscam.log
nice                   = -1
maxlogsize             = 2048
preferlocalcards       = 1

[webif]
httpport               = 8888
httpuser               = admin
httppwd                = секретныйпароль
httprefresh            = 10
httphideidleclients    = 1

nice = -1 даёт процессу OScam чуть более высокий приоритет — на нагруженных системах это заметно влияет на ECM time. preferlocalcards = 1 означает что локальные карты будут обрабатывать запросы в первую очередь перед тем как обращаться к апстримам.

oscam.server — описание ридеров (картридеров)

Каждый картридер — отдельная секция [reader]:

[reader]
label                  = my_card
protocol               = internal
device                 = /dev/sci0
caid                   = 1800
boxid                  = 12345678
rsakey                 = AABBCCDD...
group                  = 1
emmcache               = 1,3,31
auprovid               = 000000

Для USB-картридера (например, Smargo): protocol = smartreader, device = /dev/ttyUSB0. Скорость порта для большинства карт — 357600 бод, но Nagravision иногда требует irdeto = 1 и другую скорость.

boxid и rsakey — специфичны для конкретных CAS. Для Nagravision нужен boxid в десятичном формате. Неверные значения → «Reader is not responding» в логах.

oscam.user — учётные записи клиентов

[account]
user                   = client1
pwd                    = password123
group                  = 1
au                     = my_card
betatunnel             = 1
uniq                   = 4
maxconnections         = 1

au = my_card привязывает клиента к конкретному ридеру для получения EMM-обновлений. uniq = 4 разрывает предыдущее соединение при новом логине с теми же учётными данными — защита от шаринга учётки. maxconnections = 1 дополнительно ограничивает одновременные подключения.

oscam.services — группировка каналов по CAID

Опциональный файл, но полезный когда у тебя несколько карт разных провайдеров и нужно направлять ECM от конкретных каналов к конкретным ридерам:

[PROVIDER_A]
caid                   = 1800
provid                 = 000000
srvid                  = 0001,0002,0003

Потом в oscam.user можно разрешить клиенту только конкретные services через параметр services = PROVIDER_A.

Запуск как systemd-сервис

# Включить автозапуск
systemctl enable oscam

# Запустить
systemctl start oscam

# Следить за логом в реальном времени
journalctl -u oscam -f

# Отладочный запуск с максимальным логированием
oscam -d 255 -c /etc/oscam

После любого изменения конфига OScam можно перечитать конфиг без перезапуска через веб-интерфейс: «Config» → «Reload». Полный рестарт нужен только при изменении oscam.conf в секции [global].

Подключение клиента и проброс портов

Клиент подключается к серверу по C-line (для CCcam-протокола) или через newcamd-строку. C-line — стандартный формат для CCcam-совместимых подключений.

Настройка CCcam.cfg на ресивере

Файл /etc/CCcam.cfg на клиентском ресивере:

C: hostname.example.com 12000 username password
MAXHOP: 2
KEEPALIVE: 1
SHARE REJECTED REASON: 1

Если на сервере OScam, а не CCcam — убедись что в oscam.conf включена секция [cccam] с нужным портом. OScam умеет эмулировать CCcam-сервер.

C-line: формат и параметры

Полный формат C-line с параметрами:

C: hostname 12000 username password { 0 0 2 } {DEEDE0:0,1,2}

Третье поле в фигурных скобках — { hop no-emm reshare }. hop: сколько пересылок допустимо. no-emm: 0 — EMM разрешены, 1 — запрещены. reshare: 2 — разрешить клиенту раздавать дальше до 2 хопов. Второй параметр в фигурных скобках — фильтр по CAID и провайдерам.

NAT, проброс портов на роутере

Если сервер за домашним роутером — нужен port forwarding. Для CCcam-протокола: TCP 12000. Для newcamd: TCP на порт указанный в [newcamd] секции OScam (обычно 15000–15010). Для веб-интерфейса OScam: TCP 8888.

Делается в настройках роутера в разделе «Port forwarding» или «Virtual servers». Перенаправить внешний порт на внутренний IP сервера. Внутренний IP лучше зафиксировать через DHCP-резервацию по MAC-адресу.

Отдельная история — CGNAT. Многие провайдеры сажают клиентов за общий NAT, и никакой port forwarding не поможет — у тебя нет своего внешнего IP. Выход: VPN с выделенным IP, или туннель через VPS (например, через frp или wireguard с VPS в качестве relay).

DDNS для динамического IP

Если IP динамический — нужен DDNS. DuckDNS (бесплатно, без регистрации кредитки), No-IP, Cloudflare с их API — все работают. На роутерах с OpenWrt есть пакет ddns-scripts, который автоматически обновляет запись.

Пример для DuckDNS через cron:

*/5 * * * * curl -s "https://www.duckdns.org/update?domains=myserver&token=ваш-токен&ip=" > /dev/null

В C-line у клиентов тогда пишешь myserver.duckdns.org вместо IP-адреса.

Проверка соединения через oscam webif

Открываешь http://IP_сервера:8888, логинишься. В разделе «Status» видишь все подключённые клиенты. Зелёный статус = клиент подключён и получает CW. Жёлтый = подключён но нет активных запросов. Красный / отсутствует = что-то пошло не так.

В разделе «Readers» видишь состояние ридеров: UP/DOWN, последнее ECM time, количество обработанных запросов. Если ридер DOWN — проверяй oscam.server и физическое подключение картридера.

Типичные проблемы и их диагностика

Большинство проблем с card sharing укладываются в несколько категорий. Разберём каждую с конкретной диагностикой.

Freeze и заикания изображения — причины

Freeze — картинка замерзает на 1–3 секунды, потом продолжается. Причина почти всегда одна: CW не успевает прийти до смены ключа. Ключ меняется каждые 10 секунд, у ресивера есть некоторый запас — но если ECM time постоянно выше 700ms, фризы неизбежны.

Первым делом смотришь ECM time в webif OScam (Status → клиент → ECM time). Если там 800ms, 1200ms, 2000ms — проблема в скорости обработки. Возможные причины: перегруженный сервер, медленная карта, высокая задержка сети между клиентом и сервером.

ECM time >500ms — что делать

Шаги диагностики по порядку:

  1. Пинг до сервера. Если >100ms — проблема в сети, ищи сервер ближе географически
  2. Нагрузка на сервере: top или htop. Если CPU >80% — слишком много клиентов для одной карты
  3. ECM time только на одном канале? Проверь CAID канала и убедись что ридер обрабатывает именно этот CAID
  4. Скорость ридера: некоторые USB-картридеры работают медленнее встроенных. Попробуй другой ридер или снизи количество одновременных клиентов

Channel not subscribed — ошибки подписки

В логе OScam видишь: ECM error: 0x07 или «not found». Это значит карта вернула ошибку — канал не подписан. Три варианта:

Первый: карта действительно не имеет прав на этот канал. Ничего не сделаешь. Второй: права есть, но EMM-обновления не проходят. Проверь в oscam.server что emmcache настроен и параметр auprovid правильный. Третий: временная проблема с картой — подожди несколько часов, иногда провайдеры временно глючат.

Картридер не определяется системой

USB-картридер подключён, но OScam его не видит или выдаёт «Reader is not responding».

Проверка шаг за шагом:

# Определился ли USB-девайс
lsusb

# Что пишет ядро при подключении
dmesg | tail -20

# Какое имя устройства получил
ls -la /dev/ttyUSB*

Частая проблема на Desktop Linux: конфликт с пакетом brltty, который перехватывает устройства. Решение: systemctl disable brltty или добавить udev-правило.

Права на устройство:

# Временно (до перезагрузки)
chmod 666 /dev/ttyUSB0

# Постоянно через udev правило
echo 'SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", MODE="0666"' > /etc/udev/rules.d/99-smartreader.rules
udevadm control --reload-rules

Ещё одна засада — USB autosuspend. Система отключает питание USB-устройства в режиме простоя, и картридер теряет связь. Особенно часто на ноутбуках и мини-ПК. Фикс:

echo -1 > /sys/bus/usb/devices/usb1/power/autosuspend_delay_ms

Или через /etc/default/grub добавить usbcore.autosuspend=-1 в GRUB_CMDLINE_LINUX.

Reader is not responding

Ридер определился, OScam видит устройство, но карта не отвечает. Причины:

  • Неверный boxid — особенно критично для Nagravision. Boxid в oscam.server должен быть в десятичном формате
  • Неверный rsakey или aes_key — для защищённых карт нужны правильные ключи
  • Неверный protocol — для встроенного ридера internal, для Smargo smartreader, для Phoenix-совместимых mouse
  • Карта физически не вставлена до конца или загрязнены контакты

Включи максимальный debug: в oscam.conf поставь debuglevel = 255 и смотри tail -f /var/log/oscam.log. В логе будет видно на каком этапе инициализации происходит ошибка.

Ещё один нюанс: Enigma2-ресивер не видит OScam в режиме DVBAPI. Проверь что в конфиге есть секция [dvbapi] с включённым enabled = 1, и что существует сокет /tmp/camd.socket. Если его нет — OScam не создал его. Проверь права запуска и наличие симлинка.

Отдельный сценарий: несколько карт одного провайдера в одном сервере. OScam поддерживает priority и fallback в oscam.server. Основной ридер обрабатывает запросы, при недоступности переключается на fallback. Настраивается параметрами fallback = 1 на резервном ридере и группировкой через group.

Какой порт по умолчанию использует CCcam?

TCP 12000 — стандартный порт CCcam-протокола. Изменить можно в CCcam.cfg директивой SERVER LISTEN PORT 13000. Если на сервере стоит OScam и эмулирует CCcam — порт задаётся в секции [cccam] файла oscam.conf, параметр port.

Где находятся конфиги OScam?

На обычном Linux: /etc/oscam/ или /usr/local/etc/oscam/. На Enigma2-ресиверах (Vu+, Dreambox, Octagon): /etc/tuxbox/config/oscam/ или /var/etc/oscam/. Основные файлы: oscam.conf, oscam.server, oscam.user, oscam.services, oscam.dvbapi. Путь можно проверить: ps aux | grep oscam — в аргументах будет -c путь.

Что означает ECM time и какое значение нормальное?

ECM time — время от отправки ECM-запроса до получения control word обратно. Норма: 150–500ms. При 500–700ms начинается нестабильность на некоторых каналах. Выше 700ms — гарантированные фризы. Зависит от скорости самой карты, задержки сети между клиентом и сервером, и нагрузки на ридер. Смотреть в webif OScam: Status → конкретный клиент → столбец ECM.

Чем отличается hop 1 от hop 2 в card sharing?

Hop — количество пересылок CW между серверами до клиента. Hop 1: ты подключён напрямую к серверу с физической картой. Hop 2: между тобой и картой есть промежуточный сервер (reshare). Каждый hop добавляет задержку — если у источника ECM time 300ms, после hop 2 это уже минимум 400–600ms. В CCcam.cfg параметр MAXHOP ограничивает максимально допустимую глубину.

Можно ли использовать card sharing без выделенного сервера?

Да. OScam запускается прямо на Enigma2-ресивере (Vu+, Dreambox, Octagon), на роутере с OpenWrt (пакет oscam в Entware), на Synology NAS через Entware, или на Raspberry Pi — там вообще идеально. Минимальные требования: 128MB RAM и либо USB-порт для картридера, либо встроенный CI-слот. Raspberry Pi 3/4 с USB-картридером — отличный вариант для домашнего сервера.

Какие протоколы поддерживает OScam помимо CCcam?

OScam поддерживает: newcamd (порт 15000+), CCcam (12000 по умолчанию), radegast (4444), gbox, camd33, camd35 UDP и TCP, scam. Каждый протокол активируется отдельной секцией в oscam.conf: [newcamd], [cccam], [radegast] и так далее. Можно включить несколько протоколов одновременно. Newcamd считается наиболее стабильным для прямого подключения клиент–сервер.

Practical checklist for smooth viewing

Even the best CCCam or OSCam line needs two or three simple preparations. Update your receiver firmware, reset the ECM cache once a week and keep 15–20% free space on the USB stick or internal flash so that the reader can store keys without delays.

When tuning a dish, aim for MER/BER reserve: a two‑degree offset or a loose F‑connector often causes the “freezing” that users blame on cardsharing. Keep a short patch cord to test alternative routers, and save two profiles in OSCam — one for TCP, one for UDP — so you can switch instantly if your ISP starts filtering a protocol.

Utgard.tv monitors each hub 24/7, but you can speed up diagnostics by keeping a short log of your receiver actions. Note the time when you changed the channel, which CAID was active and whether you used Wi‑Fi or Ethernet. This tiny “journal” helps engineers reproduce your environment in the lab and return with a solution in minutes instead of hours.

  • Keep two line slots enabled: if the first server hits a maintenance window, the second one instantly takes over without re-entering credentials.
  • Run a monthly speed and latency test. Stable 1–2 Mbps with ping <80 ms is enough for SD/HD, but if jitter exceeds 20 ms, switch the router to wired mode.
  • Save the Utgard.tv status page and Telegram bot @utgard_tv_bot to bookmarks — they publish maintenance notices before SEMrush or uptime monitors raise alerts.