Howto Oscam cacheex

Dieses TUT soll helfen, die Angst bzw. die "Erst-mal-abwarten-Haltung" vor cacheex zu verlieren, Grundwissen zu vermitteln und damit all zu animieren, untereinander den Cache zu tauschen. Cacheex ist seit den 64xx-er Versionen ausgereift und weitgehend fehlerfrei.Cache Man kann sollte Cacheex in einer getrennten Instanz betreiben.Cache In der Vergangenheit hatten DVBapi-Clienten bei einem direkten cache3-Hit einen Freezer, CCcam-Clienten (als prio-Clienten) auch. Ob das im Moment noch so ist, kann ich nicht sagen, vielleicht weiß das jemand und ergänzt mein Howto.
Cacheex dient dazu, den Cache, also den Speicher unserer OScam, untereinander auszutauschen. Auf diese Weise kann die Karte entlastet werden.
Cacheex ist derzeit nur über zwei Protokolle machbar: camd3 (TCP als cs378x und UDP als camd35) und cccam-ext (extented CCcam Protokoll). Bei der Wahl des Protokolls ist auf die Down- und Upload-Begrenzung (nicht verwechseln mit der Geschwindigkeit!) des eigenen Internetanschlusses zu achten. Cacheex kann viel Traffic erzeugen. TCP-Protokolle (CCcam und cs378x) erfordern vom Empfänger des Datenpaketes eine Rückmeldung, ob das Paket korrekt angekommen ist, UDP-basierende (camd35) nicht. Wird ein TCP-Protokoll verwendet und die Upload-Grenze überschritten, sendet OScam immer weiter Pakete, es kommt aber keine Rückmeldung, weil die Pakete ja noch in der Netzwerkkarte oder im Router hängen. In so einem Fall wird sich der Router, der Computer (wenn andere Internetanwendungen laufen), oder im besten Fall nur unsere OScam "aufhängen".
Cacheex kann speicherhungrig und ressourcenfressend sein. Der Einsatz von cacheex2 oder 3 auf einer Dreambox muss wohlüberlegt sein, ratsam ist zumindest ein Thin-Client mit min 1 GB RAM und ca. 1,5 GHz, hängt aber stark von der Anzahl cacheex-peers ab.
Beim Einsatz von Cacheex ist unbedingt auf eine effiziente Gruppeneinteilung zu achten.Cache-peers User und Reader sind bei CE 2 oder 3 durch verschiedene Gruppen strikt zu trennen! Sollte ein Partner Fake-CW`s (durch Anticascading) an uns senden oder von einem schlecht konfigurierten CSP längst abgelaufene ECM-CW erhalten, können diese Bad-CW über cacheex in Windeseile verbreitet werden und zu Freezern führen, so dass am Ende keiner weiß, woher sie kamen. Deshalb immer User in eine Gruppe, Reader in eine andere. Ein Beispiel zur optimalen Gruppeneinteilung kommt nach der Erklärung der einzelnen Cache-ex-Modi.
Haben wir uns für cacheex entschieden, müssen vorab in der Oscam.conf noch ein paar Einträge ergänzt werden:
- cacheexwaittime = 1500 #nur relevant für CE Mode 1
- cacheexenablestats = 0 #Zeigt die Statistik an -- Speicherverbrauch beachten!
- max_cache_time = 5 #wie lange bleibt ein ECM in unserem Cache
- max_cache_count = 8000 wieviel ECM können wir speichern
Der Abschnitt CSP ist für cacheex nicht notwendig, wird trotzdem im Nachhinein erläutert. Die Datei oscam.cacheex ist nur für CE-Mode 1 relevant und wird in diesem Abschnitt erklärt.
Cacheex, kurz CE gibt es als Mode1, 2 und 3.
CE-Mode 1:
- CE1 ist im Grunde fast wie ein normaler proxie. In OScam A wird ein Reader (CCcam-ext oder camd3) zu OScam B angelegt und in diesen Reader cacheex = 1 eingetragen. In OScam B wird ein User angelegt und in diesen User ebenfalls cacheex = 1 eingetragen. Das wars. Ab jetzt geht jede Anfrage, wirklich jede Anfrage zuerst an den CE1-Reader.
- Dann wird die Zeit auf ein ECM-CW gewartet, die wir in cacheexwaittime eingetragen haben. Kommt in dieser Zeit kein ECM-CW, greifen unsere anderen Einstellungen (Fallbacktime, Loadbalancer, etc.).
- In OScam B wird geschaut, ob das ECM-CW im Cache liegt. Wenn ja, wird das ECM-CW zu OScam A gesendet, wenn nein, kommt ein rejected. Es wird also keine Abfrage an proxies oder Karten generiert.
- Zusätzlich kann OScam B auch einen CE1-Reader (oder auch CE2 oder 3) zu OScam A anlegen, muss aber nicht. Zusätzliche Einstellungen wie Services oder Einträge unter caid können optional erfolgen.
- In der Datei oscam.cacheex im Hauptverzeichnis unserer OScam können global weitere Einstellungen vorgenommen werden, wie ECM-Länge pro caid, nur bestimmte SID, Provider etc. Diese Datei ist nicht notwendig, einfache Einstellungen können ebenso gut im Reader selbst vorgenommen werden (Services, ecm-länge und caid).
CE-Mode 2:
Ein CE2-Reader ist ein normaler proxie kombiniert mit zusätzlicher Cache-Push-Funktion. Vom Partner wird über den Reader cache "geholt" (der Partner pusht seinen Speicher zu uns) und wir können zusätzlich normale Anfragen an den Partner stellen, die dieser dann über seine Karte oder andere proxies beantwortet.
- In OScam A wird ein Reader (CCcam-ext oder camd3) zu OScam B angelegt und in diesen Reader
cacheex = 2
eingetragen.
- In OScam B wird ein User angelegt und in diesen User ebenfalls
cacheex = 2
eingetragen.
- Das wars. Zusätzliche Einstellungen wie Services oder Einträge unter caid können optional erfolgen.
CE-Mode 3:
Ein CE3-Reader ist push-only. Es gehen keine normalen Anfragen an den Partner, es wird nur der eigene Cache zum Partner gepusht.
- Achtung, die Richtung ist hier entgegengesetzt, der Reader holt nicht, sondern gibt wie ein User, deshalb auch "reverse push".
- In OScam A wird ein Reader (CCcam-ext oder camd3) zu OScam B angelegt und in diesen Reader
cacheex = 3
eingetragen.
- In OScam B wird ein User angelegt und in diesen User ebenfalls
cacheex = 3
eingetragen.
- Das wars. Zusätzliche Einstellungen wie Services oder Einträge unter caid können optional erfolgen.
- Ist alles eingerichtet und alle Reader 7 User verbunden, sehen wir unter cacheex, wie viel ECM-CW wir vom Partner erhalten haben und wie viel wir gepusht haben. Es kommt nicht darauf an, möglichst viel zu pushen, sondern freezfrei zu pushen, also ohne Fake-CW`s und ohne Bad-CW`s. Jemand, der freezt, den schaltet man ab, jemand der nur wenig geben kann, der hat halt einen kleinen Share, ist dafür aber freezfrei.
in der oscam.conf gibt es noch einen Abschnitt CSP:
Zur Zeit kann OScam von einem CSP Cache erhalten, nicht senden, sondern nur bekommen. Dazu braucht es keinen User und auch kein Passwort, nur den Port. Seid also vorsichtig, wem alles Ihr den Port bekannt gebt.
Ist im Abschnitt CSP ein Eintrag bei wait_time vorhanden, wird jede Anfrage unserer User um diesen Wert gewartet, bis evtl. ein CSP das angeforderte ECM-CW zu uns pusht, danach geht die Anfrage an unsere CE1-Reader, sofern vorhanden, dann wird die cacheexwaittime gewartet, ob eine Antwort kommt und erst danach gehen die Anfragen an die proxies / Karten. So kommen schnell einige Sekunden zusammen. Es ist also ratsam, pro CSP eine eigene Oscam-Instanz zu starten und jede CSP-Oscam-Instanz den Inhalt per CE3 in unsere Haupt-(CE)-OScam in eine extra Gruppe zu pushen.
Abschließend noch ein Beispiel zur Gruppeneinteilung:
- Unsere lokale Karte 1 ist in Gruppe 1, Karte 2 in Gruppe 2, Camd3-Keys für ORF in Gruppe 3, alle proxies in Gruppe 4, CE1-Reader in Gruppe 5, CE2-Reader in Gruppe 11.
- Die CE3-User kommen ebenfalls in Gruppe 11 (sind ja im eigentlichen Sinn auch Reader).
- Alle normalen User sollten jetzt die Berechtigung für die Gruppen 1,2,3,4,5 und 11 bekommen.
- Unsere CE3-Reader bekommen die Gruppen 1,2,3 und 4, sonst keine.
- So wird sichergestellt, dass nur der Inhalt unserer eigenen OScam weiter gepusht wird, und der ist "astrein".
- Stellen wir fest, dass ein Partner uns mit gepushten Fake-CW`s oder Bad-CW`s ärgert, packen wir ihn einfach in eine leere Gruppe, so merkt er es noch nicht mal, unser Share bleibt sauber und wir können Ihn in Ruhe testen und anschreiben.
Kurzerklärung:
Gruppenaufteilung:
Ihr könnt mittlerweile alle Cache ex-User in einer Gruppe legen.
Eure normalen Reader / Karten sollten in einer getrennten Gruppe sein, damit ihr auch gezielt diesen Cache versenden könnt.
Beispiel:
Gruppe 1 - lokale Karten Gruppe 2 - Proxy Reader Gruppe 3 - Cacheex User
Also tragt ihr bei dem User, den ihr erstellt Gruppe 3 ein und bei dem Reader Gruppe 1,2.
Ihr schickt euren Cache mit dem Reader und empfangt mit dem User!
Das bedeutet also - jemand gibt euch eine Line, damit ihr ihm Cache schicken könnt und ihr tragt einen User bei euch ein, damit er (mit einem Reader von sich) seinen Cache schicken kann.
Hier die Beispielconfigs.
Beispiel 1 - mit aktivem Loadbalance
Dies ist z. B. geeignet für Leute, die alles in einer Instanz haben.
Oscam.config
[global] disablelog = 1 logfile = /tmp/oscam.log usrfileflag = 1 clienttimeout = 4000 fallbacktimeout = 2000 clientmaxidle = 200 bindwait = 40 nice = 0 serialreadertimeout = 1900 maxlogsize = 8096 waitforcards = 0 preferlocalcards = 1 readerrestartseconds = 3600 dropdups = 1 block_same_ip = 0 block_same_name = 0 cwlogdir = /var/log/oscam/CW.log emmlogdir = /var/log/oscam/EMM.log lb_mode = 1 lb_save = 5000 lb_nfb_readers = 2 lb_max_ecmcount = 4000 lb_retrylimit = 2400 lb_stat_cleanup = 12 lb_max_readers = 10 lb_auto_betatunnel = 0 lb_savepath = /tmp/stat lb_retrylimits = 09:350 failbantime = 1440
[cache] delay = 10 #dieser eintrag brachte bei einigen usern eine verbesserung max_time = 10 max_count = 5000 wait_time = 1702:950,1843:550,1830:550 #diese werte sind nur zu setzen, wenn ihr auf der instanz auch normale User (mode 0) habt. cwcycle_check_caid = 1702,1830 #diese werte sind nur zu setzen, wenn ihr auf der instanz auch normale user (mode 0) habt. cwcycle_maxlist = 4000 cwcycle_keeptime = 15 cwcycle_onbad = 1 cwcycle_sensitive = 4
Beispiel 2 - ohne Loadbalance Dies ist z. B. geeignet für Leute, die mehrere Instanzen nutzen.
Oscam.config
[global] disablelog = 1 logfile = /tmp/oscam.log usrfileflag = 1 clienttimeout = 3000 fallbacktimeout = 2000 clientmaxidle = 200 bindwait = 40 nice = 0 serialreadertimeout = 1900 maxlogsize = 8096 waitforcards = 0 preferlocalcards = 1 readerrestartseconds = 3600 dropdups = 1 cacheexwaittime = 0 block_same_ip = 0 block_same_name = 0 cwlogdir = /var/log/oscam/CW.log emmlogdir = /var/log/oscam/EMM.log lb_mode = 0 failbantime = 1440
[cache] delay = 10 max_time = 10 max_count = 5000 wait_time = 1702:950,1843:550,1830:550 #diese werte sind nur zu setzen, wenn ihr auf der instanz auch normale user (mode 0) habt. cwcycle_check_caid = 1702,1830 #diese werte sind nur zu setzen, wenn ihr auf der instanz auch normale user (mode 0) habt. cwcycle_maxlist = 4000 cwcycle_keeptime = 15 cwcycle_onbad = 1 cwcycle_sensitive = 4
oscam.server
Code:
[reader] label = name_frei_aussuchen protocol = camd35 device = beispiel.dns.com,14500 user = beispiel_user password = beispiel_pass inactivitytimeout = 0 cacheex = 3 reconnecttimeout = 1800 #der reconnecttimeout ist wichtig, damit ihr euch nicht 100 mal verbindet. cacheex = 3 cacheex_maxhop = 2 group = 1,2 dropbadcws = 1 audisabled = 1
oder
[reader] label = name_frei_aussuchen protocol = cccam device = beispiel.dns.com,14501 user = beispiel_user password = beispiel_pass cacheex = 3 cacheex_maxhop = 2 group = 1,2 dropbadcws = 1 cccversion = 2.3.0 cccmaxhops = 0 ccckeepalive = 1 cccreconnect = 7000 audisabled = 1
oscam.user
[account] user = user_cache pwd = user_pass uniq = 3 group = 3 cacheex = 3 cacheex_maxhop = 2 #sprecht mit eurem share partner, wieviele instanzen er nutzt - bei 2 instanzen muss da eine 2 hin cccmaxhops = -1 #dies dient zum verbergen eurer lokalen karten - euer Partner kriegt nur needinit angezeigt, erhält aber euren vollen Cache