OpenWRT flashen op een Linksys RE6500 Range extender (Deel 1)

Het is een lang gekoesterde wens van me om mijn KPN experiabox, Fritz!repeater 3000 en Linksys RE6500 Range extender te voorzien van een uniforme userinterface en functionaliteit. De oplossing lijkt in OpenWRT te liggen. Een open source operating systeem gebaseerd op Linux die zeer geschikt is voor routers ed.

Om het risico voor het bricken van de routers/accesspoints zo klein mogelijk te houden begin ik met het flashen van mijn Linksys RE6500 range extender. Deze is relatief goedkoop, dus als hij stuk gaat dan is de financiële schade niet al te groot.

In deze tutorial voeg ik eerst een TFTP server toe aan het netwerk, download ik de benodigde image-files. Flash de Linksys RE6500 met OpenWRT en configureer ik OpenWRT zodanig dat de Linksys zich weer gedraagt als een accesspoint in bridging modus.

Stap 1. TFTP server installeren en configureren

Hiervoor gebruik ik (wederom) mijn dual-boot laptop met daarop Ubuntu 5.3. Hierop installeer ik een TFTP server m.b.v. het commando:

sudo apt install tftpd-hpa

Het is handig om te weten of de Linksys de TFTP-server weet te vinden en de image files begint te downloaden. Daarom voegen we de opstartoptie –verbose toe aan de configuratiefile van de TFTP-server. Dit is de file /etc/default/tftpd-hpa. Voeg aan de regel TFTP_OPTIONS=”–secure” de optie –verbose toe:

# /etc/default/tftpd-hpa

TFTP_USERNAME="tftp"
TFTP_DIRECTORY="/var/lib/tftpboot"
TFTP_ADDRESS=":69"
TFTP_OPTIONS="--secure --verbose"

Herstart de TFTP-server met:

sudo systemctl restart tftpd-hpa

Stap 2. IP-address TFTP-server aanpassen

De Linksys RE6500 probeert bij iedere reboot automatisch connectie te maken met TFTP-server op het adres 192.168.1.100. Dit nog voordat hij van een DHCP-server een IP-address vraagt. Zelf heeft hij default het IP-address 192.168.1.1. Het is dus zaak om de TFTP-server het IP-address 192.168.1.100 met submask 255.255.255.0 te geven.

Achterhaal eerst je ethernet device met ip -a:

syds@test:/etc$ 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 mijn geval gebruik ik de WLAN-adapter van de laptop, dus wlp3s0. Hier voeg ik tijdelijk het ip-address 192.168.1.100 met subnet-mask 255.255.255.0 aan toe:

syds@test:/etc$ sudo ip addr add 192.168.1.100/24 dev wlp3s0

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 http://downloads.openwrt.org/releases/19.07.7/targets/ramips/mt7621/openwrt-19.07.7-ramips-mt7621-re6500-initramfs-kernel.bin
sudo wget http://downloads.openwrt.org/releases/19.07.7/targets/ramips/mt7621/openwrt-19.07.7-ramips-mt7621-re6500-squashfs-sysupgrade.bin

Hernoem de file openwrt-19.07.7-ramips-mt7621-re6500-initramfs-kernel.bin naar um_factory_fw.bin. Hier zoek de Linksys RE6500 namelijk naar.

sudo mv openwrt-19.07.7-ramips-mt7621-re6500-initramfs-kernel.bin um_factory_fw.bin

Je bent nu klaar om de Linksys RE6500 te flashen.

Stap 4. De Linksys RE6500 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

Sluit de Linksys RE6500 met een ethernet kabel aan op je switch of router, de zet hem aan. Hij begint dan direct de imagefile te downloaden, in je terminal venster zie in de syslog de volgende regel verschijnen:

Jul 24 17:50:35 test in.tftpd[5284]: RRQ from 192.168.1.1 filename um_factory_fw.bin

Tijdens het downloaden en in memory plaatsen van de image-file knippert de led van de Linksys RE6500 langzaam. Daarna reboot de Linksys RE6500 en gaat de led snel knipperen. Opdat moment draait OpenWRT op de Linksys RE6500 in “failsave-mode”. Om te voorkomen dat bij een reboot de Linksys RE6500 opnieuw de image file gaat downloaden en in memory laden, is het nu tijd om de TFTP-server uit te zetten. Dit doe je met het commando:

sudo systemctl stop tftpd-hpa

Je kunt vervolgens met ssh een verbinding opzetten naar de Linksys RE6500 met het commando:

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

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

scp openwrt-19.07.7-ramips-mt7621-re6500-squashfs-sysupgrade.bin root@192.168.1.1:/tmp

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

