Настройка reshare в OScam: полный гайд 2026
Если вы уже подняли OScam, подключили ридеры и начали принимать карты от пиров — следующий шаг это OScam reshare: настройка того, кому, на сколько хопов и какие карты раздавать. Звучит просто, но именно здесь большинство и застревает: карты либо вообще не уходят дальше, либо улетают на все хопы подряд, либо клиент видит карту, но каналы не открываются. Разберём механику по шагам.
Что такое reshare в OScam и как работают hop-уровни
Reshare — это механизм пересдачи принятых карт другим пирам по протоколу CCcam или CS378x. Ваш сервер получает CW (Control Word) через ECM-запрос, а потом может передать эту карту дальше — клиентам или другим серверам в цепочке.
Каждая карта в системе несёт счётчик hop. Локальная физическая карта в ридере (смарткарт через PCSC или встроенный кардридер) — это hop 0. Когда вы принимаете её от соседнего сервера, она приходит с hop 1. Если тот сосед сам принял её ещё от кого-то — hop 2. И так далее.
Логика hop: local, hop1, hop2 и дальше
Когда ваш сервер реширит карту своему клиенту, клиент получает её с hop+1 относительно того, как вы сами её видите. То есть если у вас карта на hop 1 (от пира), то ваш клиент получит её как hop 2. Это имеет прямое значение для параметра cccmaxhops — если клиент ограничен тремя хопами, а карта приходит к нему уже на hop 3, он её просто не примет.
Локальный смарткарт-ридер (PCSC, serial, mouse) и сетевой пир ведут себя по-разному. Физическая карта всегда hop 0, независимо от конфига. Карта от сетевого пира начинается с hop 1 и растёт с каждым звеном.
Чем reshare отличается от прямого доступа к локальной карте
Прямой доступ — клиент напрямую запрашивает ECM у вашего ридера, и тот расшифровывает в реальном времени. Reshare — это передача карты как объекта, чтобы другой сервер мог обрабатывать ECM самостоятельно, не дёргая каждый раз ваш ридер. Разница в нагрузке и в правах: при reshare передаются метаданные карты, а не сами физические байты.
Параметр reshare как глобальный и как локальный override
Это самое важное, что нужно понять. Параметр reshare есть в трёх местах, и они взаимодействуют по принципу "побеждает наиболее ограничивающее значение":
- Глобально в секции
[cccam]файла oscam.conf - На уровне ридера в
[reader]файла oscam.server - На уровне клиента в oscam.user
Если глобально стоит reshare = 2, но конкретный ридер имеет reshare = 0 — этот ридер не реширит никому. Клиент с reshare = 1 не получит карту глубже hop 1, даже если ридер разрешает hop 2. Именно это взаимодействие трёх уровней люди чаще всего не учитывают.
reshare = 0 означает конкретную вещь: карта доступна только самому серверу, дальше не уходит. Часто нужно при приёме карты, которую вы не хотите перераздавать.
Настройка reshare в oscam.server и oscam.user
Для тех, кто только начал OScam reshare: настройка ведётся в трёх конфиг-файлах. Путь к ним зависит от параметра -c при запуске OScam. По умолчанию это /etc/tuxbox/config/, но может быть /etc/oscam/, /usr/local/etc/oscam/ или любая другая директория. Проверить можно через ps aux | grep oscam — там будет видно параметр -c /path/to/config.
Основные файлы: oscam.conf (глобальные настройки), oscam.server (ридеры), oscam.user (клиенты).
Параметр reshare в секции ридера [reader]
В oscam.server для каждого ридера можно задать reshare отдельно. Пример для локального смарткарт-ридера:
[reader]
label = local_card
protocol = pcsc
device = /dev/pcsc/1
caid = 0500
reshare = 2
group = 1,2
Здесь reshare = 2 означает, что карту можно раздавать на глубину до 2 хопов. Для принятого от пира ридера обычно ставят меньше:
[reader]
label = peer_server
protocol = cccam
device = peer.example.com
port = 12000
user = mylogin
password = mypass
reshare = 1
cccmaxhops = 2
group = 3
reshare = 1 здесь ограничивает: карты от этого пира уйдут вашим клиентам, но те уже не смогут реширить их дальше.
Параметр reshare в секции клиента в oscam.user
В oscam.user reshare контролирует, насколько глубоко конкретный клиент может раздавать карты, которые он от вас получил:
[account]
user = client01
pwd = password123
reshare = 1
group = 1,3
cccmaxhops = 2
Если этот клиент — другой сервер OScam, у него reshare = 1 позволяет ему раздать карту своим клиентам, но те уже не смогут идти глубже. Если вы хотите, чтобы клиент вообще не реширил — ставьте reshare = 0.
cccmaxhops и cccreshare в глобальной секции [cccam]
В oscam.conf секция [cccam] задаёт глобальные дефолты:
[cccam]
port = 12000
reshare = 1
reshare_mode = 0
minimizecards = 0
updateinterval = 240
cccmaxhops = 10
reshare_mode — это отдельный параметр, который часто путают с reshare. Это не одно и то же:
- reshare_mode = 0 — реширятся только карты физических ридеров (hop 0). Карты от пиров не раздаются. Самый жёсткий и безопасный режим.
- reshare_mode = 1 — реширятся и физические карты, и полученные от пиров. Стандартный режим для цепочек.
- reshare_mode = 2 — раздача определяется уровнем самой карты. Экзотика, используется редко.
Если у вас только физические карты и вы не хотите транзитить чужие — reshare_mode = 0 это правильный выбор.
Пример рабочей конфигурации с пояснением каждой строки
Вот конфиг для сервера с одной локальной картой и двумя клиентами — один доверенный (реширит дальше), второй нет:
oscam.conf:
[cccam]
port = 12000
reshare = 2
reshare_mode = 1
cccmaxhops = 5
oscam.server:
[reader]
label = smartcard_local
protocol = pcsc
device = /dev/pcsc/1
caid = 0500
reshare = 2
group = 1
oscam.user:
[account]
user = trusted_peer
pwd = secretpass
reshare = 2
group = 1
cccmaxhops = 5
[account]
user = end_client
pwd = clientpass
reshare = 0
group = 1
cccmaxhops = 3
trusted_peer получает карту и может реширить её своим клиентам (reshare = 2). end_client карту видит и декодирует, но дальше не раздаёт (reshare = 0). Ридер допускает глубину 2, глобально допускается 2 — итоговый лимит для trusted_peer именно 2.
Контроль глубины раздачи и фильтрация карт
Просто выставить reshare недостаточно. Без нормальной фильтрации карты могут уходить куда не надо, порождать дубликаты и создавать петли ECM.
cccmaxhops: ограничение принимаемой глубины
cccmaxhops задаёт максимальный hop карты, которую ваш сервер вообще будет принимать от пира. Стоит cccmaxhops = 3 — карты на hop 4 и выше ваш сервер проигнорирует. Параметр есть и в глобальной секции [cccam], и на уровне конкретного ридера-пира.
Это важно не только для качества сигнала, но и для защиты от мусора. Карты с hop 8-10 обычно имеют высокий ECM time и скорее всего уже не рабочие по цепочке.
Связка reshare + maxhops для защиты от лупов
Кольцевое соединение — классическая проблема. Сервер A реширит карту серверу B, сервер B реширит её обратно серверу A. Возникает луп: карта гуляет по кругу, ECM-запросы множатся, время декодирования растёт.
Правильная защита: cccmaxhops на уровне, где петля невозможна физически. Если A отдаёт B карту с hop 1, и B её реширит обратно как hop 2, то при cccmaxhops = 1 на сервере A он эту карту на hop 2 уже не примет. Луп разорван.
Дополнительно: не стройте кольцевые линки вообще, если этого не требует архитектура. Два сервера, каждый из которых реширит другому — это всегда риск лупа.
Ident-фильтры: раздача только нужных caid:provid
Параметр ident в секции ридера позволяет реширить только конкретные пакеты. Формат: caid:providerid, несколько через запятую:
[reader]
label = peer_filtered
protocol = cccam
device = peer.example.com
port = 12000
user = login
password = pass
ident = 0500:032830,041700
reshare = 1
group = 2
Так этот ридер будет реширить только карты CAID 0500 с провайдерами 032830 и 041700. Все остальные карты, которые он принимает, до ваших клиентов не дойдут. Очень удобно, когда пир отдаёт пачку карт, но нужны только конкретные пакеты.
group в oscam.server и oscam.user для разграничения доступа
Группы — это числа от 1 до 64. Клиент видит ридер только при совпадении хотя бы одной группы. Ридер в group = 1,2 и клиент в group = 2 — видят друг друга. Ридер в group = 3 и клиент в group = 1 — нет.
Это мощный инструмент изоляции. Можно сделать группу для доверенных пиров (group = 5), группу для обычных клиентов (group = 1), и локальные карты выдавать только группе 5. Обычные клиенты их просто не увидят, даже если reshare разрешает.
Частая ошибка: reshare выставлен правильно, но group не совпадает — карта не видна клиенту. Всегда проверяйте group одновременно с reshare.
Проверка reshare через веб-интерфейс и логи
Конфиг написан — теперь нужно убедиться, что всё работает. Без мониторинга это гадание на кофейной гуще.
WebIf: вкладки Status, Readers, Entitlements
WebIf включается в oscam.conf:
[webif]
httpport = 8888
httpdyndns = 0
httprefresh = 10
После рестарта OScam открывайте http://your-server:8888. Во вкладке Status видны все подключённые клиенты и пиры в реальном времени. Во вкладке Readers — состояние каждого ридера, количество карт и последнее время декодирования. Вкладка Entitlements показывает, какие карты реально доступны через каждый ридер — это важно при диагностике "карта есть, декода нет".
Колонка hop и share count в списке карт
В Readers и Entitlements рядом с каждой картой видны hop и количество шар (share count). Если вы отдали карту пиру и он подключён — в его статусе карта должна появиться с hop на единицу больше вашего. Видите hop 2 у клиента при вашем hop 1 — reshare работает корректно.
Share count показывает, сколько пиров видят эту карту. Если карта есть, но share count = 0 — никто не принял. Проверяйте group и reshare.
Чтение oscam.log: ECM time, found/not found, decode
Основной инструмент диагностики — oscam.log. Нормальная строка декодирования выглядит так:
2026/01/15 14:23:01 c (client01) ECM caid 0500 from peer_server: found (45 ms)
45 ms — хорошее время. Если видите 800 ms и выше — что-то не так: лишние хопы, медленный ридер или загруженный пир. Строка not found означает, что ридер не смог расшифровать ECM. cache — ответ пришёл из кэша, не из ридера.
Если reshare не работает, в логе клиента не будет строк ECM от вашего сервера вообще. Это уже указывает на проблему соединения или group/reshare конфига.
Команда oscam -b -r 2 и уровни дебага
Для глубокой диагностики запустите OScam с повышенным уровнем логирования:
oscam -b -c /etc/oscam -r 2
Флаг -r 2 включает расширенный лог ридеров. В WebIf уровень дебага можно поднять до 4 (CW-данные) или 8 (клиентские запросы) через Settings → Debug. Но на продакшне не держите debug 8 постоянно — лог разрастается быстро.
Типичные проблемы reshare и их решение
Практика OScam reshare: настройка часто ломается в предсказуемых местах. Вот системный разбор.
Карты не реширятся: reshare=0 или несовпадение group
Порядок диагностики: сначала oscam.log (есть ли вообще соединение с пиром?), потом WebIf Status (пир подключён?), потом Entitlements (карта видна?), потом конфиг (group совпадает? reshare не 0?). Именно в таком порядке, а не наоборот.
Конкретные проверки:
- reshare в секции
[cccam]oscam.conf — не равно 0? - reshare у конкретного ридера в oscam.server — не перекрывает глобальный?
- reshare в oscam.user для этого клиента — разрешено?
- group у ридера и у клиента — пересекается хотя бы одна цифра?
- reshare_mode = 1 если реширяете карты от пиров, а не только локальные?
Дубликаты карт и лупы при кольцевых соединениях
Симптом: одна и та же карта появляется дважды в Entitlements, ECM time нестабильно, иногда скачет до 2-3 секунд. Причина — кольцо: A → B → A.
Решение: cccmaxhops = 1 на обоих серверах если хопы не нужны, или явно ограничить на уровне ридера. Ещё вариант — параметр blockCaIdent чтобы заблокировать конкретный CAID от конкретного пира, которому вы уже его отдали.
Высокое ECM time и таймауты на дальних хопах
ECM time растёт с каждым хопом: каждое звено добавляет задержку сети плюс время обработки. Hop 1 с пингом 20 ms — ожидаемо 60-100 ms. Hop 4 через медленных пиров — легко 500+ ms.
Что делать: снизить cccmaxhops (не принимать карты глубже hop 2-3), включить OScam cache (секция [cache] в oscam.conf, usecache = 1 в ридере), убедиться что пинг до пира адекватный.
Пир видит карту, но декодирования нет (no entitlements)
Самая противная проблема. Карта в WebIf пира есть, hop правильный, но каналы не открываются. Три частых причины:
Первая — реширяется карта-заглушка без реальных прав. Бывает когда ридер сообщает о карте, но подписка истекла. Проверьте Entitlements у себя: есть ли реальные права (valid period)?
Вторая — карта пришла к пиру на максимальном hop, но рабочего источника уже нет. Пир видит метаданные карты, но ECM-запрос уходит в никуда по цепочке без рабочего ридера на конце.
Третья — неверный ident или CAID. Пир принимает карту как CAID 0100, а канал шифрован как CAID 0500. Такое бывает при неправильных параметрах ident в oscam.server. Смотрите oscam.log на стороне клиента: там будет "not found" или "wrong caid".
Что означает reshare = 0 в OScam?
Карта доступна только самому серверу — декодирует она, дальше по цепочке не уходит. Используется когда хотите принимать карту для себя, не делясь с пирами. Если выставить reshare = 0 в oscam.user у клиента — он видит карту и декодирует, но его клиенты (если он тоже сервер) её не получат.
Чем отличается reshare в oscam.server от reshare в oscam.user?
В oscam.server параметр ограничивает раздачу конкретного ридера — сколько хопов карта с этого ридера вообще может уйти. В oscam.user — сколько хопов разрешено конкретному клиенту при получении. Итоговое ограничение — наиболее строгое из двух. Например, ридер разрешает reshare = 3, но клиент ограничен reshare = 1 — дальше hop 1 карта не уйдёт.
Как ограничить глубину раздачи карт?
Через cccmaxhops в секции [cccam] (глобально) и на уровне конкретного ридера-пира в oscam.server. Плюс параметр reshare на всех трёх уровнях. Связка cccmaxhops + reshare не даёт картам уходить дальше заданного hop и предотвращает лупы при кольцевых соединениях.
Почему пир видит карту, но каналы не открываются?
Чаще всего реширяется карта без реальных прав (подписка истекла или ридер отдаёт заглушку). Ещё вариант — карта на максимальном hop без рабочего источника в конце цепочки. Третья причина — неверный ident или CAID. Диагностика: Entitlements в WebIf (есть ли реальные права?) + oscam.log на стороне пира (статус ECM-запросов).
Что такое reshare_mode и какое значение выбрать?
reshare_mode определяет, какие карты вообще участвуют в раздаче. 0 — только физические карты ваших ридеров (hop 0). 1 — физические плюс принятые от пиров. 2 — режим уровня карты, экзотика. Для контролируемой раздачи с минимальным риском лупов — reshare_mode = 0, если у вас есть локальные карты. Если вы транзитный сервер без физических ридеров — нужен режим 1.
Как проверить, что reshare реально работает?
В WebIf (порт 8888 по умолчанию) вкладка Status — пир должен быть активен. В его списке Entitlements карта должна показываться с hop+1 относительно вашего. В oscam.log на стороне пира — ECM-запросы со статусом "found" и адекватным временем (до 200-300 ms для нормальной цепочки). Если всё это есть — OScam reshare: настройка выполнена корректно.