Ich habe einen Client der wohl nur mit IPv6 raus funkt (wird im oscam WebIf angezeigt) und kommt nicht mehr auf meinen
Raspberry Server drauf.
Muss ich für ihn etwas spezielles in meinem Netzwerk aktivieren?
Im Anhang seht ihr meine Portfreigabe, muss da noch etwas für IPv6 dazu?
Nun, das ist ein bekannter Fehler in oscam: Es hat keinen Fallback auf IPv4, wenn mit IPv6 keine Verbindung zustande kommt.
Der erste Fehler ist allerdings Dein DynDNS:
Der von der Fritz!Box gepflegte DynDNS-Eintrag enthält offenbar sowohl eine IPv4 als auch eine IPv6, obwohl der Server gar nicht auf der Fritz!Box läuft!
Es gibt da jetzt mehrere Möglichkeiten:
1. Die saubere, zukunftssichere Lösung
Du löschst die klassische Portfreigabe in der Fritz!Box, meldest Dich beim MyFritz!-Dienst an und legst danach eine MyFritz-Freigabe für den
Raspberry Pi an.
Der MyFritz!-Dienst legt dabei auch gleich einen DynDNS-Host "raspberrypi.nfbgdfhgidsgd8h.myfritz.net" am (Wobei statt raspberrypi der Hostname Deines
Raspberry Pi stehen wird und statt nfbgdfhgidsgd8h irgendwas ähnlich kryptisches.
Dieser DynDNS enthält dann die richtige IPv6 (Nämlich die des
Raspberry Pi) und auch Deine IPv4 und kann entweder von den Clients direkt genutzt werden oder Du hübschst ihn auf, indem Du bei einem DynDNS-Anbieter der auch CNAMEs (Aliasse) unterstützt, einen DynDNS-Host an, der nur ein CNAME für den MyFritz-DynDNS-Host ist.
Sobald Du dann Deinen oscam mit IPv6-Support neu baust/durch einen mit IPv6-Support ersetzt, können IPv6-Clients auch direkt damit verbinden.
2. Die saubere, rückwärtsgewandte Lösung
Finde die Update-URL für Deinen DynDNS-Anbieter heraus, z.B. bei SpDyn:
Code:
https://update.spdyn.de/nic/update?hostname=<domain>&myip=<ipaddr> https://update.spdyn.de/nic/update?hostname=<domain>&myip=<ip6addr>
Im großen und ganzen gibt es zwei hauptsächliche Varianten, mit denen DynDNS-Anbieter beide IPs updaten:
Entweder wie bei SpDyn durch doppelte Aktualisierung direkt hintereinander, wobei bei dem einen Aufruf die IPv4 mitgeschickt wird und beim zweiten die IPv6
oder indem ein zusätzlicher Parameter "myipv6" o.ä. angehängt wird.
In beiden Fällen stellst Du die Update-URL so zusammen, daß
kein IPv6-Update erfolgt, stellst in der Fritz!Box den DynDNS-Dienst auf "Manuell" um und trägst die so auf IPv4 reduzierte Update-URL ein, also bei SpDyn z.B.
Code:
https://update.spdyn.de/nic/update?hostname=<domain>&myip=<ipaddr>
Ggf. mußt Du Dich danach noch einmal bei Deinem DynDNS-Anbieter einloggen und die bereits gesendete IPv6 aus dem DynDNS-Host löschen.
Danach hast Du einen IPv4-only DynDNS-Host und bei dem wird auch ein IPv6-fähiger oscam eine Verbindung mit IPv4 aufbauen wollen.
3. Die extrem rückwärtsgewandte Methode
Du bittest den Client, einen oscam ohne IPv6-Support zu nutzen. Wen der Client keine anderen Server außer Dir nutzt sollte das problemlos gehen, nicht jedoch wenn er den IPv6-fähigen oscam nutzt, weil er auch IPv6-only-Server hat.
Bei OpenATV ist das ganz einfach: Wenn er bislang z.B. oscam-trunk vom SoftCAM-Feed nutzt, soll er halt oscam-trunk-ipv4only installieren.
Die Variante ohne "-ipv4only" und mit "-ipv4only" ersetzen sich automatisch gegenseitig, sobald die jeweils andere installiert wird und das Konfigurationsverzeichnis bleibt gleich, die Konfiguration bleibt also auch erhalten.
Der einzige Haken ist der, daß man bei einem späteren Wechsel von "-ipv4only" auf die Dual-Stack-Variante (Also ohne "-ipv4only") alle IPv6-bezogenen Einstellungen selber wieder eintragen muß, da oscam ohne IPv6 auch alle IPv6-Adressen (z.B. aus httpallowed) aus seinen Configs löscht.
4. Den dreckigen Work-Around:
Folgendes Script als /usr/bin/fix-oscam.sh auf dem Client mit dem Verbindungsproblem anlegen und ihm die Rechte 755 geben:
Code:
#!/bin/sh
V6REMOTE=""
V6REMOTE=$(nslookup Hier.Deinen.DynDNS-Host.eintragen | grep "Address" | grep "\." | tail -1 | sed 's#.*: ##')
if [ ! -z $V6REMOTE ]; then
cat /etc/hosts | grep -v TDCroPower > /tmp/hosts
echo "$V6REMOTE TDCroPower" >> /tmp/hosts
mv /tmp/hosts /etc/hosts
fi
Dieses Script nun alle 30, 20, 10 oder 5 Minuten durch Cron aufrufen lassen ...
"crontab -e" eingeben und die folgende Zeile einfügen:
Code:
*/5 * * * * /usr/bin/fix-oscam.sh
Das Script löst alle x Minuten Deinen Hostname auf, filtert dabei aber die IPv6 raus und speichert das Ergebnis als Zuordnung TDCroPower = Deine IPv4 in die hosts-Datei des Clients.
Danach im oscam statt Deines DynDNS einfach nur "TDCroPower" eintragen.
Den Workaround benutze ich auf meinem Server, weil ich auch so ein paar Kandidaten mit fehlerhaftem DynDNS habe, auf einen IPv6-fähigen oscam aber nicht verzichten kann bzw. will, weil ich auch IPv6-Server habe, bei denen IPv4 - wenn überhaupt - über irgendwelche Portmapper laufen würde, also anfälliger wäre.
Die fix-oscam.sh kann man übrigens beliebig erweitern, indem man den Teil ab V6REMOTE="" beliebig oft dupliziert und weitere DynDNS-Hosts einträgt. Aber bitte nicht vergessen, dann auch das "TDCroPower" entsprechend anzupassen.
Mit diesem Block:
Code:
DEPPIP=""
DEPPIP=$(cat /var/log/oscam.log | grep "encrypted cccam-client" | grep Username-des-Deppen | tail -1 | sed 's#.*cccam-client ##' | sed 's# gr$
if [ ! -z $DEPPIP ]; then
cat /etc/hosts | grep -v depp > /tmp/hosts
echo "$DEPPIP depp" >> /tmp/hosts
mv /tmp/hosts /etc/hosts
fi
... kann man übrigens auch zu solchen Servern verbinden, deren Betreiber zu doof sind, einen DynDNS stabil zu aktualisieren.
Das Script fischt sich dann die IP des Deppen aus dem oscam.log, wo ja hoffentlich drin steht, mit welcher IP sich die Nase als Client verbindet und die ist i.d.R. identisch mit dessen Server-IP.