/etc/dropbear/authorized_keys | Chiavi RSA pubbliche per accesso SSH senza password. |
---|---|
/etc/config/system | Configurazione hostname, timezone, LED, ecc. |
/etc/config/network | Configurazione interfacce di rete. |
/etc/config/dhcp | Configurazione DHCP, lease statici, ecc. |
/etc/config/openvpn | Configurazione OpenVPN attive. |
/etc/config/wireless | Configurazione access point: ESSID, psk, ecc. |
/etc/rc.d/S90openvpn | Link creato quando si esegue /etc/init.d/openvpn enable |
/etc/config/firewall | Regole firewall. |
/etc/crontabs/root | Cron job eseguiti con privilegi di root. |
Il file di configurazione è /etc/config/dhcp. Questo un esempio di configurazione per un lease IP statico con due MAC address diversi:
config host option ip '192.168.5.38' option mac 'dc:a6:31:3b:a2:6e dc:a6:31:3b:a2:6f' option name 'amorgos'
In questo modo il client ottiene lo stesso indirizzo IP quando si collega indifferentemente con il WiFI oppure con il cavo Ethernet (i due MAC address sono delle interfacce eth0 e wlan0 del client). Per riavviare il servizio:
/etc/init.d/dnsmasq reload /etc/init.d/odhcpd reload
Al reload viene generato un nuovo file /var/etc/dnsmasq.conf e viene riavviato il processo /usr/sbin/dnsmasq.
In alcuni casi il client continua a chiedere il vecchio indirizzo IP e non riceve il nuovo indirizzo assegnato. Ad esempio un Raspberry Pi con RaspiOS Buster (basato su Debian 10) utilizza dhcpcd e mantiene traccia dei lease ottenuti in /var/lib/dhcpcd5/. Per eliminare l'informazione sui vecchi lease è sufficiente rimuovere il file eth0.lease e procedere al rinnovo.
ATTENZIONE: L'interfaccia web LuCI, sezione Network ⇒ DHCP and DNS ⇒ Static Leases, non è in grado di gestire il doppio MAC address, nella colonna MAC-Address viene mostrato il valore none e non è possibile aggiungere o modificare una impostazione del genere.
Quando si desidera che il server DHCP assegni sempre lo stesso indirizzo IP ad un host (static lease), si crea una sezione config host in /etc/config/dhcp come visto sopra. L'indirizzo assegnato con option ip deve stare all'esterno del pool definito nella sezione config dhcp. Il range è definito dalle opzioni start e limit.
config dhcp 'lan' option interface 'lan' option start '110' option limit '140' option leasetime '12h' option dhcpv6 'server' option ra 'server' option ra_management '1' config host option name 'nafplio' option dns '1' option mac 'b8:27:eb:52:a6:3b' option ip '192.168.5.2'
ATTENZIONE: Per avere una situazione coerente nell'interfaccia web LuCI si dovrebbe configurare il tunnel OpenVPN nella sezione Network ⇒ Interfaces e quindi aggiungere le regole di firewall nella sezione Network ⇒ Firewall. Tuttavia questo causa un problema grave se viene eseguito un /etc/init.d/network restart oppure se viene a mancare momentaneamente la connessione WAN: il demone netifd trova l'interfaccia configurata con proto none e quindi rimuove l'indirizzo IP dal device, il demone OpenVPN non si accorge della situazione e lascia il tunnel attivo, ma senza indirizzo IP (quindi non funzionante). Togliere l'opzione persist-tun dalla configurazione OpenVPN mitiga solo in parte il problema perché se l'interruzione della WAN è di breve durata il ping-restart non interviene e quindi l'interfaccia resta non funzionante. Il problema è descritto nel post OpenVPN client tun adapter loses its IP address on network restart.
Configurando un tunnel OpenVPN viene creato un network device che può essere utilizzato da OpenWRT in due modi diversi. Il primo prevede di creare una network interface specifica associata al device, tale interfaccia potrà essere usata a piacere nelle regole di firewall. Il secondo metodo consiste nel creare una firewall zone specifica per la VPN che si riferisce direttamente al network device, senza utilizzre una interface. La prima soluzione sarebbe più coerente con il networking di OpenWRT, ma soffre del problema evidenziato sopra.
Il prerequisito necessario per entrembi i metodi è creare il tunnel OpenVPN come network device assegnandogli un nome, ad esempio tun3. Si può agire dal menu LuCI VPN ⇒ OpenVPN oppure in alternativa si può agire da riga di comando creando un file di configurazione in /etc/openvpn/, senza neanche installare il pacchetto luci-app-openvpn. Vediamo nei due paragrafi seguenti come gestire questo device dalle pagine web LuCI; il primo metodo è sconsigliato perché causa il problema descritto sopra.
Con questo metodo viene creata una network interface associata al network device tun3. Da Network ⇒ Interfaces scegliere Add new interface…, indicare un nome, ad esempio vpn3, protocol Unmanaged e quindi scegliere il device tun3. Attivare anche l'opzione Bring on boot. Questa procedura aggiunge una sezione nel file /etc/config/network:
config interface 'vpn3' option proto 'none' option device 'tun3'
Quindi da Network ⇒ Firewall scegliere Add, indicare un nome, ad esempio vpn, scegliere le policy predefinite e indicare in Covered networks l'interfaccia vpn3 creata in precedenza. Questa procedura aggiunge una sezione nel file /etc/config/firewall:
config zone option name 'vpn' option input 'ACCEPT' option output 'ACCEPT' option forward 'ACCEPT' list network 'vpn3'
In questo caso NON si deve aggiungere l'interfaccia di rete, cioè nel file /etc/config/network non deve esserci alcuna sezione relativa al device tun3.
Quindi da Network ⇒ Firewall scegliere Add, indicare un nome, ad esempio vpn e scegliere le policy predefinite. Lasciare vuoto il campo Covered networks e al suo posto indicare in Advance settings ⇒ Covered devices l'Ethernet adapter tun3 (il servizio OpenVPN deve essere già attivo). Questa procedura aggiunge una sezione al file /etc/config/firewall, dove viene usata l'opzione device invece di network (in questo esempio la zona vpn è stata associata a due tunnel):
config zone option name 'vpn' option input 'ACCEPT' option output 'ACCEPT' option forward 'ACCEPT' list device 'tun3' list device 'tun189'
Nelle figure che seguono si mostra la configurazione nelle pagine LuCI di due tunnel OpenVPN tun3 e tun189 con il secondo metodo, cioè come semplici network devices senza una corrispondente network interface.