dev tun
proto udp
server 10.8.0.0 255.255.255.0
secret secret.key
Mentre per il client:
dev tun
proto udp
client
remote example.org
secret secret.key
I file di configurazione sono passati a OpenVPN con l'opzione --config
openvpn --config client.conf
dev tun|tap|tunX|tapX
TUN/TAP è il nome di una tipologia di interfacce virtuali utlizzate da OpenVPN, entrambe appaiono ai programmi come un'interfaccia di rete,
tuttavia ci sono nette differenze tra di esse.
openvpn --mktun --dev tun0
proto udp|tcp-server|tcp-client|udp6|tcp6
server 192.168.2.0 255.255.255.0
remote 198.51.100.99
remote pippo.example.org
La chiave può essere generata utilizzando il comando
openvpn --genkey --secret secret.key
NB: La configurazione con chiave precondivisa è scosigliabile per motivi di sicurezza, tuttavia bisogna sempre utilizzare il buon senso e considerare le necessità specifiche della situazione
Push permette di inviare impostazioni ai client che si connettono, in questo modo si possono colmunicare informazioni su:
N.B.: i client che si connettono devono avere l'opzione --pull
(o --client
) per
ricevere le configurazioni tramite push
push "route 192.168.0.0 255.255.255.0 10.7.0.1"
EasyRSA 3 è la versione più recente nella quale i vari script sono stati riuniti in un unico script che funziona con comandi. Per esempio un comando che appare in molte documentazioni è
./build-ca
Che nella nuova versione si traduce in:
./easyrsa build-ca
easyrsa
di molte distro linux sono fermi alla versione 2.2.2 (di 3 anni fa).
git clone https://github.com/OpenVPN/easy-rsa.git
cd easy-rsa/easyrsa3
N.B.: In alcune slide si
userà ... per indicare la cartella contenente lo script easyrsa
Prima di tutto dobbiamo inizializzare la PKI con il comando init-pki
./easyrsa init-pki
init-pki complete; you may now create a CA or requests.
Your newly created PKI dir is: /home/Giacomo/easy-rsa/easyrsa3/pki
Creiamo un certificato di root con build-ca
./easyrsa build-ca
Generating a 2048 bit RSA private key
writing new private key to '.../pki/private/ca.key.mAWiQlaAWe'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
Common Name (eg: your user) [Easy-RSA CA]:CA_test
CA creation complete and you may now import and sign cert requests.
Your new CA certificate file for publishing is at:
/home/Giacomo/easy-rsa/easyrsa3/pki/ca.crt
N.B: build-ca creerà un file private/ca.key, quando si è finiti di
creare i certificati è consigliabile riporre il file in un storage sicuro (es. chiavetta)
Continuiamo creando un certificato per il server
./easyrsa build-server-full server
Generating a 2048 bit RSA private key
writing new private key to '.../pki/private/server.key.56TeNVLfcg'
Enter PEM pass phrase:
Verifying - Enter PEM pass phrase:
Enter pass phrase for /home/Giacomo/easy-rsa/easyrsa3/pki/private/ca.key:
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
commonName :T61STRING:'server'
Certificate is to be certified until Apr 17 13:26:12 2026 GMT (3650 days)
Analogamente usiamo ./easyrsa build-client-full client
per creare un certificato per il server
Concludiamo creando i parametri per lo scambio di chiavi Diffie-Helman
./easyrsa gen-dh
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
...
DH parameters of size 2048 created at /home/Giacomo/easy-rsa/easyrsa3/pki/dh.pem
pki
|-- ca.crt
|-- dh.pem
|-- issued
| |-- client.crt
| `-- server.crt
`-- private
|-- ca.key
|-- client.key
`-- server.key
ca ca.crt
cert server.crt
key server.key
dh dh.pem
Mentre al lato client:
ca ca.crt
cert client.crt
key client.key
push "redirect-gateway def1"
E poi da shell
# echo 1 > /proc/sys/net/ipv4/ip_forward
# iptables -I FORWARD -i tun0 -o eth0 -s 10.8.0.0/24 -m conntrack --ctstate NEW -j ACCEPT
# iptables -I FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
# iptables -t nat -I POSTROUTING -o eth0 -s 10.8.0.0/24 -j MASQUERADE
Creiamo un'interfaccia tap persistente con
openvpn --mktun --dev tap0
e settiamo dev tap0
nella configurazione di openvpn e procediamo alla connessione
infine creiamo il bridge e lo connettiamo all'interfaccia eth0
ip link add name br0 type bridge
ip link set br0 up
ip link set eth0 master br0
ip link set tap0 master br0
nell'esempio si usa ip tuttavia esistono altre utility come brctl e ifconfig per creare bridge.