In questo capitolo illustreremo la metodologia più semplice per configurare una interfaccia wired associando a essa un indirizzo IP permanente o dinamico da linea di comando su Ubuntu Server 18.04.
YAML
Prima di andare oltre sarà bene introdurre brevemente YAML. Questi è un linguaggio volto a serializzare dati al fine di rendere l’interpretazione di un file più agevole per gli esseri umani. Le regole per leggere quanto è codificato in YAML sono molto semplici. Elenchiamo le principali:
- Le strutture vengono descritte dall'indentazione.
- Il valore di una chiave si attribuisce facendo seguire a questa due punti, lo spazio, e il suo valore.
- Ogni elemento di una lista inizia con “-” seguito da spazio.
- E’ possibile creare dizionari e strutture complesse.
Nell’ultima Ubuntu LTS Server viene utilizzato il formato di markup YAML per codificare le informazioni da passare a NetworkManager o a systemd-networkd.
Come prima cosa dovremo disabilitare il package di cloud-init inserendo al percorso opportuno un file che contenga l’istruzione utile per lo scopo. Ecco un esempio di quanto dovremo ottenere.
fprincipe@html3:~$ more /etc/cloud/cloud.cfg.d/99-disable-network-config.cfg
network:
config: disabled
Configurare un ip statico in modo permanente
A questo punto, se desideriamo assegnare un ip statico a una interfaccia wired, il file YAML che andremo ad editare dovrà avere un aspetto simile a quello seguente. Troveremo i file con estensione yaml nella directory /etc/netplan/.
network:
version: 2
renderer: networkd
ethernets:
enp0s3:
dhcp4: no
addresses: [192.168.0.111/24]
gateway4: 192.168.1.1
nameservers:
addresses: [8.8.8.8]
Come vedete si parte con la chiave network perché abbiamo davanti un testo che codificherà un network mapping. Poi indichiamo la versione adottata, quella in uso è la 2. Quindi cominciamo con le specifiche vere e proprie. Prendiamo in carico la chiave ethernets. Osservate la struttura rappresentata dagli spazi di indentazione poiché fotografa la gerarchia dei dati anche dal punto di vista logico. Ogni identificativo di rete è rappresentato da un blocco a se. Innanzi tutto dovremo negare la necessità di gestire istanze dhcp assegnando “no” come valore a dhcp4. La chiave dhcp è seguita dal un numero “4” poiché fa riferimento all’indirizzamento IP versione 4. Molte chiavi coesistono nei due formati IPv4 e IPv6. Giunti alla chiave addresses specifichiamo direttamente l’indirizzo IP da associare all’interfaccia. Lo stesso facciamo per la sottochiave addresses relativa ai nameservers e al gateway di riferimento. Alla prima chiave addreesses specifichiamo l’indirizzo IP dell’interfaccia di rete associando direttamente un VLSM per descrivere la subnet mask.
Adoperare il dhcp wired
Il discorso si fa ovviamente più semplice se desideriamo adoperare il dhcp. Occorre operare sempre nella directory /etc/netplan/. Ecco un esempio.
network:
ethernets:
enp0s3:
addresses: []
dhcp4: true
optional: true
version: 2
La chiave optional, che può essere true o false specifica la nostra preferenza di non attendere al boot che l’interfaccia di rete ottenga l’indirizzo IP consentendo, in tal modo, di procedere più speditamente.
Conclusione
Potrà stupire ma avete già in mano tutto il necessario per procedere, la potenza dell'approccio risiede proprio in questo, ovvero nella sua disarmante semplicità. A questo punto è utile un comando per effettuare il debug di quanto avete appena scritto. Otterrete questo effetto lanciando netplan --debug generate. I due errori più comuni sono rappresentati dall’utilizzo della tabulazione al posto di spazi condizione che restituirà come risultato il messaggio "found character that cannot start any token" (la tabulazione infatti non è consentita) e una indentazione incomprensibile nel qual caso il debug vi darà a video un messaggio di "expected mapping". Ora dovrete semplicemente applicare le configurazioni implementate. Per ulteriore approfondimento potete dare uno sguardo qui.