Inleiding

Eind 2018 ben ik thuis overgestapt op Ubiquity UniFi apparatuur voor inrichting van het netwerk. We hebben een Telfort glasvezelaansluiting met internet en interactieve televisie zonder telefonie. Zoals meer mensen ben ik bezig geweest om het netwerk te vereenvoudigen en de Experiabox (V10) van Telfort te vervangen en inmiddels is dat gelukt. Credits gaan naar de auteurs op het Telfort forum, Bas Meerman en Kriegsman voor hun werk online. Ik heb op basis van hun informatie de omgeving werkend gekregen en heb daarvan een samenvatting van de stappen en ervaringen gemaakt.

Doelen

  • Optimale Wifi dekking in huis inclusief mogelijkheid voor roaming (mesh wifi)
  • Kunnen managen van het netwerk: oa scheiden van wifi apparatuur die niet bij het interne netwerk hoeft te komen en limiteren van internet bandbreedte door gastgebruikers
  • Telfort Experiabox V10 uit het netwerk (minder apparatuur), met behoud van on-demand functies zoals Netflix
  • Glasvezel (NTU) direct aangesloten op de USG

Met de bridge methode (zie Telfort forum) bleek interactieve televisie niet te werken en werden 3 switchpoorten bezet door de NTU en de USG (WAN/LAN). Dat was de motivatie om Routed TV verder uit te zoeken.

VOIP en IPV6 zijn buiten beschouwing gelaten. Ook de vervolgstappen zoals het inrichten van het gastnetwerk, het instellen van de firewall en het configureren van smtp voor het versturen van script resultaten zijn hier niet uitgewerkt.

Overzicht

Hardware

  • Ubiquity UniFi Security Gateway 3P (USG)
  • Ubiquity Unifi Switch 8 POE-60W
  • Ubiquity Unifi AP-AC-Pro (2x)
  • QNAP NAS met daarop de UniFi Controller app
  • Telfort TV Ontvanger (Arcadyan HMB2260 V2)

Voorbereiding

  • Sluit de apparatuur aan, richt de controller in en adopteer + update alle netwerkcomponenten. Omdat de USG standaard de 192.168.1.1 krijgt is in deze case het LAN gedefinieerd als 192.168.1.0/24
  • Noteer het MAC adres van je Telfort modem
  • Maak een back-up van de huidige instellingen zodat je terug kunt

Stappenplan

1 Inrichten van WAN verbinding

Open de controller, ga naar Settings -> Networks -> Create new network en stel de WAN verbinding in:

– Naam: Internet
– Purpose: WAN
– Connection type: Using DHCP
– VLAN: 34
– Save

2 Inrichten van LAN verbinding

Networks -> Create new network

