KPN Interactieve TV zonder Experia Box

Ik ben een heel tevreden klant van KPN Internet. Om diverse redenen gebruik ik de Experia Box niet, maar ik wil wel graag TV kunnen kijken met de KPN Interactieve TV Set Top Box. Vroeger ging dat “vanzelf goed”, tegenwoordig is daar wat werk voor nodig.

In augustus 2021 werkten deze instructies goed, maar er kunnen dingen veranderen bij KPN natuurlijk!

Je hebt het verhaal op deze pagina alleen nodig als je de Experia Box niet wil gebruiken. In vrijwel alle gevallen is het makkelijker om de KPN apparatuur te gebruiken en hun handleidingen op te volgen.

De onderstaande uitleg is alleen nodig als je hebt besloten het zonder de Experia Box te gaan doen, en daar moet je echt wel een reden voor hebben. Om het onderstaande te laten werken heb je ook een managed switch met VLANs nodig. Maar als je het zonder Experia Box wil doen, dan zal je die wel hebben.

Let op! Sommige pagina’s online praten nog over “bridged”, dat werkt niet meer. Verder zijn er diverse pagina’s die het wat te ingewikkeld maken, of alleen een oplossing beschrijven voor specifieke routers.

Op deze pagina probeer ik uit te leggen wat er moet gebeuren, en documenteer ik een script waarmee je iedere Linux computer, zelfs de kleinste Pi Zero, dit kan laten doen.

Voor je iets hebt aan dit verhaal moet je eerst normaal internet werkend hebben. KPN legt dit hier goed uit. Ook deze pagina kan nuttig zijn.

De KPN Interactieve TV Set Top Box

Het zwarte doosje, de STB. Dit doosje heeft drie dingen nodig:

  • De multicast KPN TV service (KPN VLAN 4)
  • Normaal internet (zoals over PPPoE binnenkomt op KPN VLAN 6)
  • Een IGMP proxy voor de multicast.

Om dit te bereiken moet je het doosje toegang geven tot het normale internet. Specifieke subnetten moet je echter naar VLAN 4 sturen. Daarnaast wil de STB lid worden van multicast groepen, waarbij wat hulp nodig is. Hieronder stap voor stap uitleg.

KPN VLAN 4

Dit is een beetje een magisch VLAN. Je kunt er DHCP requests naar sturen, maar zonder speciaal trucje komt er dan niets terug. Stuur je een DHCP request met option60 (Vendor Class Identifier) met waarde: IPTV_RG, dan krijg je wel antwoord. En als je dan ook nog vraagt om: subnet-mask, broadcast-address, routers, rfc3442-classless-static-routes, dan stuurt die server je ook nog op de speciale KPN TV subnetten op.

Op VLAN4 krijg je van KPN zelf een private space adres toegewezen. Je moet NAT doen voor de STB, anders gaat het niet goed.

Normaal internet

In tegenstelling tot wat her en der staat heeft de STB geen bijzondere DHCP behandeling nodig. Je kan hem aan iedere DHCP server hangen, als hij maar DNS en default route krijgt.

IGMP Proxy / Multicast

De KPN STB ontvangt z’n normale TV via multicast. Dit is een ingewikkeld systeem waarbij je packets naar meerdere bestemmingen tegelijk kan sturen. En het werkt ook echt - als je twee KPN STBs hebt en ze staan beide op hetzelfde kanaal, dan komt er ook echt maar 1 exemplaar van de stream binnen. Machtig mooi spul.

Om een kanaal te ontvangen “subscribed” de STB via het Internet Group Management Protocol (IGMP) op de juiste stream. Dit verzoek moet van het lokale LAN doorgegeven worden, en daarom moet er een IGMP Proxy draaien om dat te doen.

Multicast op een apart netwerk?

Multicast is wel breekbare technologie. Als een switch bijvoorbeeld niet snapt wat er gaande is dan stuurt hij het multicastverkeer naar alle poorten. Mogelijk inclusief je wifi, die dan ineens vol zit met 8Mbit/s aan televisie (per STB!).

Als je toch al met VLANs bezig bent is het een prima idee om de KPN set top boxen in hun eigen VLAN te zetten, eentje die nooit bij je WiFi komt.

In het script beneden heb ik gekozen voor die oplossing. Als je alles op 1 netwerk wil doen dan moet je het onderstaande laten gebeuren op je internet router, wat misschien nog niet meevalt.

Het TV routertje

In mijn situatie is er al een goed functionerende router voor internet, eentje die meer dingen doet dan KPN alleen. Televisie is belangrijk, maar ik heb geen zin om de al complexe router nog ingewikkelder te maken.

Gelukkig hoeft dat ook niet, en kan je VLAN 4 geheel los laten lopen.

Het doosje wat we gaan bouwen heet hier ‘Linux’.

In de twee onderstaande scripts neem ik de volgende dingen aan:

  • Het Linux doosje ziet untagged op eth0 “normaal internet” (dus zonder PPPoE, dat moet je internet router al geregeld hebben)
  • VLAN 4 van KPN komt tagged binnen op eth0
  • VLAN 44 in je huis, waar de set top boxen op zitten, zit tagged op eth0

