====== OpenWrt ====== * [[http://wiki.openwrt.org/doc/start|OpenWrt Documentation]] * [[http://wiki.openwrt.org/doc/uci|Unified Configuration Interface]] ===== 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 **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. ==== 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 **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 **[[https://openwrt.org/docs/techref/netifd|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 **[[https://forum.openwrt.org/t/openvpn-client-tun-adapter-loses-its-ip-address-on-network-restart/13825/|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 **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. === Configurazione completa LuCI (NON consigliata) === 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' === 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 //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//. === Menu VPN => OpenVPN === {{.openwrt:openwrt-22.05-openvpn-openvpn.png?direct&560|Menu VPN => OpenVPN}} === Menu Network => Interfaces => Interfaces === {{.:openwrt:openwrt-22.05-openvpn-interfaces.png?direct&560|Menu Network => Interfaces}} === Menu Network => Interfaces => Devices === {{.openwrt:openwrt-22.05-openvpn-interfaces-devices.png?direct&560|Menu Network => Interfaces => Devices}} === Menu Network => Firewall === {{.openwrt:openwrt-22.05-openvpn-firewall.png?direct&560|Menu Network => Firewall}} === Menu Network => Firewall => Zone === {{.:openwrt:openwrt-22.05-openvpn-firewall-zone.png?direct&560|Menu Network => Firewall => Zone}}