GL.iNet Firmware | 2.22 |
---|---|
Kernel | 3.18.27 |
OpenWrt | Chaos Calmer 15.05 |
LuCI | 15.05-54-gfd60055 |
CPU | Atheros AR9330 rev 1 |
RAM | 60 Mb |
Total Flash Storage | 16 Mb |
Free Flash Storage | 7.7 Mb |
Hardware potente, software free e open source quasi al 100% (OpenWrt)
Dopo un mese di funzionamento 24 ore su 24 posso dire che il router non ha dato alcun problema di affidabilità e funzionamento. L'ho acquistato per sostituire una vecchia Fonera che aveva iniziato a bloccarsi ogni qualche giorno.
L'oggetto è molto piccolo, compresa l'antenna, ma non ha problemi a coprire il mio appartamento di circa 60 mq. Eventualmente l'antenna è sostituibile.
Il punto di forza di questo oggetto è il software OpenWrt installato. Si tratta della versione Chaos Calmer 15.05 comprensiva di interfaccia web di amministrazione LuCI. Le personalizzazioni effettuate da GL.iNet sono poche si possono disabilitare grazie all'accesso root (disponibile come nella distribuzione OpenWrt originale).
Ho usato altri apparati dove si poteva installare OpenWrt con vari trucchi, ad esempio il TP-LINK TL-WR741ND e il Linksys WRT-54G, ma questo router è decisamente superiore. Anzitutto perché OpenWrt è installato di fabbrica, poi perché ha 64 Mb di RAM e 16 Mb di flash (sono solo 16 Mb RAM e 4 Mb di flash sul TP-LINK e sul Linksys). La configurazione di default comprende l'interfaccia LuCI e il pacchetto OpenVPN e restano altri 7.7 Mb di flash libera per installare altri pacchetti.
Tra le varie funzioni custom di GL.iNet c'è una interfaccia web di amministrazione semplificata, una funzione di DNS dinamico che si appoggia a dyndns.org e myip.com.tw, la funzione di ripetitore, l'eventuale aggiornamento del firmware automatico.
Grazie all'accesso root è possibile disabilitare le funzioni non richieste modificando i file /etc/rc.local e /etc/hotplug.d/iface/23-glddns. Il router è configurato per installare pacchetti dal repository http://www.gl-inet.com/openwrt/ar71xx/2.25, i più paranoici potranno utilizzare invece uno dei mirror ufficiali OpenWrt.
Oltre alle due porte Ethernet (WAN e LAN) c'è anche uno switch hardware a due posizioni (probabilmente sarebbero tre posizioni, se si smonta il case o si allarga il foro permettendo così lo slittamento completo dello switch). Con la versione standard del software lo switch non ha alcuna funzione, ma gli smanettoni possono associare l'esecuzione di uno script all'azionamento dello stesso.
Sono disponibili anche alcune linee GPIO, utili sempre agli smanettoni per collegare altri dispositivi (ad esempio un RTC clock che imposti l'ora di sistema anche in assenza di internet).
L'unica nota negativa è l'assenza dell'alimentatore, che va acquistato a parte (connettore micro USB 5 V, come i caricabatteria dei telefonini moderni). Speriamo che l'apparecchio sia affidabile anche nel tempo.
Filesystem Size Used Available Use% Mounted on rootfs 8.1M 368.0K 7.7M 4% / /dev/root 6.5M 6.5M 0 100% /rom tmpfs 29.8M 972.0K 28.9M 3% /tmp /dev/mtdblock5 8.1M 368.0K 7.7M 4% /overlay overlayfs:/overlay 8.1M 368.0K 7.7M 4% / tmpfs 512.0K 0 512.0K 0% /dev
total used free shared buffers cached Mem: 61052 39044 22008 972 5552 15272 -/+ buffers/cache: 18220 42832 Swap: 0 0 0
cat /proc/mtd dev: size erasesize name mtd0: 00040000 00010000 "u-boot" mtd1: 00010000 00010000 "u-boot-env" mtd2: 00fa0000 00010000 "firmware" mtd3: 00130000 00010000 "kernel" mtd4: 00e70000 00010000 "rootfs" mtd5: 007e0000 00010000 "rootfs_data" mtd6: 00010000 00010000 "art"
Collegato alla rete locale tramite la porta WAN, il router chiede un indirizzo al server DHCP. Sull'indirizzo ottenuto risponde al PING e risulta aperto solo sulla porta 83/TCP. Su tale porta c'è in ascolto un server HTTP con la procedura di inizializzazione che tuttavia non funziona. Infatti dopo averla completata non si ha accesso alla configurazione, ma viene presentata nuovamente la stessa procedura.
Collegato alla rete locale tramite porta LAN il router non usa DHCP ma ha assegnato l'indirizzo predefinito 192.168.8.1, le porte aperte risultano:
22/tcp | ssh | Impossibile accedere. |
---|---|---|
23/tcp | telnet | Accesso root senza password. |
53/tcp | domain | dnsmasq |
80/tcp | http | lighttpd |
83/tcp | mit-ml-dev | lighttpd |
139/tcp | netbios-ssn | smbd |
445/tcp | microsoft-ds | smbd |
La procedura web di inizializzazione ha funzionato solo richiamata dalla porta 80, lato LAN. Consiste di tre passaggi: scelta della lingua (cinese o inglese), fuso orario e password:
Al termine della procedura first-time:
Oltre all'interfaccia di configurazione custom di GL.iNet è disponibile anche l'interfaccia LuCI standard di OpenWrt, è sufficiente puntare il browser sull'indirizzo http://192.168.8.1/cgi-bin/luci oppure cliccare sul link Advanced settings. L'interfaccia LuCI non è accessibile dalla porta 83.
L'hardware include tre interfacce di rete: eth0, eth1 e wlan0 (hanno tutte lo stesso identico MAC address).
eth0 | Porta WAN, configurata con DHCP client |
---|---|
eth1 | Porta LAN, configurata in bridge con wlan0 |
wlan0 | Configurata in bridge con eth1 |
br-lan | Bridge di eth1 e wlan0, IP 192.168.8.1 |
Interfaccia | Servizio | Note |
---|---|---|
WAN | http://<ipaddress>:83/ | Amministrazione web con password e s/n |
LAN | http://192.168.8.1:83/ | Amministrazione web con password e s/n |
LAN | http://192.168.8.1/ | Amministrazione web con password |
LAN | ssh://192.168.8.1 | Accesso SSH root con password |
LAN | http://192.168.8.1/cgi-bin/luci | Interfaccia web LuCI, standard OpenWrt |
LAN | DHCP | Server DHCP per clienti Ethernet e WiFi |
Dall'interfaccia web è possibile procedere all'aggiornamento del firmware, nel nostro caso siamo passati dalla versione 2.22 alla 2.25. Si tratta di un aggiornamento GL.iNet, la versione OpenWrt su cui si basa rimane la stessa 15.05.
Viene scaricato il file http://www.gl-inet.com/firmware/ar150/v1/openwrt-ar150-2.25.bin, che viene installato dopo averlo salvato temporaneamente in /tmp/firmware.img.
Il repository OpenWrt a cui il router fa riferimento è http://www.gl-inet.com/openwrt/ar71xx/2.25/, dove 2.25 è la versione del firmware GL.iNet installata.
Per aggiornare la lista dei pacchetti presenti, per vedere quelli installati e quelli installabili:
opkg update opkg list-installed opkg list
Per utilizzare il repository ufficiale OpenWrt invece di quello custom GL.iNet si modifca il file /etc/opkg/distfeeds.conf
, mettendo:
src/gz chaos_calmer_base http://downloads.openwrt.org/chaos_calmer/15.05.1/ar71xx/generic/packages/base src/gz chaos_calmer_luci http://downloads.openwrt.org/chaos_calmer/15.05.1/ar71xx/generic/packages/luci src/gz chaos_calmer_management http://downloads.openwrt.org/chaos_calmer/15.05.1/ar71xx/generic/packages/management src/gz chaos_calmer_packages http://downloads.openwrt.org/chaos_calmer/15.05.1/ar71xx/generic/packages/packages src/gz chaos_calmer_routing http://downloads.openwrt.org/chaos_calmer/15.05.1/ar71xx/generic/packages/routing src/gz chaos_calmer_telephony http://downloads.openwrt.org/chaos_calmer/15.05.1/ar71xx/generic/packages/telephony
Quindi si esegue il tradizionale
opkg update opkg list
Se nel listing risultano pacchetti non aggiornati rispetto al repository potrebbe essere necessario editare manualmente il file /usr/lib/opkg/status
.
GL.iNet offre un servizio di DNS dinamico incluso nel router. Il funzionamento è più o meno il seguente:
Il router durante il normale funzionamento rivela alcune informazioni private a siti esterni. Ecco quello che è stato possibile appurare con il firmware 2.25.
Per fornire il servizio di DNS dinamico il router cerca di determinare il proprio indirizzo IP pubblico e comunica alcune informazioni a www.gl-inet.com:
/usr/lib/ddns/glddnsupdater.sh
./etc/hotplug.d/iface/23-glddns
./dev/mtd6
, es. nm31567./dev/mtd6
./proc/cpuinfo
, es ar150.
Per disabilitare questa funzione è sufficiente rimuovere o commentare lo script /etc/hotplug.d/iface/23-glddns
. Lo script di aggiornamento DNS dinamico viene eseguito quando l'interfaccia wan si attiva, e resta in esecuzione in modo permanente.
Analizzando il traffico di rete si vede un flusso costante di ping (pacchetti ICMP echo request), circa 4 interrogazioni ogni 5 secondi verso i DNS di Google e di OpenDNS. Il flusso dati non è enorme (circa 0.7 kbps), ma sicuramente non necessario. Il processo che genera questo traffico è /usr/sbin/mwan3track
installato dal pacchetto mwan3, probabilmente inutile se non si hanno connessioni internet multiple.
Vedere la pagina mwan3, circa le multiple WAN connections.
Se non si usano connessioni WAN multiple è possibile disinstallare il pacchetto principale mwan3, il pacchetto luci-app-mwan3 (che nell'interfaccia LuCI di amministrazione web mette a disposizione la pagina Network ⇒ Load balancing) e il file di configurazione:
opkg remove luci-app-mwan3 mwan3 rm /etc/config/mwan3
Avviati da /etc/rc.local
:
L'aggiornamento automatico glautoupdater si può disabilitare dall'interfaccia web, oppure si rimuove da /etc/rc.local
.
Il demone gl_health si disabilita commentanto la riga relativa in /etc/rc.local
. Non usando la funzione di ripetitore sembra che non ci siano controindicazioni.
Un'altro aspetto sensibile per la sicurezza è l'utilizzo di un repository OpenWrt proprietario, nel file di configurazione /etc/opkg/distfeeds.conf
troviamo infatti:
src/gz chaos_calmer_base http://www.gl-inet.com/openwrt/ar71xx/2.25/packages/base src/gz chaos_calmer_luci http://www.gl-inet.com/openwrt/ar71xx/2.25/packages/luci src/gz chaos_calmer_management http://www.gl-inet.com/openwrt/ar71xx/2.25/packages/management src/gz chaos_calmer_packages http://www.gl-inet.com/openwrt/ar71xx/2.25/packages/packages src/gz chaos_calmer_oldpackages http://www.gl-inet.com/openwrt/ar71xx/2.25/packages/oldpackages src/gz chaos_calmer_routing http://www.gl-inet.com/openwrt/ar71xx/2.25/packages/routing src/gz chaos_calmer_telephony http://www.gl-inet.com/openwrt/ar71xx/2.25/packages/telephony
Secondo le dichiarazioni di uno sviluppatore si dovrebbe trattare una OpenWrt standard con applicate alcune patch pubbliche.
Network ⇒ Firewall ⇒ Traffic Rules ⇒ Open ports on router
Le impostazioni si trovano in /etc/config/firewall
System ⇒ Administration
Le chiavi vengono messe in /etc/dropbear/authorized_keys
Network ⇒ WiFi ⇒ Edit ⇒ Wireless Security
Le impostazioni vanno in /etc/config/wireless
Network ⇒ DHCP and DNS ⇒ Static Leases
Le impostazioni vanno in /etc/config/dhcp
Network ⇒ Interfaces ⇒ LAN ⇒ Edit
Le impostazioni vanno in /etc/config/network
, /etc/config/dhcp
e /etc/config/wireless
Ad esempio si vuole mettere una regola per consentire il traffico dalla LAN cablata Ethernet (dal punto di vista del GL-AR150 si tratta della wan) verso gli host connessi in WiFi (per lo smart router si tratta della lan).
Network ⇒ Firewall ⇒ Traffic Rules ⇒ New forward rule
Le impostazioni vanno in /etc/config/firewall
config rule option target 'ACCEPT' option src 'wan' option dest 'lan' option name 'Access-WiFi-Hosts' option enabled '0' option family 'ipv4' option src_ip '192.168.3.0/24'
Il client ssh è Dropbear, per generare la chiave RSA si usa dropbearkey (il formato non è lo stesso di ssh-keygen
):
dropbearkey -f .ssh/id_dropbear -t rsa -s 2048
La parte pubblica della chiave viene mostrata a video, non salvata. Si consiglia di salvarla nel file $HOME/.ssh/id_dropbear.pub
. È comunque possibile estrarla con:
dropbearkey -y -f .ssh/id_dropbear
Purtroppo GL.iNet ha aggiunto una gestione di OpenVPN con file di configurazione e script custom (cioè non quelli predefiniti di OpenWRT).
In particolare esiste un servizio custom GL.iNet chiamato /etc/init.d/startvpn che fa riferimento ad un file di configurazione custom /etc/config/glconfig. Se non si abilita OpenVPN all'interno di tale servizio, ad ogni reboot il demone openvpn viene disabilitato e non sarà in esecuzione.
È quindi necessario abilitare OpenVPN secondo GL.iNet:
uci set glconfig.openvpn.enable=1 uci commit glconfig
Verificare che l'opzione sia abilitata visualizzando il contenuto del file /etc/config/glconfig oppure con il comando:
uci get glconfig.openvpn.enable
Si può verificare che il servizio attivo è solo startvpn (di GL.iNet) e non openvpn (default di OpenWRT):
/etc/rc.d/S90startvpn -> ../init.d/startvpn
Probabilmente la soluzione più pulita sarebbe quella di disabilitare il servizio custom di GL.iNet e abilitare quello standard di OpenWRT/OpenVPN:
/etc/init.d/startvpn disable /etc/init.d/openvpn enable /etc/init.d/openvpn start
Dalla documentazione (immagine del PCB sopra) pare che lo switch abbia tre posizioni, ma viene probabilmente limitato a due dalla dimensione del foro nel case, infatti risulta possibile solo lo stato GPIO-8 hi e GPIO-8 low.
Con la configurazione predefinita del software pare che la posizione dello switch sia ignorata. È possibile interrogarne lo stato verificando il valore del GPIO BTN_8:
cat /sys/kernel/debug/gpio GPIOs 0-29, ath79: gpio-0 (gl_ar150:wlan ) out hi gpio-6 (gl_ar150:usbpow ) out hi gpio-7 (BTN_7 ) in lo gpio-8 (BTN_8 ) in hi gpio-11 (reset ) in lo gpio-13 (gl_ar150:lan ) out lo gpio-15 (gl_ar150:wan ) out hi
Il sistema fornisce come aggancio lo script /etc/rc.button/BTN_8
che viene eseguito ad ogni cambio di stato dello switch.
Versione GL.iNet | Sistema Operativo |
---|---|
2.271 | Lede 17.01.4 |
3.012 | OpenWrt 18.06.1 |
Nella versione 3.012 ci sono i seguenti file custom GL.iNet da considerare:
/usr/bin/glautoupdater
e /usr/bin/gl_health
/usr/bin/gl_monitor
.uci get glconfig.openvpn.ovpn
è diverso da zero (file di configurazione /etc/config/glconfig
).