OpenVPN sobre Linux
Enunciat
Configura un Ubuntu Server com a servidor OpenVPN perquè un client extern pugui accedir a un servidor de la xarxa interna darrere del servidor de VPN.
Situació inicial
L'esquema de xarxa serà semblant a aquest:
Tal com ho he muntat jo, tindré client i servidor amb Ubuntu Server/Client 18 en una mateixa xarxa interna; de manera que el túnel no el faré entre diferents xarxes, sinó que serà entre 2 hosts de la mateixa LAN per simplificar; però l'efecte de la connexió serà el mateix. Fins i tot podríem col·locar un sniffer per veure que el trànsit entre aquells hosts està xifrat amb OpenVPN.
Aquesta documentació s'ha fet administrant el servidor via SSH des del host amfitrió amb usuari amb permisos d'administració usant sudo o bé el superusuari root.
El servidor es troba a 172.16.70.101.
Procediment
Tinc dues màquines: una amb Ubuntu Server i l'altra amb Ubuntu Desktop (el client). Haurem de configurar primer el servidor perquè sigui una Entitat Certificadora (CA) perquè OpenVPN es basa en el xifrat amb SSL; pel que necessitarem una entitat que pugui emetre certificats. Una vegada el servidor tingui els certificats necessaris, instal·larem i configurarem el servidor OpenVPN i, finalment, el client es connectarà al servidor.
Servidor
Primer de tot actualitzarem la llista de repositoris i el programari instal·lat
sudo apt update sudo apt upgrade
Instal·larem els paquets necessaris per al servidor OpenVPN i el paquet necessari per a crear claus públiques, privades i certificats RSA, a més a més de git que ens permetrà fer servir un script automàtic per a posar en marxa el servidor i afegir clients de manera ràpida i fàcil
sudo apt-get install openvpn easy-rsa git
Clonarem el repositori dins el directori /opt...
cd /opt git clone https://github.com/Nyr/openvpn-install.git
Ens mourem dins el directori que hem clonat i farem executable l'script d'instal·lació
cd openvpn-install chmod +x openvpn-install.sh
Ara executarem l'script
./openvpn.install.sh
Se'ns demanaran paràmetres com ara l'adreça d'escolta del servidor, l'adreça IP pública (si aquest es troba darrere un NAT), el protocol que volem fer servir per la xarxa virtual (UDP/TCP), el port d'escolta, els DNS que volem que configurin els clients (mantenir els que tinguin o bé usar els de Google, OpenDNS, etc...) i finalment el nom pel client que farà servir aquella connexió.
Welcome to this OpenVPN "road warrior" installer! I need to ask you a few questions before starting the setup. You can leave the default options and just press enter if you are ok with them. First, provide the IPv4 address of the network interface you want OpenVPN listening to. IP address: 172.16.70.101 This server is behind NAT. What is the public IPv4 address or hostname? Public IP address / hostname: 192.168.70.2 Which protocol do you want for OpenVPN connections? 1) UDP (recommended) 2) TCP Protocol [1-2]: 1 What port do you want OpenVPN listening to? Port: 1194 Which DNS do you want to use with the VPN? 1) Current system resolvers 2) 1.1.1.1 3) Google 4) OpenDNS 5) Verisign DNS [1-5]: 4 Finally, tell me your name for the client certificate. Please, use one word only, no special characters. Client name: fedora29 Okay, that was all I needed. We are ready to set up your OpenVPN server now.
Una vegada posats a punt els paràmetres, el procediment de l'script és instal·lar paquets necessaris per a crear certificats i finalment generar l'arxiu .ovpn que hem de fer arribar al client perquè es connecti. Si necessitessim donar accés a un nou client, tan sols hauríem d'executar l'script de nou amb els mateixos paràmetres i canviant el nom del client.
Using SSL: openssl OpenSSL 1.1.0g 2 Nov 2017
init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /etc/openvpn/easy-rsa/pki
Generating RSA private key, 2048 bit long modulus
....................................+++
................+++
e is 65537 (0x010001)
Using SSL: openssl OpenSSL 1.1.0g 2 Nov 2017
Generating a 2048 bit RSA private key
..........................................+++
.......+++
writing new private key to '/etc/openvpn/easy-rsa/pki/private/server.key.wWa8Opze92'
-----
Using configuration from ./safessl-easyrsa.cnf
Can't open /etc/openvpn/easy-rsa/pki/index.txt.attr for reading, No such file or directory
139781053428160:error:02001002:system library:fopen:No such file or directory:../crypto/bio/bss_file.c:74:fopen('/etc/openvpn/easy-rsa/pki/index.txt.attr','r')
139781053428160:error:2006D080:BIO routines:BIO_new_file:no such file:../crypto/bio/bss_file.c:81:
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName :ASN.1 12:'server'
Certificate is to be certified until Jan 18 09:41:59 2029 GMT (3650 days)
Write out database with 1 new entries
Data Base Updated
Using SSL: openssl OpenSSL 1.1.0g 2 Nov 2017
Generating a 2048 bit RSA private key
..........+++
.......+++
writing new private key to '/etc/openvpn/easy-rsa/pki/private/fedora29.key.bZUBYtJO20'
-----
Using configuration from ./safessl-easyrsa.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName :ASN.1 12:'fedora29'
Certificate is to be certified until Jan 18 09:42:00 2029 GMT (3650 days)
Write out database with 1 new entries
Data Base Updated
Using SSL: openssl OpenSSL 1.1.0g 2 Nov 2017
Using configuration from ./safessl-easyrsa.cnf
An updated CRL has been created.
CRL file: /etc/openvpn/easy-rsa/pki/crl.pem
396
Finished!
Your client configuration is available at: /root/fedora29.ovpn
If you want to add more clients, you simply need to run this script again!