sysupgrade -v /tmp/openwrt-19.07.7-ramips-mt7621-re6500-squashfs-sysupgrade.bin

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

Stap 5. OpenWRT op Linksys RE6500 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 Linksys RE6500 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 klik op Save:

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

De Linksys RE6500 krijgt nu een nieuw IP-address van je DHCP-server. Achterhaal daarom in je router cq op je DHCP server wat het nieuwe IP-address van je Linksys RE6500 wordt. In mijn geval is dat 192.168.2.95

Reboot je laptop, het tijdelijke IP-address 192.168.1.1 wordt nu van je WLAN-adapter gehaald en deze krijgt weer een IP-address van je DHCP-server in het zelfde subnet als de Linksys RE6500.

Ga vervolgens in je browser naar het IP-address van je Linksys RE6500, in mijn geval dus 192.168.2.95, of wel http://192.168.2.95 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, plaats je Linksys RE6500 op een locatie waar je dat nodig acht en met je laptop/telefoon of je een draadloze verbinding met de Linksys RE6500 krijgt en bijv. met je browser www.google.com kunt bereiken.

In mijn volgende tutorial flash ik mijn Fritz!repeater 3000 met OpenWRT.

Aanvulling 4 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. Maar eerst nog even een probleempje oplossen na de update. Ik kon na de update namelijk geen wijzigingen aanbrengen in de configuratie middels de webinterface LuCI. Kreeg een foutmelding “XHR Timeout error” nadat ik op “Save & Apply” klikte. Gelukkig een bekend probleem en gemakkelijk oplosbaar. Open een terminal (Putty) venster, maak connectie met het accesspoint (192.168.1.1 !), en wijzig de instelling “http_keepalive” in de file /etc/config/utthpd, stel deze in op de waarde ‘0’

root@accesspoint3:~# vi /etc/config/uhttpd

Na de aanpassing ziet de file er als volgt uit:

config uhttpd 'main'
        list listen_http '0.0.0.0:80'
        list listen_http '[::]:80'
        list listen_https '0.0.0.0:443'
        list listen_https '[::]:443'
        option redirect_https '0'
        option home '/www'
        option rfc1918_filter '1'
        option max_requests '3'
        option max_connections '100'
        option cert '/etc/uhttpd.crt'
        option key '/etc/uhttpd.key'
        option cgi_prefix '/cgi-bin'
        list lua_prefix '/cgi-bin/luci=/usr/lib/lua/luci/sgi/uhttpd.lua'
        option script_timeout '60'
        option network_timeout '30'
        option http_keepalive '0'
        option tcp_keepalive '1'
        option ubus_prefix '/ubus'

config cert 'defaults'
        option days '730'
        option key_type 'ec'
        option bits '2048'
        option ec_curve 'P-256'
        option country 'ZZ'
        option state 'Somewhere'
        option location 'Unknown'
        option commonname 'OpenWrt'

Start de webserver opnieuw op met

root@accesspoint3:~# /etc/init.d/uhttpd restart

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@accesspoint3:~# cat /etc/ssl/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                  = Accesspoint3
CN                  = accesspoint3.sydspost.nl

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

[alt_names]
DNS.1               = accesspoint3.sydspost.nl
IP.1                = 192.168.2.86

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”

Laatste stap in het proces is de redirect van http naar https te activeren, open de file /etc/config/uhttpd in je terminal venster

vi /etc/config/uhttpd

Pas van de optie “option redirect_https” de waarde aan naar ‘1’, je file ziet er dan als volgt uit:

root@accesspoint3:/etc/ssl# cat /etc/config/uhttpd

config uhttpd 'main'
        list listen_http '0.0.0.0:80'
        list listen_http '[::]:80'
        list listen_https '0.0.0.0:443'
        list listen_https '[::]:443'
        option redirect_https '1'
        option home '/www'
        option rfc1918_filter '1'
        option max_requests '3'
        option max_connections '100'
        option cgi_prefix '/cgi-bin'
        list lua_prefix '/cgi-bin/luci=/usr/lib/lua/luci/sgi/uhttpd.lua'
        option script_timeout '60'
        option network_timeout '30'
        option http_keepalive '0'
        option tcp_keepalive '1'
        option ubus_prefix '/ubus'
        option cert '/etc/ssl/mycert.crt'
        option key '/etc/ssl/mycert.key'

config cert 'defaults'
        option days '730'
        option key_type 'ec'
        option bits '2048'
        option ec_curve 'P-256'
        option country 'ZZ'
        option state 'Somewhere'
        option location 'Unknown'
        option commonname 'OpenWrt'

Start vervolgens de webserver opnieuw op met:

root@accesspoint3:/etc/ssl# /etc/init.d/uhttpd restart

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 *