OpenWRT installeren op een Fritz!repeater 3000 (Deel 2)

Deel 2 van mijn queste om een uniform netwerk te realiseren met routers/repeaters van 3 verschillende fabrikanten, dit door OpenWRT op de routers/repeaters te installeren. OpenWRT is een open source operating systeem gebaseerd op Linux die zeer geschikt is voor routers ed.
 

In deze tutorial ga ik ervan uit dat je reeds een TFTP server toegevoegd hebt aan het netwerk, anders verwijs ik je graag naar Stap 1. van mijn tutorial OpenWrt installeren op een Linksys RE6500. Wel download ik de benodigde image-files. Flash de Fritz!repeater 3000 met OpenWRT en configureer ik OpenWRT zodanig dat de Fritz!repeater zich weer gedraagt als een accesspoint in bridging modus.

Stap 1. U-boot environment installeren op Fritz!repeater 3000

Door de U-boot environment in het memory van de repeater te plaatsen verander je aantal instellingen in je repeater zodat de repeater jou TFTP-server aanspreekt voor het downloaden van firmware. Dit doe je als volgt:

Download het python script eva_romboot.py, en de uboot voor de Fritz!repeater 3000 van GITHUB

cd /tmp
mkdir Fritz3000
cd Fritz3000
wget https://raw.githubusercontent.com/sown/openwrt/master/scripts/flashing/eva_ramboot.py
chmod 755 eva_ramboot.py
wget https://downloads.openwrt.org/releases/19.07.0/targets/ipq40xx/generic/u-boot-fritz3000/uboot-fritz3000.bin

Tijdens het boot-proces van de Fritz!repeater 3000 heeft de repeater (tijdelijk) het default IP-address 192.168.178.1. Het is dus zaak om de ethernetadapter van je laptop/desktop tijdelijk in hetzelfde subnet te laten opereren. Geeft daarom je ethernetadapter het statische IP-address 192.168.178.10 met subnetmask 255.255.255.0. Je kunt dit vanaf de commandline doen, of via de instellingen van je Linux systeem. Vanaf commandline:

Achterhaal eerst je ethernet device met ip -a:

syds@test:/tmp/Fritz3000$ ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: enp2s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
    link/ether 0c:9d:92:30:0f:41 brd ff:ff:ff:ff:ff:ff
3: wlp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 80:c5:f2:ea:b3:69 brd ff:ff:ff:ff:ff:ff
    inet 192.168.2.115/24 brd 192.168.2.255 scope global dynamic noprefixroute wlp3s0
       valid_lft 2946sec preferred_lft 2946sec
    inet6 fe80::6a46:a0e1:cc3a:1648/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

In dit geval gebruik ik de ethernetadapter van de laptop, dus enp2s0. Hier voeg ik tijdelijk het ip-address 192.168.178.10 met subnet-mask 255.255.255.0 aan toe:

syds@test:/tmp/Fritz3000$ sudo ip addr add 192.168.178.10/24 dev enp2s0

Nu gaan we de uboot laden in de Fritz!repeater 3000. Haal de Fritz!repeater 3000 los van je netwerk, en haal de stekker uit het stopcontact. Sluit een ethernetkabel aan tussen je laptop/desktop en één van de poorten van je repeater. Stop nu de stekker in het stopcontact en zodra je het link-ledje van je ethernetadapter van je laptop/desktop begint te knipperen (meestal na zo’n 2 tot 5 seconden), voer je onderstaand commando uit.

syds@test:/tmp/Fritz3000$ ./eva_ramboot.py --offset 0x85000000 192.168.178.1 uboot-fritz3000.bin

Zodra je onderstaand bericht ziet staan, en het python script afgesloten wordt en je op de commandoprompt terugkomt, kun je verder met de volgende stap.