– Naam: LAN
– Purpose: corporate
– Parent interface: LAN
– Gateway subnet: 192.168.1.1/24
– Domain name: localdomain
– Enable IGMP Snooping: Uit
– DHCP Mode: DHCP Server
– DHCP range 192.168.1.6 – 192.168.1.254 (standaard
– DHCP Name Server: Auto
– DHCP Lease Time: 86400
– DHCP Gateway IP: Auto
– DHCP Unifi Controller: 192.168.1.5 <- aanpassen naar eigen setup
– DHCP Guarding: Uit
– UPnP LAN: Uit
– Advanced DHCP options: Allemaal Uit
– Configure IPv6 Network: None
– Save

Als tussenstap kun je de aangesloten AP’s configureren en de internetverbinding vanaf het LAN testen.

3 Bepaal het next-hop adres voor IPTV

Log in op de USG (als admin) via een terminal en voer het volgende commando uit:

configure
run show dhcp client leases interface eth0.4 | grep router | awk ‘{ print $3 }’

Resultaat is het next-hop IP adres wat je later nodig hebt (voorbeeld: 10.240.34.1)

4 Download configuratiebestand

Download het config.gateway.json.txt bestand hieronder. Het config bestand bevat aanvullende opties die je niet vanuit de GUI kunt meegeven. Zo wordt een Virtual Interface (ViF) geconfigureerd waarop twee verschillende IP’s op basis van het MAC adres worden opgehaald.

5 Pas het configuratiebestand aan

Om op dezelfde (WAN) interface twee IP adressen te kunnen configureren worden er twee MAC adressen gebruikt. Het fysieke MAC adres wat op het Telfort modem staat A0:50:5C:26:BD:00 en een virtueel MAC adres met hier 1 digit verschil: A0:50:5C:26:BD:01.

Het config bestand dient op 4 punten gecontroleerd/aangepast te worden:

“4”: {
“mac”: “A0:50:5C:26:BD:01”, <- Virtueel MAC adres Telfort modem invullen

 “34”: {
“mac”: “A0:50:5C:26:BD:00”, <- Fysiek MAC adres Telfort modem invullen

 “eth1”: {
“description”: “eth1 – LAN”,
“address”: [
“192.168.1.1/24” <- Eventueel aanpassen naar eigen LAN range

“route”: {
“213.75.112.0/21”: {
“next-hop”: {
“10.240.34.1”: “”” <- Aanpassen naar uitkomst uit stap 3

Bestand opslaan als config.gateway.json (verwijder _.txt extentie). Voor de zekerheid kun je controleren of het formaat van het json bestand in orde is met de link onderaan. Zet hierna het bestand over naar de Controller (let op, niet de USG). Het bestand moet in deze map gezet worden: /data/sites/default

Voor QNAP is dat dan: .qpkg/Unifi/UniFi/data/sites/default

Tip: als de lay-out van het config bestand om zeep gaat bij het aanmaken op de controller, upload hem dan met (S)FTP.

Opmerking: de instellingen die in config.gateway.json staan zijn de basisinstellingen. Deze worden aangevuld met instellingen die je in de GUI maakt. Alle instellingen samen zijn terug te vinden in de actieve config op de USG. Deze is op te vragen via het commando mca-ctrl -t dump-cfg

6 Configureer de USG

Ga via de controller naar Devices -> USG -> Config -> Manage Device -> Provision

De USG krijgt de status “Provisioning” en krijgt na een paar minuten weer de status “Connected”. Belangrijk: start de USG daarna handmatig opnieuw op.

7 Download & activeer tvroute.sh script

Omdat de routering aangepast kan worden wordt er een script toegepast wat de route controleert en deze aanpast in de configuratie van de USG als er een wijziging heeft plaatsgevonden. Download het tvroute.sh.txt script hieronder:

  • Hernoem het bestand naar tvroute.sh (verwijder _.txt extentie) en upload het script naar de USG
  • Maak het script uitvoerbaar: chmod +x tvroute.sh
  • Verplaats naar de juiste folder: mv tvroute.sh /config/scripts/post-config.d/tvroute.sh
  • Test het script: /config/scripts/post-config.d/tvroute.sh
  • Script wordt automatisch aangeroepen door cronjob die is ingesteld staat in gateway.config.json

    Opmerking: bestanden op de USG in de map /config worden niet overschreven na een herstart of het opnieuw provisionen.

8 Test de installatie

Start/herstart de TV ontvanger en test met name of de on-demand services werken. Direct na het starten van de ontvanger kan er een lichte vertraging de beelden zitten. Uiteraard beschikbaarheid van internet ook testen.

Gelukt? Dan lekker op de bank ploffen en goed kijken of alles blijft werken 😉

Controleopties op de USG

Logbestand: less /var/log/messages
Controle of IP adressen goed op de interface staat: show dhcp client leases
Controle van interface: show ip multicast interfaces
Controle multicast forward cache: show ip multicast mfc
Controle of script nog in cronjob staat: configure en daarna show system task-scheduler Hier komt “task updateIPTVroute” met de rest van de taak op terug
Controle van de running config op de USG: mca-ctrl -t dump-cfg

Troubleshooting

Televisiebeeld bevriest na een paar seconden en de melding dat er een probleem met de tv ontvanger is verschijnt in beeld -> herstart USG
IPTV niet stabiel: beeld stopt of hapert -> gebruik eth2 aansluiting op USG (zie reactie Olof op 30-08-2020)
Problemen met next-hop IP: controleer het actuele next-hop ip (zie stap 3) en wijzig dat in de config.gateway.json op de controller

Bronnen

https://forum.telfort.nl/randapparatuur-272/werkend-glasvezelinternet-en-iptv-op-ubiquiti-unifi-usg-router-zonder-experiabox-72204/index2.html
https://github.com/basmeerman/unifi-usg-kpn
https://kriegsman.io/
https://jsonlint.com/ (controle json file)

Revisie

21-1-19: Pagina aangemaakt

20-05-19: Commando stap 3 geupdate

27-5-2019: Via mail een suggestie ontvangen van een gebruiker die het op deze manier werkend kreeg:

LAN Inrichten – JSON bestand aanmaken met tijdelijk next-hop IP adres (10.240.34.1) – USG herstarten – via USG next-hop IP adres bepalen en juiste IP adres wijzigen in JSON configuratie – USG en decoder herstarten – klaar

28-7-2020: pad naar script in stap 7 aangepast – thanks Marc van Zutphen:  /config/scripts/post.config.d/tvroute.sh -> /config/scripts/post-config.d/tvroute.sh
Controleoptie voor updatescript toegevoegd

1-8-2020: Controleoptie voor actuele configuratie op USG toegevoegd

11-8-2020: Instellen van cronjob voor tvroute.sh script verwijderd en toegevoegd in config.gateway.json configuratie. Hierdoor wordt de taak automatisch toegevoegd in de USG.
Commando in stap 3 om actueel next-hop ip op te halen aangepast
Revisie tvroute.sh script gepost

30-08-2020: Troubleshooting: issue met instabiliteit toegevoegd

18 gedachten over “Routed TV met Ubiquity UniFi apparatuur

  • 30 augustus 2020 om 09:25
    Permalink

    Met alle tips hierboven, heb ik IPTV niet stabiel gekregen. Schijnbaar is er iets veranderd bij Telfort. Het beeld stopt naar een random tijd en hapert af en toe.
    De oplossing die voor mij heeft gewerkt (en voor veel andere ook zo te lezen bij Tweakers): Gebruik de 3e interface op je USG voor IPTV (eth2). De configuratie aanpassing is minimaal. Ze IGMP proxy uit voor eth1 en aan voor eth2

    },
    “protocols”: {
    “igmp-proxy”: {
    “interface”: {
    “eth0”: {
    “role”: “disabled”,
    “threshold”: “1”
    },
    “eth0.4”: {
    “alt-subnet”: [
    “0.0.0.0/0”
    ],
    “role”: “upstream”,
    “threshold”: “1”
    },
    “eth1”: {
    “alt-subnet”: [
    “0.0.0.0/0”
    ],
    “role”: “disabled”
    },
    “eth2”: {
    “alt-subnet”: [
    “0.0.0.0/0”
    ],
    “role”: “downstream”,
    “threshold”: “1”
    }
    }

    Hoop dat dit helpt voor de mensen met dezelfde issues.

    Beantwoorden
    • 30 augustus 2020 om 20:20
      Permalink

      Hoi Olof, Dank voor je reactie en bijdrage! Heb er hier geen last van maar voor anderen inderdaad een extra optie om te proberen bij problemen. Ik zet het erbij bij troubleshooting.

      Beantwoorden
      • 4 september 2020 om 13:58
        Permalink

        Ja, klopt. Op die manier had ik het geconfigureerd. Alleen werkte het daarna nog steeds niet stabiel. Met hardware offloading uit ging het aardig goed, maar zodra ik hardware offloading ging doen, zwart beeld. Uiteindelijk was bij mij de final oplossing om echt de IGMP-proxy voor eth1 uit te zetten (role : disabled). Daarna probleem opgelost en kan ik ook weer hardware offloading aan zetten zonder issues.
        Draait tot op heden nog steeds probleemloos.

        Beantwoorden
      • 4 september 2020 om 14:05
        Permalink

        De config die ik zelf nu live heb draaien.

        {
        “firewall”: {
        “source-validation”: “strict”
        },
        “interfaces”: {
        “ethernet”: {
        “eth0”: {
        “description”: “eth0 – WAN”,
        “vif”: {
        “4”: {
        “mac”: “5C:DC:96:D9:44:C9”,
        “address”: [
        “dhcp”
        ],
        “description”: “eth0.4 – IPTV”,
        “dhcp-options”: {
        “client-option”: [
        “send vendor-class-identifier "IPTV_RG";”,
        “request subnet-mask, routers, rfc3442-classless-static-routes;”
        ],
        “default-route”: “no-update”,
        “default-route-distance”: “210”,
        “name-server”: “no-update”
        },
        “ip”: {
        “source-validation”: “loose”
        }
        },
        “34”: {
        “mac”: “5C:DC:96:D9:44:C8”,
        “description”: “eth0.34 – Internet”,
        “firewall”: {
        “in”: {
        “name”: “WAN_IN”
        },
        “local”: {
        “name”: “WAN_LOCAL”
        },
        “out”: {
        “name”: “WAN_OUT”
        }
        },
        “address”: [
        “dhcp”
        ],
        “dhcp-options”: {
        “default-route”: “update”,
        “name-server”: “update”,
        “default-route-distance”: “1”
        }
        }
        }
        },
        “eth1”: {
        “description”: “eth1 – LAN”,
        “firewall”: {
        “in”: {
        “name”: “LAN_IN”
        },
        “local”: {
        “name”: “LAN_LOCAL”
        },
        “out”: {
        “name”: “LAN_OUT”
        }
        }
        },
        “eth2”: {
        }
        },
        “loopback”: {
        “lo”: “””
        }
        },
        “protocols”: {
        “igmp-proxy”: {
        “interface”: {
        “eth0”: {
        “role”: “disabled”,
        “threshold”: “1”
        },
        “eth0.4”: {
        “alt-subnet”: [
        “0.0.0.0/0”
        ],
        “role”: “upstream”,
        “threshold”: “1”
        },
        “eth1”: {
        “alt-subnet”: [
        “0.0.0.0/0”
        ],
        “role”: “disabled”
        },
        “eth2”: {
        “alt-subnet”: [
        “0.0.0.0/0”
        ],
        “role”: “downstream”,
        “threshold”: “1”
        }
        }
        },
        “static”: {
        “interface-route”: {
        “0.0.0.0/0”: {
        “next-hop-interface”: {
        “eth0.34”: {
        “distance”: “1”
        }
        }
        }
        },
        “route”: {
        “213.75.112.0/21”: {
        “next-hop”: {
        “10.218.108.1”: “””
        }
        }
        }
        }
        },
        “port-forward”: {
        “auto-firewall”: “enable”,
        “hairpin-nat”: “enable”,
        “lan-interface”: [
        “eth1”
        ],
        “wan-interface”: “eth0.34”
        },
        “service”: {
        “nat”: {
        “rule”: {
        “5000”: {
        “description”: “MASQ corporate_network to IPTV network”,
        “destination”: {
        “address”: “213.75.112.0/21”
        },
        “log”: “disable”,
        “outbound-interface”: “eth0.4”,
        “protocol”: “all”,
        “type”: “masquerade”
        },
        “6001”: {
        “description”: “MASQ corporate_network to WAN”,
        “log”: “disable”,
        “outbound-interface”: “eth0.34”,
        “protocol”: “all”,
        “source”: {
        “group”: {
        “network-group”: “corporate_network”
        }
        },
        “type”: “masquerade”
        },
        “6002”: {
        “description”: “MASQ remote_user_vpn_network to WAN”,
        “log”: “disable”,
        “outbound-interface”: “eth0.34”,
        “protocol”: “all”,
        “source”: {
        “group”: {
        “network-group”: “remote_user_vpn_network”
        }
        },
        “type”: “masquerade”
        },
        “6003”: {
        “description”: “MASQ guest_network to WAN”,
        “log”: “disable”,
        “outbound-interface”: “eth0.34”,
        “protocol”: “all”,
        “source”: {
        “group”: {
        “network-group”: “guest_network”
        }
        },
        “type”: “masquerade”
        }
        }
        }
        },
        “system”: {
        “task-scheduler”: {
        “task”: {
        “updateIPTVroute”: {
        “executable”: {
        “path”: “/config/scripts/post-config.d/tvroute.sh”
        },
        “interval”: “10m”
        }
        }
        }
        }
        }

        Beantwoorden
  • 10 augustus 2020 om 21:48
    Permalink

    Hoi Maarten,

    Hartelijk dank voor deze config! Het werkt nu al een maand of 3 vlekkeloos bij mij. Maar goed, als echte hobbyist wil ik toch weer wat nieuws proberen… 🙂

    Ik probeer op de USG een tweede LAN op te zetten via de LAN 2 poort (10-net) . Ik probeer dit via de Controller software, maar dat lukt niet. Ik heb het gevoel dat deze json file tijdens het provisionen de instellingen van de Unifi controller overschrijft.

    Wat is jouw idee hierbij? Zou het bijvoorbeeld werken als ik uit jouw json file de regels 52-70 (van eth1) kopieer en aanpas om daaronder eth2 te configureren?

    Of haal ik daarmee meer overhoop?

    Groeten,

    Christian

    Beantwoorden
    • 10 augustus 2020 om 22:00
      Permalink

      Hoi Christian,

      In de huidige config.gateway.json staat eth2 gedefinieerd:


      "eth2": {
      "disable": "''",
      "duplex": "auto",
      "speed": "auto"
      }

      Hij pakt de basisinstellingen uit config.gateway.json met daarover de overige instellingen die je in de GUI doet. Dus je kunt de instellingen maken in config.gateway.json of juist de hele configuratie van eth2 weghalen en via de GUI oppakken.

      Succes, ben benieuwd!

      Beantwoorden
  • 28 juli 2020 om 20:18
    Permalink

    Dank je voor je duidelijk uitleg, het heeft maanden goed gewerkt. Maar de laatste twee weken werkt het niet goed meer en krijg telkens de melding dat ik van zender moet veranderen om weer te kunnen kijken.
    Ik heb in cron nu elk minuut een herstart van de igm-proxy geplaatst en nu krijg ik de meldingen niet meer. Alleen hapert het beeld af en toe nu.

    Hebben meer gebruikers dit probleem?

    Twee kleine typos in je pagina:

    Verplaats naar de juiste folder: mv tvroute.sh /config/scripts/post.config.d/tvroute.sh
    Test het script: /config/scripts/post.config.d/tvroute.sh

    post.config.d moet post-config.d zijn.

    Beantwoorden
    • 28 juli 2020 om 20:58
      Permalink

      Dank voor je aanvulling Marc, ik heb de pagina geupdate zodat de typos eruit zijn. Enige ervaring die ik heb bij de melding “wisselen van zender” was bij het updaten van apparatuur. De switch na de USG booten gaf toen wel dit issue. Tegenwoordig update/herstart ik de USG als laatste en dat gaat (tot nu toe) steeds goed. Wie weet heeft iemand anders inderdaad tips.

      Beantwoorden
      • 3 augustus 2020 om 21:05
        Permalink

        Het lijkt erop dat telfort de boel aan het aanpassen is geweest.
        Sinds vrijdavond draait alles weer zonder haperingen, mijn herstart van de IGMP-proxy is ook niet meer nodig en heb ik weer verwijderd.

        Beantwoorden
    • 11 augustus 2020 om 17:05
      Permalink

      Ik heb precies hetzelfde, maanden goed gewerkt en nu haperingen. Restarten van de igmp-proxy helpt even maar gaat snel al weer terug in haperend patroon. Heb van ellende vandaag mijn experia er weer op gezet….maar dat kan natuurlijk niet zo blijven. ben ook erg benieuwd wat dit kan zijn

      Beantwoorden
  • 26 juli 2020 om 11:09
    Permalink

    Bedankt voor de goede uitleg.
    Via deze uitleg is het mij gelukt om telfort glasvezel internet werkend te krijgen en ook iptv werkt.
    Helaas valt iptv echter wel uit na een paar uur / een dag.

    Voordat ik de next hop kon krijgen moest ik eerst het script activeren en de usg een keer rebooten. Daarna kreeg ik de next hop te zien.
    Deze netjes ingevuld en de task-scheduler geconfigureerd zodat iedere 10 minuten de next hop gecontroleerd wordt.
    Na een dag werkt iptv echter niet meer. Als ik controleer of de task scheduler nog actief is krijg ik het volgende:

    configure
    show system task-scheduler

    Resultaat: Configuration under specified path is empty.

    Hoe kan ik de iptv zo configureren dat het blijft werken? 🙂

    Beantwoorden
    • 27 juli 2020 om 17:30
      Permalink

      @Purtzer, dit issue is onderzocht:

      – Aanroepen van het tvroute script (cronjob) zit nu verwerkt in het config.gateway.json bestand. Actuele config op de USG kun je ophalen via mca-ctrl -t dump-cfg en configure -> show system task-scheduler Deze taak blijft hier nu consequent zichtbaar.
      – tvroute script is geupdate en werkt weer
      – Advies om bij problemen je actuele next-hop IP op te vragen en dit in je config.gateway.json bestand op je controller aan te passen. Dan krijgt hij na het provisionen al het goede ip adres in de config op de USG zonder dat het daarna eerst aangepast hoeft te worden door het tvroute script.

      Hoop dat hiermee je probleem is opgelost.

      Beantwoorden
  • 22 juli 2020 om 08:42
    Permalink

    Bedankt voor je goede samenvatting! Ik had dezelfde bronnen gevonden en was niet in staat een correcte JSON te bouwen, jij wel. Dank je voor het delen.

    Ik kwam uit een bestaande config en liep (daarom?) tegen het ontbreken van de next-hop aan. De stap met het tijdelijke next-hop, provisioning dan de echte next-hop vaststellen en dan nogmaals de json provisionen deed de truuk.

    Wel nog een vraag; ik zie dat je in het LAN de IGMP snooping uit laat staan. Aangezien de kern van IPTV multicasting zie ik mijn switches liefst het multicast verkeer niet forwarden als dat niet nodig is.

    Beantwoorden
    • 27 juli 2020 om 15:53
      Permalink

      Hoi Rene,

      Dank voor je feedback, mooi dat het werkt! De configuratie van IGMP zit in het configuratiebestand onder protocols. Enable IGMP Snooping aanzetten in de GUI o.b.v de huidige instellingen resulteert bij mij in een werkende IPTV maar zonder on-demand services. Op de siwtchpoorten heb ik nog geen last van flooding gehad, stats laten ook geen bijzonderheden zien.

      Beantwoorden
  • 1 oktober 2019 om 13:09
    Permalink

    Hallo Erik, zou theoretisch moeten kunnen. Pad in stap 5 op de Cloud Key zou /srv/unifi/data/sites/default/ moeten zijn. Type TV Ontvanger lijkt me geen probleem, principe zal hetzelfde zijn. Wellicht kun je je ervaringen delen?

    Beantwoorden
  • 30 september 2019 om 17:52
    Permalink

    Hallo,

    Allereerst bedankt voor het delen van deze heldere uitleg.

    Ik wil dit ook zo gaan instellen en heb nagenoeg dezelfde apparatuur. Enige verschil is dat ik een cloud key gebruik voor de controller. En dat ik een andere TV ontvanger heb, namelijk een Arris VIP2952. Maakt dat uit of kan ik het met deze uitleg ook gewoon zo instellen met mijn huidige apparatuur?

    Alvast bedankt

    Mvg

    Erik van der Horst

    Beantwoorden

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *