openvpn
configuration
Server
Server installation
$ apt install openvpn easy-rsa
Certificate Authority Setup
$ make-cadir /etc/openvpn/easy-rsa
$ cd /etc/openvpn/easy-rsa
$ ./easyrsa gen-dh
$ ./easyrsa init-pki
$ ./easyrsa build-ca nopass
Server Keys and Certificates
$ ./easyrsa gen-dh
$ ./easyrsa gen-req myservername nopass
$ ./easyrsa sign-req server myservername
$ cp pki/dh.pem pki/ca.crt \
pki/issued/myservername.crt \
pki/private/myservername.key \
/etc/openvpn/
Client Certificate (for server)
$ ./easyrsa gen-req myclient nopass
$ ./easyrsa sign-req client myclient
Simple Server Configuration
$ gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > /etc/openvpn/myserver.conf
Edit /etc/openvpn/myserver.conf
ca ca.crt
cert myservername.crt
key myservername.key
dh dh.pem
user nobody
group nogroup
Gen ta key
$ cd /etc/openvpn
$ openvpn --genkey --secret ta.key
Validate myserver.conf file
$ openvpn /etc/openvpn/myserver.conf
Edit /etc/sysctl.conf and uncomment
#net.ipv4.ip_forward=1
Then reload sysctl
$ sysctl -p /etc/sysctl.conf
Start openvpn
$ systemctl enable openvpn@myserver
$ systemctl start openvpn@myserver
To view logs
$ journalctl -u openvpn@myserver -xe
Check if OpenVPN created a tun0 interface
$ ip addr show dev tun0
Client
Simple Client Configuration
$ apt install openvpn
$ cat /usr/share/doc/openvpn/examples/sample-config-files/client.conf > /etc/openvpn/myclient.conf
Copy client keys from server
ca ca.crt
cert myclient1.crt
key myclient1.key
tls-auth ta.key 1
Edit myclient.conf
client
remote vpnserver.example.com 1194
Start openvpn
$ systemctl start openvpn@client
Check on the client if it created a tun0 interface
$ ip addr show dev tun0
Check it you can ping the OpenVPN server
$ ping 10.8.0.1
Check out your routes
$ ip route
Script to configure Server
#!/bin/sh
apt install openvpn easy-rsa
make-cadir /etc/openvpn/easy-rsa
cd /etc/openvpn/easy-rsa
./easyrsa gen-dh
./easyrsa init-pki
./easyrsa build-ca nopass
./easyrsa gen-dh
./easyrsa gen-req server nopass
./easyrsa sign-req server server
cp pki/dh.pem /etc/openvpn/dh2048.pem
cp pki/ca.crt \
pki/issued/server.crt \
pki/private/server.key \
/etc/openvpn/
cd /etc/openvpn
gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz > server.conf
sed -i -e "s/;user nobody/user nobody/" \
-e "s/;group nogroup/group nogroup/" \
-e "s/;client-to-client/client-to-client/" \
server.conf
openvpn --genkey --secret ta.key
sed -i -e "s/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/" \
/etc/sysctl.conf
sysctl -p /etc/sysctl.conf
systemctl enable openvpn@server
systemctl start openvpn@server
journalctl -u openvpn@server -xe
Script to configure Client
#!/bin/sh
username=john
servername=workvpn
clientname=$(echo $servername)_client
tmpdir=$PWD/tmp
dumpdir=$tmpdir/$clientname
rm -rf $dumpdir
mkdir -p $dumpdir
cd /etc/openvpn/easy-rsa
./easyrsa gen-req $clientname nopass
./easyrsa sign-req client $clientname
cp /etc/openvpn/easy-rsa/pki/issued/$clientname.crt \
/etc/openvpn/easy-rsa/pki/private/$clientname.key \
$dumpdir/
cp /etc/openvpn/ta.key $dumpdir/$servername.ta.key
cp /etc/openvpn/ca.crt $dumpdir/$servername.ca.crt
cat /usr/share/doc/openvpn/examples/sample-config-files/client.conf > \
$dumpdir/$clientname.conf
sed -i -e "s/;user nobody/user nobody/" \
-e "s/;group nogroup/group nogroup/" \
-e "s/tls-auth ta.key 1/tls-auth $servername.ta.key 1/" \
-e "s/ca ca.crt/ca $servername.ca.crt/" \
-e "s/cert client.crt/cert $clientname.crt/" \
-e "s/key client.key/key $clientname.key/" \
$dumpdir/$clientname.conf
chown $username:$username $tmpdir -R
Script to add route at client
/sbin/route add -net 10.8.0.0/24 dev tun0
Script to test with tcpdump
tcpdump -v -n -i tun0