syds@test:/tmp/Fritz3000$ ./eva_ramboot.py --offset 0x85000000 192.168.178.1 uboot-fritz3000.bin 
> SETENV memsize 0x00080000 
< 200 SETENV command successful 
> SETENV kernel_args_tmp mtdram1=0x85000000,0x88000000 
< 200 SETENV command successful 
> MEDIA SDRAM 
< 200 Media set to MEDIA_SDRAM
syds@test:/tmp/Fritz3000$

Stap 2. IP-address TFTP-server aanpassen

Door de uboot in de Fritz!repeater 3000 te laden, zoekt deze een TFTP server op het subnet 192.168.1.255. Het is dus zaak om de TFTP-server een IP-address in dit subnet te geven, volgens de beschrijving op github moet dit 192.168.1.70 met subnetmask 255.255.255.0 zijn. Ik verwijder eerst het tijdelijk IP-address 192.168.178.10, en voeg daarna het nieuwe IP-address toe.

syds@test:/tmp/Fritz3000$ sudo ip addr del 192.168.178.10/24 dev enp2s0
syds@test:/tmp/Fritz3000$ sudo ip addr add 192.168.1.70/24 dev enp2s0

Stap 3. Benodigde OpenWRT images downloaden

De TFTP-server gebruikt de directory /var/lib/tftpboot voor het up- en downloaden van bestanden. Plaats hier de image files m.b.v. de commando’s:

cd /var/lib/tftpboot
sudo wget https://downloads.openwrt.org/releases/19.07.0/targets/ipq40xx/generic/openwrt-19.07.0-ipq40xx-generic-avm_fritzrepeater-3000-initramfs-fit-uImage.itb
sudo wget https://downloads.openwrt.org/releases/19.07.0/targets/ipq40xx/generic/openwrt-19.07.0-ipq40xx-generic-avm_fritzrepeater-3000-squashfs-sysupgrade.bin

Hernoem de file openwrt-19.07.0-ipq40xx-generic-avm_fritzrepeater-3000-initramfs-fit-uImage.itb naar FRITZ3000.bin. Hier zoekt de Fritz!repeater 3000 namelijk naar.

sudo mv openwrt-19.07.0-ipq40xx-generic-avm_fritzrepeater-3000-initramfs-fit-uImage.itb FRITZ3000.bin

Stap 4. De Fritz!repeater 3000 flashen met OpenWRT

Om controle te houden op het proces volgen we de /var/log/syslog file, daar schrijft de TFTP-server namelijk zijn logging naar toe. In een terminal venster typen we:

tail -f /var/log/syslog

Als het goed is gaat de met uboot geladen Fritz!repeater nu automatisch z’n firmware ophalen bij je TFTP-server, in je terminal venster zie in de syslog de volgende regel verschijnen:

Jul 25 00:59:12 test in.tftpd[8733]: RRQ from 192.168.1.1 filename FRITZ3000.bin

Tijdens het downloaden en in memory plaatsen van de image-file knippert de groene led van de Fritz!repeater 3000 langzaam. Daarna reboot de Fritz!repeater 3000 en gaat de led vast branden. Opdat moment draait een minimale versie van OpenWRT op de Fritz!repeater 3000. Je kunt vervolgens met ssh een verbinding opzetten naar de Fritz!repeater 3000. Als je eerder een andere router/repeater hebt geflashed met OpenWRT, dan staat de ssh-key van 192.168.1.1 nog in je ssh-cache, verwijder deze eerst.

sudo ssh-keygen -R 192.168.1.1
sudo ssh -l root 192.168.1.1

Je krijgt dan het volgende scherm te zien:

Verander als eerste het root password met:

root@OpenWrt:~# passwd
Changing password for root
New password:

Mount daarna het root file system:

mount_root

We gaan de uboot-fritz3000.bin file m.b.v. scp in de directory / plaatsen. Open een tweede terminal venster op je laptop en geef daar de commando’s:

syds@test:/ cd /tmp/Fritz3000
syds@test:/tmp/Fritz3000$ scp uboot-fritz3000.bin root@192.168.1.1:/

