Home Assistant HUB

Router/AP

Aggiornato: 06/04/2020

Stato: Pienamente funzionante

Scegliere/Verificare l'hardware

Per realizzare l'HUB è necessario un PC due interfacce di rete LAN ed una WiFi.
Di seguito verrà descritta la procedura per la creazione di un HUB con due porte LAN ed una interfaccia WiFi.
Avere due interfacce di rete LAN potrebbe essere utile nel caso in cui, ad esempio, si decidesse
di installare videocamere di sorveglianza via cavo ( utilizzando uno switch se necessario ).
Sarà necessario verificare che la scheda di rete WiFi che intendete utilizzare supporti la modalità MASTER o AP-Mode.
Se per realizzare l'HUB avete scelto di utilizzare un PC Intel NUC verificate che la scheda di rete supporti la modalità
Master o AP-Mode.
Se la modalità non è supportata dalla vostra scheda dovrete sostituirla o aggiungerne una che supporti tale funzionalità.

Guida Ubuntu WiFiDocs/MasterMode

Adattatori di rete testati:


#

Installazione ed avvio del Server Ubuntu - Configurazione testata e funzionante su Ubuntu Server V18.04.4

Installare Ubuntu Server scaricando l'immagine ISO per PC AMD64 ( non ARM )
Scarica
Creare un supporto di avvio ( chiavetta USB ) utilizzando BALENAETCHER:
Scarica
Scaricare il client SSH putty:
Scarica
Durante l'installazione di Ubuntu abilitare il SERVER SSH.
Una volta installato il software server e dopo aver riavviato il PC avrete a dispozione il terminale.

Accedere al server effettuando il login

Aggiornare la lista dei pacchetti:

sudo apt update

Aggiornare il software:

sudo apt upgrade


Rimuovere Modem Manager e tutte le dipendenze

Il servizio Modem Manager potrebbe influire negativamente con il server Home Assistant
inoltre ne impedisce l'installazione.

Verificare se il pacchetto ModemManager è installato:

apt list modemmanager

Installato:


Listing... Done
modemmanager/bionic-updates 1.10.0-1~ubuntu18.04.2 amd64  [installed]
N: There is 1 additional version. Please use the '-a' switch to see it

Non Installato:

Listing... Done
modemmanager/bionic-updates 1.10.0-1~ubuntu18.04.2 amd64
N: There is 1 additional version. Please use the '-a' switch to see it

Se modem manager non è installato passare alla sezione: Preparazione gestione interfacce di rete con ifupdown
Verificare se il sevzio Modem Manager è attivo:

sudo systemctl status ModemManager --no-pager

Arrestare il servizio Modem Manager:

sudo systemctl stop ModemManager

Disabilitare il servizio Modem Manager:

sudo systemctl disable ModemManager

Rimuovere il servizio Modem Manager e tutte le sue dipendenze:

sudo apt purge --auto-remove modemmanager

Opzionale - Verifica disintallazione:

systemctl list-dependencies multi-user.target | grep Modem


Preparazione gestione interfacce di rete con ifupdown

Installare i pacchetti ifupdown e bridge-utils

sudo apt install ifupdown

sudo apt install bridge-utils


Configurare le interfacce di rete

Manuale Ubuntu:
Manuale Ubuntu Interfacce di rete

Modificare il file /etc/network/interfaces. Copiare la configurazione ed incollarla nel file.

NB: Le righe che iniziano con il carattere # sono commenti e non vengono considerate come istruzioni dal software

sudo nano /etc/network/interfaces


Salvare il file CTRL+O:
Confermare di voler salvare il file INVIO:
Chiudere l'editor nano CTRL+X:

Rimuovere Netplan

Netplan è il nuovo servizio per la gestione delle interfacce di rete e sostituisce il servizio Network Manager.

Arrestare il servizio Netplan:

sudo systemctl stop systemd-networkd.socket systemd-networkd networkd-dispatcher systemd-networkd-wait-online

