User Tools

Site Tools


doc:appunti:linux:openwrt

OpenWrt

File di configurazione

/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.

OpenWrt 19.07.6

Configurazione DHCP server con due MAC address

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 NetworkDHCP and DNSStatic 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.

Static lease fuori dal range DHCP

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'

OpenWrt 22.03 Lede

OpenVPN

:!: ATTENZIONE: Per avere una situazione coerente nell'interfaccia web LuCI si dovrebbe configurare il tunnel OpenVPN nella sezione NetworkInterfaces e quindi aggiungere le regole di firewall nella sezione NetworkFirewall. 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.

Due possibili metodi di configurazione

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 VPNOpenVPN 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.

Configurazione completa LuCI (NON consigliata)

Con questo metodo viene creata una network interface associata al network device tun3. Da NetworkInterfaces 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 NetworkFirewall 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'

Configurazione parziale LuCI (consigliata)

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 NetworkFirewall 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 settingsCovered 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.

Menu VPN  => OpenVPN

Menu Network => Interfaces

Menu Network => Interfaces => Devices

Menu Network => Firewall

Menu Network => Firewall => Zone

doc/appunti/linux/openwrt.txt · Last modified: 2023/10/31 08:08 by niccolo