Assume we have two Linux virtual machines A and B, where A and B act as Server and Client for each other.
TLS Mode
Assume A acts as the server and B acts as the client.
TLS Server
-
Download OpenVPN on A:
sudo apt-get install openvpn -
In the
/usr/share/doc/openvpn/examples/sample-keys/folder there are sample keys. On the server, copyca.crt,server.key,server.crt, anddh2048.pemto/etc/openvpn/tls-server:sudo cp /usr/share/doc/openvpn/examples/sample-keys/{ca.crt,server.key,server.crt,dh2048.pem} /etc/openvpn/tls-server -
Write the server configuration file:
port 1194 proto udp dev tun0 ca ca.crt cert server.crt key server.key dh dh2048.pem server 10.8.0.0 255.255.255.0 keepalive 10 120 user nobody group nogroup persist-key persist-tun verb 3 -
If using TCP connection, modify to:
port 1194 proto tcp-server dev tun0 ca ca.crt cert server.crt key server.key dh dh2048.pem server 10.8.0.0 255.255.255.0 keepalive 10 120 user nobody group nogroup persist-key persist-tun verb 3 -
Start the OpenVPN Server:
cd /etc/openvpn/tls-server sudo openvpn --config server.conf -
At this point, if you check the IP address, you should see the
tun0interface with address10.8.0.1.
TLS Client
-
Download OpenVPN on B:
sudo apt-get install openvpn -
From the
/usr/share/doc/openvpn/examples/sample-keys/directory on A, findca.crt,client.key, andclient.crt, and copy them to B:# In B sudo scp [A_username]@[A_addr]:/usr/share/doc/openvpn/examples/sample-keys/{ca.crt,client.crt,client.key} /etc/openvpn/tls-client -
Write
server.conf:client dev tun0 remote [A_addr] 1194 udp ca ca.crt cert client.crt key client.key user nobody group nogroup persist-key persist-tun verb 3 -
If using TCP connection:
client dev tun0 remote [A_addr] 1194 tcp-client ca ca.crt cert client.crt key client.key user nobody group nogroup persist-key persist-tun verb 3 -
Run the OpenVPN Client:
cd /etc/openvpn/tls-client sudo openvpn --config client.conf -
At this point, if you execute:
ping 10.8.0.1If successful, it means OpenVPN has been established correctly.
PSK Mode
PSK mode doesn’t require complex key configuration and is simpler, but the security level is lower. Here, A acts as the Server and B acts as the Client.
PSK Server
-
Generate
psk.keyon A and copy a copy to B:# In A cd /etc/openvpn/psk-server openvpn --genkey --secret psk.key# In B cd /etc/openvpn/psk-client scp [A_username]@[A_addr]:/etc/openvpn/psk-server/psk.key . -
Write
server.conf:dev-type tun dev tun0 ifconfig 10.8.0.6 10.8.0.1 keepalive 10 120 persist-tun secret psk.key verb 0 # proto tcp-serverIf using TCP connection, uncomment the last line.
-
Start OpenVPN:
cd /etc/openvpn/psk-server sudo openvpn --config server.conf
PSK Client
-
Write
client.conf:dev-type tun dev tun0 remote [A_addr] 1194 udp ifconfig 10.8.0.1 10.8.0.6 keepalive 10 120 persist-tun secret psk.key verb 0 -
If using TCP connection:
dev-type tun dev tun0 remote 10.10.200.120 1194 tcp-client ifconfig 10.8.0.1 10.8.0.6 keepalive 10 120 persist-tun secret psk.key verb 0