sudo systemctl disable systemd-networkd.socket systemd-networkd networkd-dispatcher systemd-networkd-wait-online

sudo systemctl mask systemd-networkd.socket systemd-networkd networkd-dispatcher systemd-networkd-wait-online

sudo apt --assume-yes purge nplan netplan.io


Abilitare ifupdown

Avvio del servizio networking;

sudo systemctl unmask networking

sudo systemctl enable networking

sudo systemctl restart networking


Disabilitare e rimuovere Network Manager ( se presente )

Le interfacce di rete saranno gestite da ifupdown...

Verificare se il pacchetto network-manager è installato:

apt list network-manager

Installato:


Listing... Done
network-manager/bionic-updates 1.10.6-2ubuntu1.4 amd64    [installed]
N: There are 2 additional versions. Please use the '-a' switch to see them.
            

Non installato:

Listing... Done
network-manager/bionic-updates 1.10.6-2ubuntu1.4 amd64
N: There are 2 additional versions. Please use the '-a' switch to see them.
            
Se Network Manager non è installato passare alla sezione: Risoluzione dei nomi di domnio ( DNS )

Verificare se il servizio Network Manager è in funzione:

sudo systemctl status NetworkManager.service --no-pager

Arrestare il servizio Network Manager:

sudo systemctl stop NetworkManager.service

Disabilitare il servizio Network Manager:

sudo systemctl disable NetworkManager.service

Rimuovere il pacchetto Network Manager e i relativi file di configurazione:

sudo apt purge network-manager


Risoluzione dei nomi di dominio ( DNS )

Ubuntu Bionic Beaver (18.04) utilizza un proprio client resolver SYSTEMD-RESOLVED.SERVICE(8) è necessario aggiungere l'indirizzo del server DNS al file /etc/systemd/resolved.conf

sudo nano /etc/systemd/resolved.conf


DNS=8.8.8.8 8.8.4.4
        

Salvare il file CTRL+O:
Confermare di voler salvare il file INVIO:
Chiudere l'editor nano CTRL+X:

Riavviare il servizio systemd-resolved:

sudo systemctl restart systemd-resolved

Test risoluzione dei nomi:

nslookup www.google.com

Salvare il file CTRL+O:
Confermare di voler salvare il file INVIO:
Chiudere l'editor nano CTRL+X:


Abilitare IP FORWARDING - IPV4

Modificare il file /etc/sysctl.conf:

NB: Le righe che iniziano con il carattere # sono commenti e non vengono considerate come istruzioni dal software

sudo nano /etc/sysctl.conf

Elimiare il carattere # commento alla riga come mostrato di seguito e verificare che il valore
dopo il simbolo = sia 1

net.ipv4.ip_forward=1


Salvare il file CTRL+O:
Confermare di voler salvare il file INVIO:
Chiudere l'editor nano CTRL+X:

Test IP FORWARDING (OPZIONALE)

Per verificare che l'IP FORWADING sia abilitato sarà necessario riavviare il server:

sudo reboot

sysctl net.ipv4.ip_forward

La risposta dovrà essere:

net.ipv4.ip_forward = 1


Disinstallare il firewall Uncomplicated Firewall (UFW)

Arrestare il servzio Uncomplicated Firewall:

sudo systemctl disable ufw

Disinstallare il Firewall:

sudo apt -y purge ufw


Hostapd

Hostapd creerà il nuovo Access Point AP
Wireless Access Point
Installare i pacchetti:

sudo apt install wireless-tools

sudo apt install hostapd

Modificare il file /etc/hostapd/hostapd.conf

NB: Le righe che iniziano con il carattere # sono commenti e non vengono considerate come istruzioni dal software

sudo nano /etc/hostapd/hostapd.conf

Specificare il nome del nuovo Access Point:
ssid=Home_Assistant, o vostra scelta
Specificare la password:
wpa_passphrase=PASSWORD

