GBox ECM Timeout: причины и решение в OScam 2026
Если у вас в логе OScam мелькает строка с ECM timeout, а каналы открываются через раз или вовсе замирают — это не случайный сбой, а симптом конкретной проблемы в цепочке от ресивера до карты. Статья про gbox: ECM timeout решение именно в таком контексте: система уже запущена, пиры онлайн, но что-то в декодировании идёт не так. Разберём всё по порядку — от чтения лога до тонкой настройки loadbalancer.
Что означает ECM timeout в логе GBox и где его искать
ECM timeout — это превышение времени ожидания ответа на ECM-запрос. OScam отправляет ECM (Entitlement Control Message) ридеру или пиру, и если ответ не приходит в течение заданного времени (по умолчанию 5000 мс, параметр clienttimeout в oscam.conf), запись в лог идёт как timeout.
Основной лог лежит по пути /var/log/oscam.log или в каталоге, заданном параметром logfile в секции [global]. Веб-интерфейс OScam доступен по адресу http://IP:8888/ (порт задаётся параметром httpport в секции [webif]). Там же в разделе ECM History видно время ответа в миллисекундах, hop и слот карты.
Для GBox в /usr/local/etc/oscam.conf есть отдельная секция [gbox], где можно задать уровень собственного лога через параметр logfile внутри секции. Отдельный файл gbox.log пишется при наличии соответствующей директивы сборки.
Как читать строку ECM в логе OScam
Типичная строка выглядит так:
2026/03/15 14:22:31 c [gbox] ECM 0963/000000/01 from user1 — timeout (4987 ms, hop 2, slot 3)
Здесь 0963 — CAID, 000000 — провайдер ID, 01 — сервисный ID. Время 4987 мс говорит, что ответ почти пришёл, но не уложился. Hop 2 значит, что запрос прошёл через два узла — уже на грани.
Разница между timeout, no card и rejected
Timeout — карта или пир есть, маршрут построен, но ответ не пришёл вовремя. Лечится таймаутами, сетью, hop-ограничением.
No card — ни один ридер не имеет нужного CAID/ProvID. OScam даже не ждёт, сразу пишет отказ. Здесь нужна другая карта или правка ident в oscam.server.
Rejected / ECM dropped — запрос отфильтрован по правилам услуг, services, class или настройкам пира. Причина не в скорости, а в логике маршрутизации.
Включение детального лога: debug level и cs_loglevel
В секции [global] файла oscam.conf поставьте:
logfile = /var/log/oscam.log
maxlogsize = 512
cs_loglevel = 255
Значение 255 — это побитовая маска, включающая все уровни, включая отладку ECM и loadbalancer. После диагностики лучше снизить до 4 или 12, иначе лог забивается моментально. debug = 1 в той же секции добавляет ещё больше деталей по GBox-пирам.
Главные причины ECM timeout в кардшаринге через GBox
GBox работает поверх UDP, а UDP — это «выстрелил и забыл». Нет гарантии доставки, нет автоматической ретрансмиссии. Даже 2–3% потерь пакетов дают ощутимый процент timeout на ECM-ответах, особенно если сеть и без того нестабильна.
Большое количество hop и медленные пиры
Каждый hop — это ещё один узел в цепочке, ещё одна задержка. Hop 1 — прямая карта, ответ обычно приходит за 100–400 мс. Hop 2 — уже 400–900 мс. При hop 3 и выше ответ легко выходит за 1500 мс, и при clienttimeout = 3000 любой сетевой чих даёт timeout.
Параметр maxdist в секции [gbox] ограничивает, с какого расстояния OScam принимает карты от GBox-пиров. Значение maxdist = 2 отсекает решары третьего уровня и дальше. В CCcam-совместимом режиме аналогичная роль у cccmaxhops.
Перегрузка карты: лимит ECM в секунду
Один смарткарт-ридер физически обрабатывает ограниченное число ECM-запросов в секунду — обычно 4–8, в зависимости от карты и ридера. При нескольких клиентах, смотрящих разные каналы, запросы выстраиваются в очередь. ECM, дождавшийся своей очереди слишком поздно, отправляется, но ответ уже просрочен.
Это особенно заметно на HD-каналах с коротким ECM-интервалом (некоторые провайдеры меняют ключ каждые 10 секунд) и при ECM-burst — массовой смене ключей по расписанию. В этот момент пик нагрузки на карту может дать сразу несколько timeout подряд, даже если в обычное время всё работает нормально.
Сетевые потери и нестабильный UDP-канал GBox
Высокий пинг сам по себе не критичен — 80–100 мс вполне жизнеспособно. Критичны потери (packet loss). При 5% потерь каждый двадцатый ECM-запрос или ответ теряется, а OScam ждёт до таймаута. Проверить просто: ping -c 100 IP_пира и смотреть на packet loss.
Фрагментация UDP — отдельная история. Если MTU на пути к пиру меньше, чем GBox ожидает, пакеты фрагментируются, и часть фрагментов теряется. Лечится снижением MTU на интерфейсе: ip link set eth0 mtu 1400.
Несовпадение caid/provid и неправильные маршруты
OScam может отправить ECM-запрос пиру, у которого нужного provid нет. Пир молчит, OScam ждёт до clienttimeout, потом пробует следующий ридер — или сдаётся. Итог: timeout, хотя на самом деле это маршрутинг, а не скорость.
После того как провайдер меняет ProvID (это случается при обновлении условного доступа), старый ident в oscam.server начинает слать запросы в никуда. OScam честно ждёт до таймаута. Обновить ident в oscam.server — первое, что нужно проверить при внезапно появившихся таймаутах после работавшей конфигурации.
Настройка таймаутов и маршрутов в oscam.server и oscam.conf
Вот где происходит большая часть тонкой настройки. Файлы лежат в /usr/local/etc/ или /etc/oscam/ в зависимости от сборки. Пути проверяются командой oscam --help | grep config.
Параметр clienttimeout и его адекватные значения
В секции [global] файла oscam.conf:
[global]
clienttimeout = 3000
fallbacktimeout = 2500
clientmaxidle = 120
clienttimeout — максимальное время ожидания ECM-ответа от любого ридера. fallbacktimeout — время, после которого OScam начинает параллельно слать запрос на следующий ридер (фолбэк), не дожидаясь первого.
Ставить clienttimeout = 8000 «на всякий случай» — плохая идея. При зеппинге ресивер ждёт ответа перед показом канала, и 8 секунд ожидания превращают смену канала в пытку. Рабочий диапазон — 2500–4000 мс. Подбирать под реальный ECM time из лога: если типичный ответ 600 мс, достаточно 2500 мс с запасом.
Секция [gbox]: maxdist, ignored caid, port
В oscam.conf:
[gbox]
port = 19000
maxdist = 2
ignorelist = /usr/local/etc/oscam.ignore
nodeid = AABBCCDD
maxdist = 2 — принимаем карты только до hop 2 включительно. port = 19000 — стандартный порт GBox, убедитесь, что он открыт на firewall (UDP). nodeid — уникальный идентификатор ноды, должен быть уникальным в сети пиров.
Если нужно игнорировать определённые CAID из GBox-сети (например, те, что у вас есть локально), используйте файл ignorelist — туда вносят CAID в hex-формате построчно.
Приоритеты карт через oscam.services и caidtab
Локальная карта должна иметь приоритет над сетевыми пирами. В oscam.server для локального ридера:
[reader]
label = local_card
protocol = mouse
device = /dev/ttyUSB0
caid = 0963
ident = 0963:000000
group = 1
services = local_services
Файл /usr/local/etc/oscam.services задаёт именованные группы сервисов. Параметр services = в ридере и у клиента позволяет направить конкретные каналы на конкретный ридер, не полагаясь на автоматику loadbalancer. Локальный ридер ставьте в group = 1, сетевых пиров — в group = 2 или выше.
Ограничение hop: cccmaxhops и reshare
Для CCcam-совместимого режима в /etc/CCcam.cfg:
CCCAM RESHARE = 1
CCCAM MAXHOPS = 2
В OScam параметр cccmaxhops задаётся в секции ридера типа cccam. reshare = 0 в описании клиента запрещает клиенту реширить полученные карты дальше — снижает нагрузку на карту и уменьшает вероятность перегрузки.
Пошаговая диагностика: от ресивера до карты
Хаотичная диагностика "поменял одно, поменял другое" только запутывает. Вот последовательность, которая работает.
Шаг 1: проверка статуса пиров в веб-интерфейсе
Открываем http://IP:8888/, вкладка Status. Смотрим на GBox-пиров: статус должен быть online, и рядом должно быть ненулевое число карт (Cards). Если пир онлайн, но Cards = 0 — у него нет нужного CAID или он ничего не реширит.
Запомните: online — это только наличие UDP-соединения на уровне хэндшейка. Карты при этом могут не соответствовать тому, что вам нужно. Это один из самых частых источников путаницы при поиске gbox: ECM timeout решение.
Шаг 2: тест времени ответа ECM по конкретному каналу
Переключитесь на проблемный канал и в веб-интерфейсе смотрите раздел ECM History. Ищите строки с нужным CAID. Время ответа до 600 мс — хорошо. 600–1500 мс — терпимо, но риск при нагрузке. Выше 1500 мс — проблема, timeout неизбежен при малейшей нестабильности.
Особо обратите внимание на HD-каналы. У некоторых провайдеров интервал смены ключа на HD составляет 8–10 секунд, и при медленном ответе карта успевает ответить только со второй-третьей попытки — картинка замерзает на секунду.
Шаг 3: проверка сети — ping, потери пакетов, MTU
Базовая проверка:
ping -c 200 -i 0.2 IP_пира
Смотрим на packet loss. Больше 1% — уже повод насторожиться. Больше 3% — явная проблема. Для проверки MTU:
ping -M do -s 1400 IP_пира
Если пакет 1400 байт не проходит без фрагментации — снижаем MTU на интерфейсе. Для GBox через VPN особенно актуально, там overhead от туннеля съедает 20–40 байт.
Шаг 4: изоляция проблемного ридера через group
В oscam.server каждый ридер имеет параметр group. Временно меняем group подозрительного пира на значение, которое не входит в group ни одного клиента — и он выпадает из ротации. Если timeout исчезают — источник найден.
[reader]
label = gbox_peer1
protocol = gbox
device = 192.168.1.10,19000
group = 99
# временно отключён из группы клиентов
После изоляции проверяем параметры lb_log_only = 1 и saveinit = 1 в секции [global] — это позволяет видеть, как loadbalancer принимает решения, без реального влияния на маршрутизацию.
Балансировка нагрузки (loadbalancer) против ECM timeout
Loadbalancer в OScam — это механизм, который запоминает, какой ридер отвечает быстрее всего для данного CAID/ProvID/ServiceID, и в следующий раз отправляет запрос сразу туда. Звучит хорошо, но с накопленной плохой статистикой превращается в проблему.
Режимы lb_mode и какой выбрать против таймаутов
В секции [global]:
lb_mode = 1
lb_save = 100
lb_retrylimit = 800
lb_reopen_seconds = 900
lb_nbest_readers = 2
lb_nfb_readers = 1
lb_mode = 1 — режим "fastest reader", OScam всегда выбирает ридер с лучшей исторической статистикой для данного запроса. lb_mode = 0 — без балансировки, запросы идут по порядку. Для борьбы с timeout предпочтителен режим 1.
lb_nbest_readers = 2 — держать в активной ротации двух лучших ридеров для каждого сервиса. При падении первого второй уже разогрет.
lb_retrylimit, lb_reopen_seconds, lb_nbest_readers
lb_retrylimit = 800 — если ответ от ридера превышает 800 мс, OScam не ждёт полного clienttimeout, а параллельно пробует следующий ридер. Это ключевой параметр против таймаутов: он срабатывает раньше, чем ECM успевает просрочиться.
lb_reopen_seconds = 900 — через 900 секунд OScam снова пробует ридеры, которые раньше давали плохую статистику. Это страховка на случай, если пир восстановился.
Очистка и пересборка статистики loadbalancer
Stat-файл лежит в директории, заданной параметром tmpdir в oscam.conf (обычно /tmp/oscam). Файл называется stat или oscam.stat. Если после смены пиров или изменения конфига timeout вернулись — сначала удалите этот файл и перезапустите OScam:
service oscam stop
rm /tmp/oscam/stat
service oscam start
Первые несколько минут после очистки OScam работает вслепую, накапливая новую статистику — в это время возможны замедления. Потом выравнивается. Если проблема возвращается через несколько часов — значит, loadbalancer снова накапливает плохую статистику по одному из ридеров и перестаёт его обходить. Ищите ридер с хронически высоким временем ответа и либо чините его, либо удаляйте из конфига.
На что смотреть при выборе источника карт (без привязки к конкретным сервисам)
Хороший источник карт — половина решения. Никакая настройка OScam не вытащит стабильный декодинг из медленного или перегруженного пира. Вот на что реально смотреть.
Стабильность пинга и аптайма пира
Пинг до пира должен быть стабильным и предсказуемым. Не обязательно низким — 60–80 мс приемлемо, если без джиттера. Плохой вариант: пинг 20 мс, но с размахом 5–200 мс и 2% потерь. Хороший: 70 мс с отклонением ±5 мс и нулевыми потерями.
Аптайм пира важен не меньше. Пир, который перезапускается раз в несколько часов, каждый раз роняет статистику loadbalancer и провоцирует временные таймауты. Смотрите на uptime в веб-интерфейсе OScam в колонке Connected.
Заявленный hop и реальная дистанция
Пир может показывать в интерфейсе много карт с hop 1, но реально реширить чужое с hop 2–3 и высокой латентностью. Как это проверить: сравните ECM time с тем, что вы ожидаете от hop 1 (обычно до 400 мс). Если ECM time 1200 мс при "hop 1" — это явно решара с маскировкой hop.
Чек-лист по дистанции:
- ECM time в норме для заявленного hop (до 400 мс для hop 1, до 900 мс для hop 2)
- Время ответа стабильно, без всплесков в часы пик
- Пир географически близок к вам — это снижает базовую задержку
Поддержка нужных caid/provid и локальность карты
Перед подключением пира убедитесь, что у него есть именно нужный CAID и ProvID. В веб-интерфейсе OScam в разделе Reader смотрите на список CAID/ProvID для каждого ридера.
Локальная карта (физическая, в ридере на вашем сервере) всегда лучше любой сетевой. Если есть возможность использовать собственный ридер хотя бы для части каналов — настройте приоритет через oscam.services и группы, как описано выше. gbox: ECM timeout решение часто сводится именно к тому, чтобы как можно больше запросов закрывалось локально, а не уходило в сеть.
Какое значение clienttimeout ставить в OScam, чтобы убрать ECM timeout?
Оптимальный диапазон — 2500–4000 мс. Смотрите на реальный ECM time в логе: если типичный ответ 500–700 мс, значение 2500 мс даёт достаточный запас. Большой clienttimeout (6000–8000 мс) маскирует проблему и замедляет переключение каналов — ресивер ждёт ответа перед показом. Малый (менее 1500 мс) будет резать ответы медленных, но рабочих пиров. Подбирайте по данным из лога, а не наугад.
Почему GBox-пир online, но всё равно ECM timeout?
Online означает только наличие UDP-соединения на уровне протокола GBox. Timeout возникает по другим причинам: высокий hop (карта далеко в цепочке), отсутствие нужного ProvID у пира (запрос уходит туда, где нет карты), перегрузка смарткарт-ридера на стороне пира, или потери UDP-пакетов. Проверяйте ECM time по конкретному каналу в веб-интерфейсе и маршруты в oscam.server — не ограничивайтесь проверкой статуса пира.
Как ограничить hop, чтобы запросы не уходили на дальних пиров?
В секции [gbox] файла oscam.conf параметр maxdist = 2 ограничивает приём карт до hop 2 включительно. В CCcam-совместимом режиме используйте cccmaxhops = 2 в oscam.server для ридера типа cccam. Это отсекает длинные цепочки решары, которые чаще всего дают timeout из-за накопленной задержки на каждом узле.
Влияет ли loadbalancer на ECM timeout?
Да, и существенно. lb_mode = 1 направляет запросы на исторически самый быстрый ридер. lb_retrylimit = 800 заставляет OScam пробовать другой ридер, если первый отвечает дольше 800 мс, — не дожидаясь полного clienttimeout. Если loadbalancer накопил плохую статистику (например, после восстановления медленного пира), удалите файл stat в каталоге tmpdir и перезапустите OScam — это сбросит историю и заставит балансировщик переоценить ридеры заново.
Как отличить ECM timeout от no card в логе OScam?
Timeout в логе содержит время ожидания в миллисекундах и обычно выглядит как timeout (4987 ms) — карта или пир нашлись, но не ответили вовремя. No card выглядит как no card без времени ожидания — OScam не нашёл ни одного ридера с нужным CAID/ProvID. Решения разные: timeout лечится настройкой таймаутов, hop и сети; no card — добавлением нужной карты или правкой ident в oscam.server под актуальный ProvID.
Может ли MTU или UDP-потери быть причиной таймаутов в GBox?
Да. GBox работает исключительно по UDP без гарантии доставки, поэтому потери пакетов напрямую конвертируются в потери ECM-ответов. Проверьте: ping -c 200 IP_пира — смотрите на packet loss. При использовании VPN или туннелей снизьте MTU до 1400 или меньше и проверьте командой ping -M do -s 1400 IP_пира. Фрагментация UDP — одна из самых недооценённых причин gbox: ECM timeout решение в конфигурациях с VPN или нестандартными сетевыми настройками.