Ga terug naar je eerste terminal venster (met daarin OpenWRT op je Fritz!repeater 3000). We gaan nu de Bootloader (uboot-fritz3000.bin) naar beide kernel partities wegschrijven en de AVM filesystem partities weggooien.

mtd write /uboot-fritz3000.bin uboot0
mtd write /uboot-fritz3000.bin uboot1

ubirmvol /dev/ubi0 --name=avm_filesys_0
ubirmvol /dev/ubi0 --name=avm_filesys_1

Vervolgens gaan we de sysupgrade-file m.b.v. scp in de directory / plaatsen. Ga naar je tweede terminal venster op je laptop en geef daar het commando:

syds@test:/ cd /var/lib/tftpboot
syds@test:/var/lib/tftpboot$ scp openwrt-19.07.0-ipq40xx-generic-avm_fritzrepeater-3000-squashfs-sysupgrade.bin root@192.168.1.1:/

Ga terug naar je eerste terminal venster (met daarin OpenWRT op je Fritz!repeater 3000). We gaan nu de definitieve OpenWRT image installeren met sysupgrade:

sysupgrade -n /openwrt-19.07.0-ipq40xx-generic-avm_fritzrepeater-3000-squashfs-sysupgrade.bin

Commencing upgrade. 
Closing all shell sessions. 
Connection to 192.168.1.1 closed by remote host. 
Connection to 192.168.1.1 closed.

Hetzelfde ritueel, langzaam knipperende led tijdens het laden van de definitieve image, reboot en daarna een vast brandende led ten teken dat hij klaar en operationeel is.

Stap 5. OpenWRT op Fritz!repeater 3000 configureren

Ga in je browser naar http://192.168.1.1, de LuCI webinterface van OpenWRT wordt getoond.

Klik op Login, en pas als eerste het password van root aan via System, Administration:

De volgende stap is de Fritz!repeater 3000 een IP-address van je DHCP server laten verkrijgen, kies Network, Interfaces:

Selecteer de LAN-interface “br-lan”, en klik op Edit:

Kies bij Protocol voor “DHCP client”, en vul bij Hostname to send when requesting DHCP een zinvolle naam in, en klik op Save:

Klik daarna op Save & Apply, de Fritz!repeater gaat nu rebooten. Na enige tijd verschijnt onderstaande melding, klik op Apply unchecked

De Fritz!repeater 3000 krijgt nu een nieuw IP-address van je DHCP-server. Maar uiteraard moet je repeater daarvoor eerst weer aan je netwerk hangen. Haal daarom de ethernetkabel uit je laptop/desktop en zet de repeater op je beoogde locatie en sluit hem daar aan op het netwerk. Achterhaal daarom in je router cq op je DHCP server wat het nieuwe IP-address van je repeater wordt. In mijn geval is dat 192.168.2.118.

Ga vervolgens in je browser naar het IP-address van je Fritz!repeater 3000, in mijn geval dus 192.168.2.118, of wel http://192.168.2.118 en log in met root en het password wat je eerder gekozen hebt.

Als laatste stap gaan we nu de Wireless instellingen aanpassen van je 2.4Ghz en 5Ghz netwerk. Kies voor Network, Wireless:

Radio0 staat voor je 5Ghz netwerk, en Radio1 voor je 2.4Ghz netwerk. Ik heb er voor gekozen om mijn 5Ghz netwerk een unieke SSID te geven, en mijn 2.4Ghz netwerk een SSID die op alle routers/repeaters voorkomt. Zo kan ik bewust met mijn laptop of telefoon het 5Ghz netwerk benutten, terwijl alle domotica devices zelf kiezen welke router/repeater het sterkste signaal geeft.

Kies onder radio0 de regel die begint met SSID:, en klik op Edit:

Kies onder het tab General Setup voor Mode: Access Point, kies een zinvolle naam voor ESSID, de rest kun je default laten staan. Klik op Save.

Kies onder het tab Wireless Security bij Encryption voor WPA2-PSK, en vul bij Key het wachtwoord van je draadloos netwerk in, laat de rest default en klik op Save. Je keert nu terug in het vorige scherm, doe hetzelfde voor de regel die begint met SSID onder radio1. Klik daarna op Save & Apply.