La potenza del segnale radio ed i canali disponibili sono gestiti dalle
diverse nazioni. Impostate la vostra nazione utilizzando i codici Country code (ISO/IEC 3166-1)
riportati in questa lista:
Codici nazioni - Country codes
country_code=IT o country_code=US o country_code=FR ecc


Salvare il file CTRL+O:
Confermare di voler salvare il file INVIO:
Chiudere l'editor nano CTRL+X:

Test Hostapd

A questo punto potrebbe essera utile eseguire un test di Hostapd:
Hostapd

Senza informazioni di debug ( avviare prima senza debug ):

sudo hostapd /etc/hostapd/hostapd.conf

Con informazioni di debug, se necessario:

sudo hostapd -d /etc/hostapd/hostapd.conf

Se tutto funziona correttamente il nuovo Access Point verrà creato, verificate che esista la nuova rete WiFi. Se tenterete di connettervi alla nuova rete vedrete apparire, sullo schermo, alcune inforamzioni ma non vi sarà possibile connettervi alla nuova rete per ora.
Terminate Hostapd premendo CRTL+C


Abilitare definitivamente Hostapd

Per fare in modo che l'Access Point venga creato automaticamente all'avvio dell'HUB
midificare il file /etc/default/hostapd:

sudo nano /etc/default/hostapd

Trovare la riga DAEMON_CONF. Se è presente il simbolo di commento # all'inizio
della riga rimuoverlo e modificare il valore impostandolo come segue:


DAEMON_CONF="/etc/hostapd/hostapd.conf"
            

Salvare il file CTRL+O:
Confermare di voler salvare il file INVIO:
Chiudere l'editor nano CTRL+X:

Abilitare hostapd ad essere utilizzato come sevizio:

sudo systemctl unmask hostapd

Abilitare il servizio hostapd:

sudo systemctl enable hostapd

Avviare il servizio hostapd:

sudo systemctl start hostapd

Verificare che il servizio hostapd sia in funzione:

sudo systemctl status hostapd --no-pager

Da questo momento in poi il nuovo AP verrà creato automaticamente all'avvio dell'HUB
e vi sarà possibile individuare il nuovo AP controllando l'elenco delle reti WiFi disponibili
da PC, da Smartphone o da altri dispositivi.


Server DHCP - isc-dhcp-server

Installare il server DHCP isc-dhcp-server:

sudo apt install isc-dhcp-server -y

Modificare il file /etc/default/isc-dhcp-server :

NB: Le righe che iniziano con il carattere # sono commenti e non vengono considerate come istruzioni dal software

sudo nano /etc/default/isc-dhcp-server

Modifcare il valore di INTERFACESv4 specficando br0


INTERFACESv4="br0"
        

Salvare il file CTRL+O:
Confermare di voler salvare il file INVIO:
Chiudere l'editor nano CTRL+X:


Modificare il file /etc/dhcp/dhcpd.conf:

NB: Le righe che iniziano con il carattere # sono commenti e non vengono considerate come istruzioni dal software

E' possibile cancellare completamente il contenuto e sostituirlo con la configurazione
riportata di seguito, modificare solo le righe seguenti, aggiungere il simbolo di commento #
alle righe esistenti ed aggiungere la configurazione riportata di seguito:

sudo nano /etc/dhcp/dhcpd.conf

Salvare il file CTRL+O:
Confermare di voler salvare il file INVIO:
Chiudere l'editor nano CTRL+X:

Test server DHCP

Riavviare il server DHCP:

sudo systemctl restart isc-dhcp-server

Controllare lo stato del server:

sudo systemctl status isc-dhcp-server --no-pager

Se il servizio è attivo l'output sarà simile a:


