====== Ubuntu - VPN - OpenVPN - L3 Tunneling ======
L3 tunneling will route the traffic at the OpenVPN server to the destination.
A L3 tunnel is easier to implement as there is no need to change something in the infrastructure.
----
===== Create the server config =====
# Port.
port 1194
# TCP or UDP.
proto tcp-server
mode server
tls-server
# tun or tap device.
# tun is an IP tunnel.
# tap an ethernet tunnel.
dev tun
# Our Server IP.
server 10.0.0.0 255.255.255.0
# Paths to the certs.
ca /etc/openvpn/easy-rsa/keys/ca.crt
cert /etc/openvpn/easy-rsa/keys/test.domain.local.crt
key /etc/openvpn/easy-rsa/keys/test.domain.local.key
# Diffie-Hellmann Parameters.
dh /etc/openvpn/easy-rsa/keys/dh2048.pem
# Ciphers.
cipher AES-256-CBC
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384
tls-version-min 1.2
remote-cert-tls client
# Tests the connection with a ping like packet.
# Wait=120sec.
keepalive 10 120
# Authentication.
auth SHA512
# Compression.
comp-lzo
# Sets new rights after the connection.
user nobody
group nogroup
# This is needed because of user nobody/group nobody.
persist-key
persist-tun
# Logging 0.
# Testing 5.
verb 0
**NOTE:** Ensure the file does end with **.conf**.
* A not used IP subnet is needed.
* This IP subnet will be used by the server and the client to communicate with each other.
* The clients will also get IP address from this subnet from the OpenVPN server.
----
===== Create the client config =====
client
float
dev tun
# tcp or udp.
proto tcp-client
remote test.domain.local 1194
ca ca.crt
cert client.domain.local.crt
key client.domain.local.key
cipher AES-256-CBC
tls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384
tls-version-min 1.2
verify-x509-name test.domain.local name
remote-cert-tls server
route 123.123.123.123 255.255.255.255
route 234.234.234.234 255.255.255.255
route 192.168.2.0 255.255.255.0
auth SHA512
nobind
comp-lzo
persist-key
persist-tun
verb 1
**NOTE:** The client config contains the necessary certificate entries and some individual routing entries.
* The individual routing entries will make sure, that traffic to those destinations will be routed through the tunnel.
* All other traffic will use the normal default gateway configured on the client.
**NOTE:** To use the tunnel to redirect all traffic through the tunnel the individual routing entries can be removed and this entry needs to be added:
redirect-gateway
If everything is working correctly, the client can connect to the server.
Unfortunately, communication with other destinations then the server itself will fail, as the OpenVPN server is not able to route traffic.
----
===== Enable Routing =====
Uncomment this line in /etc/sysctl.conf:
net.ipv4.ip_forward = 1
**NOTE:** This will make sure, that routing is enabled after the next system restart.
**NOTE:** To temporarily allow routing without a reboot:
echo 1 > /proc/sys/net/ipv4/ip_forward
----
===== NAT the clients to the IP of the OpenVPN server =====
iptables -t nat -A POSTROUTING -s 10.0.0.0/24 -o eth0 -j MASQUERADE
**NOTE:** This will instruct the system to map every packet from the 10.0.0.0/24 subnet to the IP address of the eth0 interface.
To make this permanent save the iptables rule to a file:
iptables-save > /etc/iptables.up.rules
To load the rules on startup use put it into this file:
iptables-restore < /etc/iptables.up.rules
This will make sure, that the NAT instruction is loaded after a system reboot.