Tot slot nog de NTP-server configureren t.b.v. de tijd synchronisatie. Kies voor System, System, en het tab General settings.

Toelichting:

Hostname: zinvolle naam

Timezone: Europe/Amsterdam (CEST)

Klik vervolgens op het tab Time Synchronization

Toelichting:

Enable NTP client: aangevinkt

Use DHCP advertised servers: aangevinkt

NTP server candidates kan in principe leeg of default blijven, omdat de optie Use DHCP advertised servers aangevinkt staat. Dit gaat er wel vanuit dat je je DHCP server dusdanig hebt geconfigureerd dat hij de NTP server adressen meeservereerd in het DHCP bericht. Dat is in mijn geval wel het geval. Toch maar voor de zekerheid het NTP server adres ingevuld van mijn lokale NTP server bij NTP server candidates, kan geen kwaad lijkt me.

Je bent nu klaar, test nu met je laptop/telefoon of je een draadloze verbinding met de Fritz!repeater krijgt en bijv. met je browser www.google.com kunt bereiken.

Aanvulling 3 augustus 2022

Mijn accesspoint geupdated naar versie 21.02. Nieuw in deze versie is de ondersteuning van HTTPS. Hieronder de aanvullende configuratiestappen beschreven voor het activeren van SSL op het accesspoint.

Stap 5. Je Openwrt accesspoint beveiligen met SSL/HTTPS

Maak met Putty een ssh verbinding met je accesspoint, login als root, installeer de volgende packages en reboot daarna het apparaat (als je niet reboot, dan ontbreekt het services-tab in LuCI, die je in een volgende stap nodig hebt)

opkg update && opkg install openssl-util luci-app-uhttpd
reboot

Open met vi of je favoriete teksteditor de file /etc/ssl/myconfig.conf, dus

vi /etc/ssl/myconfig.conf

en kopieer onderstaande inhoud in deze file

[req]
distinguished_name  = req_distinguished_name
x509_extensions     = v3_req
prompt              = no
string_mask         = utf8only

[req_distinguished_name]
C                   = US
ST                  = VA
L                   = SomeCity
O                   = OpenWrt
OU                  = Home Router
CN                  = luci.openwrt

[v3_req]
keyUsage            = nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage    = serverAuth
subjectAltName      = @alt_names

[alt_names]
DNS.1               = luci.openwrt
IP.1                = 192.168.1.1

Verander onder het kopje [req_distinguished_name] de waarden achter C, ST, L, O en OU naar voor jou zinvolle waarden. Verander achter CN de waarde luci.openwrt in de FQDN van jou accesspoint, in mijn geval accesspoint2.sydspost.nl, zet exact dezelfde waarde onder het kopje [alt_names] bij DNS.1. Verander achter IP.1 het IP-address in het IP-address van jou accesspoint, in mijn geval 192.168.2.135. Zorg ervoor dat het accesspoint van jou DHCP-server een vast (static) IP_address krijgt. Mijn myconfig.conf ziet er na gemaakte aanpassingen zo uit:

root@accesspoint2:/etc/ssl# cat myconfig.conf
[req]
distinguished_name  = req_distinguished_name
x509_extensions     = v3_req
prompt              = no
string_mask         = utf8only

[req_distinguished_name]
C                   = NL
ST                  = FR
L                   = Berltsum
O                   = SydsPost
OU                  = Accesspoint2
CN                  = accesspoint2.sydspost.nl

[v3_req]
keyUsage            = nonRepudiation, digitalSignature, keyEncipherment
extendedKeyUsage    = serverAuth
subjectAltName      = @alt_names

[alt_names]
DNS.1               = accesspoint2.sydspost.nl
IP.1                = 192.168.2.135

Ga naar de map /etc/ssl en voer onderstaande commando uit

cd /etc/ssl
openssl req -x509 -nodes -days 730 -newkey rsa:2048 -keyout mycert.key -out mycert.crt -config myconfig.conf

