Card Sharing сервер: настройка CCcam и OScam с нуля
Поднять собственный card sharing сервер — задача вполне посильная, если понимать что происходит под капотом. Я разберу весь путь: от выбора софта до конфигов и диагностики. Без воды, только то что реально нужно.
Большинство гайдов в интернете копипастят конфиги не объясняя параметры. Здесь будет иначе — разберём каждый ключевой параметр, потому что иначе при первой же проблеме будешь гадать вслепую.
Что такое card sharing сервер и как он работает
Логика простая. Ресивер клиента шлёт зашифрованный ECM (Entitlement Control Message) на card sharing сервер. Сервер передаёт этот запрос физическому ридеру со смарт-картой, получает обратно control word (CW) — 8-байтный ключ для расшифровки — и возвращает его клиенту. Клиент расшифровывает видеопоток. Всё это должно происходить быстрее чем раз в 10 секунд, иначе картинка замёрзнет.
Архитектура: сервер, клиент, DVB-карта
На стороне сервера: Linux-машина (или ресивер) с DVB-картой или USB-картридером, демон OScam/CCcam, физическая смарт-карта в ридере. На стороне клиента: ресивер с Enigma2 или другой поддерживаемой платформой, демон OScam/CCcam в режиме клиента, соединение по TCP до сервера.
DVB-карта нужна только если сервер сам принимает сигнал и читает карту локально. Если сервер только проксирует C-линии от вышестоящего провайдера — DVB-карта не нужна вообще.
Роль ECM и EMM в обмене ключами
ECM (Entitlement Control Message) содержит зашифрованный control word. Его расшифровывает смарт-карта с помощью ключей провайдера. EMM (Entitlement Management Message) обновляет права на карте — например активирует новые каналы или продлевает подписку. EMM сервер обрабатывает автоматически, клиенту это не видно.
Протоколы CCcam, Newcamd, CS378x — отличия
CCcam — бинарный протокол, порт по умолчанию 12000. Закрытый, но широко поддерживается. Newcamd — старый, порт 10000-10010, до сих пор встречается в устройствах на базе старого firmware. CS378x (он же camd35) — более эффективный протокол, используется в OScam, порт 10000 по умолчанию. Именно CS378x рекомендую для новых установок — меньше накладных расходов и лучше работает с нагрузкой.
Почему задержка ECM критична для стабильной картинки
Норма ECM time — 50-300ms. При 300-500ms начинаются заметные микрофризы. Выше 500ms — каналы регулярно замерзают на секунду-две. Смена control word происходит каждые 10 секунд, и новый CW должен прийти до того как текущий истёк. Если сервер не успевает — получаешь классическую «заморозку каждые 10 секунд».
Выбор софта: CCcam vs OScam vs Mgcamd
Здесь нет универсального ответа, но есть чёткая логика выбора.
CCcam — простота и стабильность, но закрытый код
CCcam — закрытый бинарник, последняя публичная версия 2.3.0. Конфиг один — /etc/CCcam.cfg, простой синтаксис. Работает из коробки. Минусы: нет webif нормального, отладка затруднена, разработка фактически заморожена. Хорош если нужно быстро поднять простое проксирование C-линий без лишней возни.
OScam — гибкость, активная разработка, форк OScam-Emu
OScam — open source, поддерживает CCcam, Newcamd, CS378x, gbox и ещё несколько протоколов. Имеет webif на порту 8888 (или 988 в некоторых сборках), dvbapi для прямой интеграции с Enigma2, детальные логи. OScam-Emu — форк с поддержкой дополнительных карт и softcam-ключей. Для большинства задач в 2026 году — выбор очевиден: OScam.
Mgcamd — лёгкий клиент, не сервер
Mgcamd — это клиент, не сервер. Путаница в этом месте встречается постоянно. Он подключается к CCcam/OScam серверу и передаёт CW декодеру. Запускать Mgcamd на машине которую планируешь использовать как сервер — не имеет смысла.
Какой выбрать под Enigma2, под Linux x86, под роутер
| Платформа | Рекомендация |
|---|---|
| Enigma2 (Dreambox, Vu+, Zgemma) | OScam через ipk-пакет + dvbapi |
| Linux x86/x64 (VPS, мини-PC) | OScam из исходников (svn trunk) |
| OpenWrt роутер (64+ MB RAM) | OScam из opkg, 1-3 клиента max |
| Только проксирование C-линий | CCcam 2.3.0 — проще в настройке |
| Сложная схема с несколькими картами | OScam с lb_mode для балансировки |
Установка OScam на Linux: пошагово
Работаем на Debian/Ubuntu x86_64. Нужны: subversion, build-essential, libssl-dev, libpcsclite-dev.
apt-get install subversion build-essential libssl-dev libpcsclite-dev
Сборка из исходников через svn и simplebuild
svn co https://www.streamboard.tv/svn/oscam/trunk oscam-svn
cd oscam-svn
./config.sh --enable all
make
После сборки бинарь лежит в Distribution/. Копируем:
cp Distribution/oscam-svn* /usr/local/bin/oscam
chmod 755 /usr/local/bin/oscam
Если svn-репозиторий недоступен — есть simplebuild.sh скрипт который автоматически подбирает оптимальные флаги компиляции под текущую систему. Ищи его в корне репозитория.
Создание systemd-юнита /etc/systemd/system/oscam.service
[Unit]
Description=OScam cardserver
After=network.target
[Service]
Type=simple
User=oscam
ExecStart=/usr/local/bin/oscam -b -c /usr/local/etc
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
Создаём пользователя и запускаем:
useradd -r -s /bin/false oscam
systemctl daemon-reload
systemctl enable --now oscam
Никогда не запускай oscam от root в продакшне. Это не паранойя — это базовая гигиена.
Структура директории /usr/local/etc/
OScam ожидает конфиги в директории указанной через -c. Минимальный набор файлов:
/usr/local/etc/oscam.conf— глобальные параметры/usr/local/etc/oscam.server— описание ридеров/usr/local/etc/oscam.user— учётные записи клиентов/usr/local/etc/oscam.dvbapi— маппинг для Enigma2 (опционально)/usr/local/etc/oscam.services— группировка каналов (опционально)
Права доступа на конфиги (chmod 600)
chown -R oscam:oscam /usr/local/etc/
chmod 600 /usr/local/etc/oscam.*
oscam.user содержит пароли клиентов — 600 обязательно. oscam.server содержит данные ридеров — то же самое.
Конфигурационные файлы: oscam.conf, oscam.server, oscam.user
oscam.conf — глобальные параметры и webif
[global]
logfile = /var/log/oscam/oscam.log
maxlogsize = 512
logduplicatelines = 0
cachedelay = 0
preferlocalcards = 1
lb_mode = 1
lb_nbest_readers = 2
[webif]
httpport = 8888
httpuser = admin
httppwd = СЮДА_СИЛЬНЫЙ_ПАРОЛЬ
httpallowed = 127.0.0.1,192.168.0.0/16
httprefresh = 10
Параметр lb_mode=1 включает load balancing между ридерами — OScam сам выбирает самый быстрый ридер для каждого запроса. Без этого при нескольких ридерах получишь непредсказуемое поведение. preferlocalcards=1 отдаёт приоритет локальным картам перед C-линиями — логично если у тебя есть физическая карта.
oscam.server — описание ридеров и протоколов
[reader]
label = local_card
protocol = internal
device = /dev/dvb/adapter0/ca0
caid = 0D00
ident = 0D00:AABBCC
group = 1
mhz = 357
cardmhz = 357
inactivitytimeout = 30
[reader]
label = cline_provider
protocol = cccam
device = cline.example.com,12000
user = myuser
password = mypass
caid = 0D00,0919
group = 1
reconnecttimeout = 15
inactivitytimeout = 60
inactivitytimeout — сколько секунд ждать перед тем как считать ридер неактивным и переподключаться. Для локальных карт можно ставить 30, для C-линий — 60. Слишком маленькое значение = постоянные реконнекты и нестабильность. reconnecttimeout — интервал попыток переподключения при обрыве. 15 секунд — разумный компромисс.
Параметр mhz задаёт тактовую частоту ридера в 10кГц. 357 = 3.57 МГц. Если карта не читается — попробуй 357, 368, 600. Некоторые карты капризны к частоте.
oscam.user — учётные записи клиентов
[account]
user = client1
pwd = strongpassword1
group = 1
au = 1
uniq = 1
maxconn = 1
caid = 0D00
ident = 0D00:AABBCC
inactivitytimeout = 120
uniq=1 запрещает одновременный вход с одного аккаунта с разных IP — важно если ты шаришь доступ и не хочешь чтобы один аккаунт использовался несколькими людьми. maxconn=1 — максимум одно соединение. au=1 разрешает клиенту EMM-обновления.
oscam.dvbapi — маппинг CAID для Enigma2
[dvbapi]
enabled = 1
au = 1
pmt_mode = 0
request_mode = 1
boxtype = dream
[services]
ident = 0D00:AABBCC,CCDDEE
Без правильного oscam.dvbapi Enigma2 не будет слать ECM запросы к oscam. Это частая причина «всё настроено но не работает».
oscam.services — группировка каналов по провайдерам
[PACKAGE1]
caid = 0D00
provid = AABBCC
srvid = 1234,5678,9012
Позволяет ограничить доступ конкретных клиентов конкретными пакетами каналов. Не обязательно для базовой настройки, но полезно при нескольких картах с разными правами.
Сетевая часть: порты, NAT, проброс через роутер
Стандартные порты CCcam (12000), OScam cs378x (10000), webif (8888)
CCcam слушает на TCP 12000 по умолчанию. В /etc/CCcam.cfg это меняется через SERVER LISTEN PORT. OScam в режиме cs378x — TCP 10000, в режиме newcamd — 10000-10009 (по одному порту на CAID). Webif — 8888 (или 988 в Enigma2-сборках). Все эти значения задаются в конфигах и меняются произвольно.
Проброс портов на роутере и iptables
На роутере пробрасываем нужный порт на внутренний IP сервера. В iptables на сервере:
iptables -A INPUT -p tcp --dport 10000 -j ACCEPT
iptables -A INPUT -p tcp --dport 8888 -j ACCEPT
iptables -A INPUT -p tcp --dport 12000 -j ACCEPT
Сохраняем правила через iptables-save > /etc/iptables/rules.v4. На Debian/Ubuntu — пакет iptables-persistent автоматически загружает правила при старте.
Использование DDNS вместо статического IP
Если у тебя динамический IP от провайдера — клиенты будут терять сервер при каждой смене адреса. Решение: DDNS-сервис. DuckDNS (бесплатный) или No-IP (есть бесплатный tier) — устанавливаешь клиент, он обновляет DNS-запись при смене IP. В конфиге клиентов прописываешь hostname вместо IP. Не забудь настроить reconnecttimeout в oscam.server — при смене IP сервер переподключится сам через это время.
Защита webif: HTTPS, httpallowed, fail2ban
Webif открытый в интернет — это плохая идея. В oscam.conf:
httpallowed = 127.0.0.1,192.168.0.0/16
httpforcesslv3 = 1
Для доступа снаружи — только через SSH-туннель:
ssh -L 8888:localhost:8888 user@server_ip
Потом открываешь http://localhost:8888 локально. Никакого открытого порта в интернете.
Если всё же нужен внешний доступ — fail2ban с фильтром на oscam.log:
# /etc/fail2ban/filter.d/oscam.conf
[Definition]
failregex = .* wrong password from <HOST>
ignoreregex =
Диагностика и типичные проблемы
Первое что делаешь при проблемах — включаешь подробное логирование. В oscam.conf:
[global]
logfile = /var/log/oscam/oscam.log
debuglevel = 4
После перезапуска лог станет многословным, но там будет всё необходимое.
Чтение oscam.log: ECM not found, freezing, timeout
Типичные строки которые говорят о проблемах:
ECM not found— несоответствие CAID или provider ID. Проверьidentвoscam.serverиoscam.dvbapi.card not inserted— физическая проблема с ридером или картой.connection timeout— сервер недоступен или заблокирован firewall.too many connections— превышен лимитmaxconnвoscam.user.
Webif: статус ридеров, ECM time, частота freezes
Webif OScam — главный инструмент диагностики в реальном времени. Вкладка «Readers» показывает статус каждого ридера, среднее ECM time, количество обработанных запросов. Вкладка «Users» — активные соединения и статистику по клиентам. Если видишь ECM time 50ms в webif но всё равно фризы — проблема не в сервере а в сети между сервером и ресивером. Проверяй пинг и потери пакетов.
Проверка смарт-карты через pcsc_scan и cardreader
apt-get install pcscd pcsc-tools
pcsc_scan
Если pcsc_scan не видит карту — проблема физическая: контакты, напряжение питания, сам ридер. Некоторые ридеры работают на 3.3V, некоторые на 5V. В oscam.server параметр mhz влияет на стабильность — попробуй разные значения (357, 368, 600).
Быстрая проверка через oscam: oscam -d — запускает дамп информации о смарт-карте без полного старта демона.
Что делать если каналы фризят каждые 10 секунд
Это классическая картина: смена CW происходит каждые 10 секунд, сервер не успевает доставить новый. Алгоритм:
- Смотришь ECM time в webif — если >500ms, проблема в сервере/ридере
- Если ECM time нормальный (50-200ms) — проверяешь пинг и потери пакетов до ресивера
- Проверяешь CAID и provider ID в
oscam.dvbapi— часто они несоответствуют - Проверяешь
reconnecttimeoutвoscam.server— слишком маленькое значение вызывает постоянные реконнекты
Если несколько ридеров конфликтуют между собой — добавь lb_mode=1 в oscam.conf и lb_weight для каждого ридера в oscam.server. OScam сам распределит нагрузку.
OScam падает раз в сутки без видимой причины? Скорее всего утечка памяти в конкретной svn-ревизии. Обнови до последней: cd oscam-svn && svn update && make — это решало проблему в большинстве случаев с которыми я сталкивался.
Безопасность сервера: что обязательно
Многие поднимают card sharing сервер и оставляют его с дефолтными настройками безопасности. Потом удивляются брутфорсу и посторонним подключениям.
Сильные пароли в oscam.user и webif
Никакого admin/admin, test/test, user/1234. Минимум 16 символов, случайные. В oscam.user поле pwd хранится в открытом виде — поэтому chmod 600 на этот файл обязателен. В webif — параметры httpuser и httppwd в oscam.conf.
Ограничение IP-доступа через httpallowed и nodeid
В oscam.user можно указать hostname для привязки клиента к конкретному IP или диапазону:
[account]
user = client1
pwd = strongpass
hostname = 192.168.1.100
Это не замена паролю, но дополнительный слой. Для webif — httpallowed как показано выше.
Логи и мониторинг подозрительных подключений
Регулярная ротация логов через logrotate, иначе /var/log/oscam/oscam.log вырастет до нескольких гигабайт:
# /etc/logrotate.d/oscam
/var/log/oscam/oscam.log {
daily
rotate 7
compress
missingok
postrotate
systemctl kill -s HUP oscam
endscript
}
Периодически просматривай лог на предмет wrong password — это признак брутфорса. При большом количестве таких строк — подключай fail2ban.
Бэкап конфигов перед каждым изменением
Перед обновлением OScam или изменением конфигов:
tar czf /root/backups/oscam_$(date +%Y%m%d_%H%M%S).tar.gz /usr/local/etc/oscam.*
Хранить конфиги в локальном git — отличная практика. После каждого изменения: cd /usr/local/etc && git add -A && git commit -m "changed oscam.user: added client2". Откат за секунду при необходимости.
После обновления OScam иногда меняется формат oscam.user — особенно это касалось параметра newcamd_keys. Если клиенты перестали подключаться после обновления — первым делом смотри changelog и сравнивай синтаксис.
Какой порт по умолчанию использует CCcam сервер?
CCcam слушает TCP 12000 по умолчанию. Переопределяется в /etc/CCcam.cfg директивой SERVER LISTEN PORT 12001. OScam в режиме cs378x использует порт 10000, webif OScam — 8888 или 988 в зависимости от сборки. Все порты меняются в конфигах.
Чем отличается CCcam от OScam?
CCcam — закрытый бинарник, поддерживает только собственный протокол, разработка заморожена. OScam — open source, поддерживает CCcam, Newcamd, CS378x, gbox, имеет webif, dvbapi для Enigma2, активно развивается. Для нового card sharing сервера в 2026 году — однозначно OScam.
Что такое ECM time и какое значение нормальное?
ECM time — время ответа на запрос control word от момента отправки до получения. Норма: 50-300ms. При 300-500ms начинаются заметные артефакты. Выше 500ms — регулярные фризы. Зависит от скорости ридера, нагрузки на смарт-карту и пинга. Смотреть в реальном времени — вкладка Readers в webif OScam.
Можно ли запустить card sharing сервер на роутере?
Да, если роутер на OpenWrt/Entware с минимум 64 MB RAM. OScam есть в opkg: opkg install oscam. Производительность ограничена — нормально работает с 1-3 клиентами. Для большего числа клиентов лучше взять отдельный мини-PC (Raspberry Pi 4, например) или VPS.
Как выбрать провайдера сервера если не хочу поднимать свой?
На что смотреть: аптайм выше 99%, ECM time стабильно ниже 300ms, поддержка нужного CAID и provider ID, возможность тестового периода перед оплатой, нормальная техподдержка, отсутствие переподписки одной C-линии нескольким клиентам одновременно. Последний пункт — частая причина высокого ECM time у дешёвых провайдеров.
Почему каналы фризят каждые 10 секунд?
Каждые 10 секунд происходит смена control word. Если фризы строго синхронны — сервер не успевает отдать новый CW. Причины: высокий ECM time (>500ms), потери пакетов в сети, перегруженная смарт-карта, неверный CAID или provider ID в oscam.dvbapi. Проверяй по очереди — начни с ECM time в webif.
Как защитить webif OScam от взлома?
Минимум: сильный пароль в httppwd, добавить httpallowed=127.0.0.1,192.168.0.0/16 — только локальная сеть. Для доступа снаружи — SSH-туннель: ssh -L 8888:localhost:8888 user@server. Можно включить HTTPS через httpforcesslv3=1 с самоподписанным сертификатом. При брутфорсе — fail2ban с фильтром на строки wrong password в oscam.log.
Практические советы для стабильного просмотра
Даже самая стабильная линия CCCam или OSCam требует пары простых подготовительных шагов. Обновляйте прошивку ресивера, раз в неделю очищайте ECM‑кеш и держите 15–20% свободного места на USB‑накопителе или во встроенной памяти, чтобы кардридер записывал ключи без задержек.
При настройке антенны оставляйте запас по MER/BER: смещение на два градуса или ослабленный F‑коннектор чаще становится причиной “фризов”, чем сам кардшаринг. Держите под рукой короткий патч‑корд для проверки другого роутера и сохраните два профиля в OSCam — под TCP и под UDP — чтобы мгновенно переключиться, если провайдер начнёт фильтровать протокол.
Utgard.tv следит за каждым хабом 24/7, однако вы можете ускорить диагностику, если будете вести небольшой журнал действий. Записывайте время переключения канала, активный CAID и то, использовали ли вы Wi‑Fi или Ethernet. Такой мини‑отчёт позволит инженерам воспроизвести вашу конфигурацию в лаборатории и предложить решение не за часы, а за минуты.
- Держите активными две линии: если первый сервер уходит на обслуживание, второй тут же подхватывает поток без повторного ввода логина.
- Раз в месяц делайте замер скорости и задержек. Стабильных 1–2 Мбит/с при пинге до 80 мс достаточно для SD/HD, но если джиттер превышает 20 мс — переведите роутер на провод.
- Сохраните в закладки страницу статуса Utgard.tv и Telegram‑бота @utgard_tv_bot — там появляются уведомления о работах раньше, чем успеют среагировать SEMrush или внешние мониторы.