Table of Contents
GL-iNet GL-AR150 Smart Router
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 |
Recensione
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.
Partizioni, memoria, ecc.
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"
Prima Accensione
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:
- L'accesso telenet viene disabilitato e diventa possibile accedere via ssh con login root e la password scelta.
- Sulla porta 80 si trova il normale login all'interfaccia di configurazione web.
- Sulla porta 83 si trova un accesso all'interfaccia web, che richiede oltre alla password anche il numero seriale del router, secondo le impostazioni predefinite questa è l'unica porta aperta dal lato WAN. Con il firmware 2.22 l'accesso non funzionava, segnalava login errato nonostante si inserisse la password e il s/n corretti.
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.
Impostazioni predefinite
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 |
Aggiornamento Firmware
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.
Repository OpenWrt
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
Usare il repository OpenWrt originale
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
.
DNS Dinamico
GL.iNet offre un servizio di DNS dinamico incluso nel router. Il funzionamento è più o meno il seguente:
- Quando si connette ad internet, il router “chiama casa” e comunica il proprio codice identificativo (del tipo nm31567), l'indirizzo IP della porta WAN (es. quello assegnato via DHCP dal router ADSL) e l'indirizzo IP pubblico utilizzato per navigare (es. quello del router ADSL). L'identificativo è riportato come link in basso nella schermata iniziale della configurazione web.
- Puntando il browser all'indirizzo http://nm31567.gl-inet.com/ si viene rediretti in due modi differenti:
- Se la richiesta proviene dallo stesso indirizzo IP pubblico si presuppone che provenga dalla stessa rete locale, quindi la ridirezione avviene sull'IP WAN, porta 83.
- Se la richiesta proviene da altro IP pubblico allora la ridirezione avviene verso l'IP pubblico, porta 83. Si presuppone che il router ADSL ridiriga quella porta sul GL-AR150.
Rivelazione di informazioni (privacy, etc.)
Il router durante il normale funzionamento rivela alcune informazioni private a siti esterni. Ecco quello che è stato possibile appurare con il firmware 2.25.
Indirizzo IP pubblico
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:
- Script eseguito:
/usr/lib/ddns/glddnsupdater.sh
. - Eseguito al momento dell'attivazione di una interfaccia di rete, tramite
/etc/hotplug.d/iface/23-glddns
. - Servizi contattati: http://checkip.dyndns.org e http://myip.com.tw/
- URL a cui vengono inviate le informazioni: http://www.gl-inet.com/ddnsregister.php
- Informazioni trasmesse:
- ddns, identificativo DDNS, 7 caratteri estratti da
/dev/mtd6
, es. nm31567. - code, codice DDNS, 16 caratteri esadecimali estratti da
/dev/mtd6
. - current_ip, indirizzo IP pubblico ricavato da uno dei due servizi sopra indicati.
- port, porta TCP dell'interfaccia web lato WAN.
- wanip, indirizzo IP dell'interfaccia WAN.
- model, modello del router da
/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.
Mwan3 e ICMP (ping) flood
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
Altro software GL.iNet non necessario
Avviati da /etc/rc.local
:
- /usr/bin/glautoupdater Esegue l'aggiornamento automatico del firmware (se abilitato). Il primo check viene fatto tre ore dopo l'accensione, poi una volta al giorno.
- /usr/bin/gl_health Secondo questo post è il demone usato per connettersi ad altre stazioni con funzione di ripetitore, non dovrebbe avere implicazioni di privacy, ecc. Non è chiaro tuttavia il motivo per cui includa pezzi di altri software, ad esempio include pezzi di wpa_cli. Le funzioni di ripetitore dovrebbero essere quelle descritte in questo articolo.
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.
Repository OpenWrt
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.
Modifiche alla configurazione standard
Apertura porta SSH e HTTP su interfaccia WAN
Network ⇒ Firewall ⇒ Traffic Rules ⇒ Open ports on router
Le impostazioni si trovano in /etc/config/firewall
Accesso con chiave SSH
System ⇒ Administration
Le chiavi vengono messe in /etc/dropbear/authorized_keys
Password WiFi
Network ⇒ WiFi ⇒ Edit ⇒ Wireless Security
Le impostazioni vanno in /etc/config/wireless
Indirizzi IP riservati via DHCP
Network ⇒ DHCP and DNS ⇒ Static Leases
Le impostazioni vanno in /etc/config/dhcp
Indirizzo LAN, DHCP e WiFi
Network ⇒ Interfaces ⇒ LAN ⇒ Edit
Le impostazioni vanno in /etc/config/network
, /etc/config/dhcp
e /etc/config/wireless
Regole iptables aggiuntive
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'
Chiave RSA
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
Configurazione OpenVPN
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
Switch
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.
Aggiornamento Software
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:
- /etc/rc.local esegue
/usr/bin/glautoupdater
e/usr/bin/gl_health
- /etc/hotplug.d/iface/30-gl-tertf
- /etc/init.d/gl_monitor servizio che avvia
/usr/bin/gl_monitor
. - /etc/init.d/startvpn servizio avviato se
uci get glconfig.openvpn.ovpn
è diverso da zero (file di configurazione/etc/config/glconfig
).