Installeer een recente Debian/Raspberry Pi OS, verbonden met je normale KPN internet.

Je kunt dan of de onderstaande beschrijving met de hand uitvoeren, of als je op Debian Buster of Raspberry Pi OS Buster zit, deze tar file uitpakken, als volgt:

cd
wget https://berthub.eu/articles/kpn-tv-config.tar
cd /
sudo apt-get install udhcpd igmpproxy
sudo tar xf ~/kpn-tv-config.tar
sudo systemctl enable kpn-tv.service
sudo systemctl daemon-reload 
sudo reboot
# en na een minuutje of wat, zet de settop boxen aan

Dit doet hetzelfde als de handmatige beschrijving hieronder, die ik desondanks aanraad, omdat je dan weet wat er eigenlijk gebeurt.

Handmatig

Deze beschrijving zal waarschijnlijk ook werken met nieuwere Debians. De bovenstaande tarfile vervangt diverse files in plaats van ze aan te passen.

Voeg toe aan /etc/dhcpcd.conf:

denyinterfaces eth0.4,eth0.44

Dit voorkomt dat de normale DHCP client zich gaat bemoeien met het KPN TV VLAN en je STB VLAN.

Voeg het volgende blokje toe aan /etc/dhcp/dhclient.conf:

interface "eth0.4" {
  request subnet-mask, broadcast-address, routers, rfc3442-classless-static-routes;
  send vendor-class-identifier "IPTV_RG";
}

Dit regelt dat de juiste vraag gesteld wordt aan het KPN TV VLAN.

Vervolgens moeten we een DHCP server installeren voor eth0.44, waar de KPN set top boxen leven:

apt-get install udhcpd

Vervang de inhoud van /etc/udhcpd.conf door het volgende:

start           192.168.2.21    
end             192.168.2.254   
interface       eth0.44
max_leases      234             
opt     dns     195.121.1.66 195.121.1.34
option  subnet  255.255.255.0
opt     router  192.168.2.1
option  lease   864000          

Let goed op de DNS servers, die moeten kloppen. Ik heb hier nu twee KPN nameserver IP adressen ingevoerd, maar die zouden ooit kunnen wijzigen. Het is mogelijk handiger hier de DNS server in te vullen die ook werkt op je normale internet lan (eth0).

Vervolgens (we zijn er bijna):

apt-get install igmpproxy

En vervang de inhoud van /etc/igmpproxy.conf door:

quickleave

phyint eth0.4 upstream  ratelimit 0  threshold 1
        altnet 213.75.0.0/16
        altnet 217.166.0.0/16
 
phyint eth0.44 downstream  ratelimit 0  threshold 1
        altnet 192.168.2.0/24

Mochten KPN-ers dit lezen, deze ‘altnet’ informatie ontbreekt op jullie “eigen modem pagina”. Tevens staat daar “Vencor Class Identifier” ipv “Vendor Class Identifier”.

Alle software is nu juist geïnstalleerd. Nu nog regelen dat bij het opstarten de juiste dingen gebeuren.

Zet het volgende in /home/pi/kpn-tv.sh (of ergens anders als je niet op een Raspberry zit):

#!/bin/sh
# for every boot
sysctl net.ipv4.ip_forward=1
sysctl kernel.panic=10
sleep 5
ip link add link eth0 name eth0.44 type vlan id 44
ip link add link eth0 name eth0.4 type vlan id 4
ip link set up dev eth0.44
ip link set up dev eth0.4
ip addr add 192.168.2.1 dev eth0.44
ip ro add 192.168.2.0/24 dev eth0.44
iptables -A POSTROUTING -t nat  -s 192.168.2.0/24 -o eth0 -j MASQUERADE
iptables -A POSTROUTING -t nat  -s 192.168.2.0/24 -o eth0.4 -j MASQUERADE
iptables -A INPUT -i eth0.4 -p tcp -j DROP
dhclient

igmpproxy /etc/igmpproxy.conf
udhcpd -S

Nu de systemd file. Maak /etc/systemd/system/kpn-tv.service met de volgende inhoud:

[Unit]
Description=KPN TV

[Service]
Type=oneshot
ExecStart=/home/pi/kpn-tv.sh
RemainAfterExit=true
StandardOutput=journal

[Install]
WantedBy=multi-user.target

En om er voor te zorgen dat dit alles automatisch start:

chmod 644 /etc/systemd/system/kpn-tv.service
chmod a+x /home/pi/kpn-tv.sh
sudo systemctl enable kpn-tv.service
sudo systemctl daemon-reload 

Als je nu reboot zou alles moeten werken!

Addendum

Waarom zo’n lelijk startup script? Waarom niet alles in /etc/network/interfaces? Een eerdere versie van deze pagina probeerde alles op de nette manier te doen. En dit was een wereld van pijn. De VLANs verschenen te laat, of een DHCP client startte te vroeg etc. Uiteindelijk bleek dit een heel stuk simpeler.

Afsluitende tip, ervaring leert dat een micro-SD kaart in een Raspberry Pi na verloop van tijd weleens corrupt raakt. Aangezien je mogelijke familie een ijzeren SLA heeft op TV kijken, maak gelijk twee kaartjes. Of doe gek, twee Raspberry Pi Zero’s.