● isc-dhcp-server.service - ISC DHCP IPv4 server
Loaded: loaded (/lib/systemd/system/isc-dhcp-server.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2020-04-02 07:37:07 UTC; 5h 28min ago
Docs: man:dhcpd(8)
Main PID: 1266 (dhcpd)
Tasks: 1 (limit: 4915)
CGroup: /system.slice/isc-dhcp-server.service
└─1266 dhcpd -user dhcpd -group dhcpd -f -4 -pf /run/dhcp-server/dhcpd.pid -cf /etc/dhcp/dhcpd.conf
            

Se sono presenti errori sarà necessario eseguire il debug e/o verificare le configurazioni.

journalctl -xe

Riavviare il server se vengono apportate modifiche al file di configurazione:

sudo systemctl restart isc-dhcp-server

Se tutto è andato bene il server DHCP è in funzione ed assegenera un nuovo IP ad
ogni dispositivo che si collegherà all'HUB, a meno che, non sia impostato un IP
statico nel dispositivo.


PRIMO TEST FUNZIONALITA' RETE

Riavviate l'HUB

sudo reboot

Verificare che il servizio Hostapd è in funzione:

sudo systemctl status hostapd.service --no-pager

Se il servizio è attivo l'output sarà simile a:


● hostapd.service - Advanced IEEE 802.11 AP and IEEE 802.1X/WPA/WPA2/EAP Authenticator
Loaded: loaded (/lib/systemd/system/hostapd.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2020-04-02 07:37:07 UTC; 5h 23min ago
Process: 1287 ExecStart=/usr/sbin/hostapd -P /run/hostapd.pid -B $DAEMON_OPTS ${DAEMON_CONF} (code=exited, status=0/SUCCESS)
Main PID: 1375 (hostapd)
Tasks: 1 (limit: 4915)
CGroup: /system.slice/hostapd.service
└─1375 /usr/sbin/hostapd -P /run/hostapd.pid -B /etc/hostapd/hostapd.conf

Verificare che il servizio isc-dhcp-server ( server DHCP ) è in funzione:

sudo systemctl status isc-dhcp-server --no-pager


Se il servizio è attivo l'output sarà simile a:
● isc-dhcp-server.service - ISC DHCP IPv4 server
Loaded: loaded (/lib/systemd/system/isc-dhcp-server.service; enabled; vendor preset: enabled)
Active: active (running) since Thu 2020-04-02 07:37:07 UTC; 5h 28min ago
Docs: man:dhcpd(8)
Main PID: 1266 (dhcpd)
Tasks: 1 (limit: 4915)
CGroup: /system.slice/isc-dhcp-server.service
└─1266 dhcpd -user dhcpd -group dhcpd -f -4 -pf /run/dhcp-server/dhcpd.pid -cf /etc/dhcp/dhcpd.conf

Se entrambe i servizi sono attivi è possibile proseguire, altrimenti sarà necessario rivedere i file di configurazione
controllare i log, riavviare i servizi fino a quando essi non saranno eseguiti senza errori.


ROUTING STATICO

I pacchetti destinati alla rete WAN ( internet ) non possono ancora essere instradati
verso di essa.
Per poter essere instradati sarà necessario specificare una nuova ROUTE con NAT.

sudo iptables -t nat -A POSTROUTING -o enp1s0 -j MASQUERADE


Ora collegandosi all'HUB ( Access Point dell'HUB ) sarà possibile accedere ad Internet.

IP TABLES

La nuova route però deve essere salvata altrimenti ad ogni riavvio dovrà essere reinserita:
Installare il pacchetto iptables-persistent

sudo apt install iptables-persistent

Durante l'installazion di iptables-persistent vi verrà richiesto il permesso di salvare le regole
attive, rispondere SI alle richieste.
( OPZIONALE ) Salvataggio manuale delle regole:

sudo netfilter-persistent save

Vedere le regole iptables in uso:

netstat -rn

route -n

ip route


Fine procedura creazione HUB

Riavviate l'HUB con:

sudo reboot

Il vostro server Ubuntu è dotato di funzionalità di routing ed è un vero Access Point.

Test del router ( HUB )

Prima di installare Docker-ce e Home Assistant testate il solo router.
Collegandovi al nuovo Access Point sarà possibile navigare normalmente.