Bridge, OpenVPN e DHCP

OpenVPN è un’ottima soluzione per creare una VPN, ovvero una Virtual Private Network.

Volevo utilizzare questo software per permettermi di accedere alla rete di casa quando sono via, quindi ho scelto l’approccio bridge, quindi con interfaccia tap.

Di suo OpenVPN non è così Plug&Play, bisogna lavorare un po’ sui file di configurazione e con un’utility chiamata easy-rsa per creare un po’ di chiavi e certificati per crittografare il traffico, cosa di cui non tratterò, perché ci sono siti molto più dettagliati.

Con IPv4 è molto comodo usare DHCP per la configurazione automatica dell’interfaccia di rete, anche quella virtuale. OpenVPN lo sa, infatti implementa un server DHCP.

Per la modalità routed è abbastanza sensato usarlo, ma va utilizzato per forza anche per la modalità bridged, indicando un range di IP che può utilizzare.

Io tuttavia pensavo che sarebbe bello poter usare il server DHCP del resto della LAN.

Ero sicuro fosse possibile, perché mi era già capitato di farlo, tuttavia l’avevo fatto con Windows ed era andato tutto tranquillamente.

Anche su Linux (client) riuscivo a farlo andare, ma solo manualmente con la CLI di OpenVPN e dhclient tap0, mentre avevo alcuni problemi con NetworkManager. Precisamente:

Aug 20 18:04:17 pieron550 NetworkManager<sup><a id="entry140820-175323-rel-25742" href="#entry140820-175323-fn-25742" title="Note 25742">25742</a></sup>: <info> device added (path: /sys/devices/virtual/net/tap0, iface: tap0): no ifupdown configuration found.

Il problema è semplicemente che, come dicono le man pages, tutto ciò non è implementato né su Linux, né sugli altri sistemi Unix: su Windows funziona solamente perché DHCP viene attivato assieme all’interfaccia stessa.

Ho pensato che il problema potesse essere correlato a Network Manager, ma non è così: NM prende la configurazione da OpenVPN tramite un programma che viene passato a OpenVPN con il parametro up e da questo chiamato. La configurazione viene letta tramite variabili globali, però non ne esiste nessuna per dire allo script di configurarsi tramite DHCP.

Gli sviluppatori conoscono il problema e hanno proposto anche alcune soluzioni, ma attualmente non sono presenti.

Attualmente sono possibili 3 soluzioni:

  1. usare il DHCP di OpenVPN, come proposto da tutte le guide;
  2. non usare né il DHCP di OpenVPN, né NetworkManager;
  3. non usare il DHCP di OpenVPN ma usare NetworkManager, utilizzando una patch che utilizzi DHCP come fallback.

Ancora non so come farò, anche se probabilmente mi sa che sceglierò la terza soluzione 😉 .