Openssl creëert nu twee files, namelijk mycert.key en mycert.crt. Open nu de webinterface LuCI van je accesspoint in een browser, negeer eventuele beveiligingsmeldingen. Log in als root, en ga naar het menu “Services” -> uHTTPd, het volgende scherm verschijnt:

Selecteer onder HTTPS Certificate (DER or PEM format) het net aangemaakt certificaat file /etc/ssl/mycert.crt, en onder HTTPS Private Key (DER or PEM format) de file /etc/ssl/mycert.key. Klik op “Save & Apply”

Ga terug naar je terminal venster (Putty) en herstart de webserver van LuCI met:

/etc/init.d/uhttpd restart

Om te waarborgen dat het certificaat en key file meegaan in de backup en restore, log in je browser opnieuw in als root binnen LuCI van je accesspoint en kies voor menu “System” -> “Backup / Flash Firmware”, het volgende scherm verschijnt:

Kies vervolgens voor het tab “Configuration” en voeg de twee files (/etc/ssl/mycert.crt en /etc/ssl/mycert.key) toe en klik op “Save”:

Ga terug naar je terminal (Putty) venster en kopieer de file mycert.crt naar je PC met scp.

scp mycert.crt pi@192.168.2.29:/tmp

Ik heb eerst de file met scp naar een andere linux box gekopieerd waar een FTP-server op geïnstalleerd staat. En vervolgens vanaf mijn windows PC met FTP de file overgehaald.

C:\Users\spost>ftp 192.168.2.29
Connected to 192.168.2.29.
220---------- Welcome to Pure-FTPd [privsep] [TLS] ----------
220-You are user number 1 of 50 allowed.
220-Local time is now 15:20. Server port: 21.
220-This is a private system - No anonymous login
220-IPv6 connections are also welcome on this server.
220 You will be disconnected after 15 minutes of inactivity.
200 OK, UTF-8 enabled
User (192.168.2.29:(none)): pi
331 User pi OK. Password required
Password:
230 OK. Current directory is /home/pi
ftp> binary
200 TYPE is now 8-bit binary
ftp> get /tmp/mycert.crt
200 PORT command successful
150 Connecting to port 55393
226-File successfully transferred
226 0.000 seconds (measured here), 5.16 Mbytes per second
ftp: 1383 bytes received in 0.00Seconds 1383.00Kbytes/sec.
ftp> bye
221-Goodbye. You uploaded 0 and downloaded 2 kbytes.
221 Logout.

Ik gebruik Chrome als browser, dus de hier onderstaande stappen gaan uit van Chrome. Andere browsers hebben vergelijkbare functionaliteit, maar met wellicht iets andere benamingen en stappen.

Ga binnen Chrome naar “Instellingen” -> “Privacy en beveiliging” -> “Beveiliging” -> “Certificaten beheren”, het volgende scherm verschijnt:

Klik op het tabblad “Vertrouwde basiscertificeringsinstanties”, het volgende scherm verschijnt:

Klik op “Importeren…”, klik op “Volgende” en het volgende scherm verschijnt:

Klik op “Bladeren…” en navigeer naar de map waarin je de file mycert.crt hebt opgeslagen, in mijn geval in c:\users\spost en klik op Volgende:

Verzeker je dat de optie “Alle certificaten in het onderstaand archief opslaan” is geselecteerd, en dat als “Certificaatarchief” “Vertrouwde basiscertificeringsinstanties” is gekozen (pas eventueel aan):

Klik vervolgens op “Volgende” en in het volgende overzichtsscherm op “Voltooien”. Als het goed is krijg je nu de melding “Het importeren is voltooid”

Sluit al je browservensters en browsers (niet alleen Chrome), en start Chrome opnieuw op. Als je nu de webinterface LuCI van je accesspoint opent zul je zien dat https geactiveerd (slotje) is en er geen beveiligingsmeldingen meer verschijnen

Geef een antwoord

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