OpenVPN Setup (Server & Client)
Environment
-
VPN Server
Field Spec or Version CPU QEMU Virtual CPU version 2.5+ (2 Cores) RAM 2G OS Ubuntu 24.04.1 LTS (Noble Numbat) Network interface ens18enp6s18 with static IP 192.168.3.100/24DNS 192.168.3.1 (Private DNS Server) -
VPN Client
Field Spec or Version CPU QEMU Virtual CPU version 2.5+ (2 Cores) RAM 2G OS Ubuntu 24.04.1 LTS (Noble Numbat) Network interface ens18enp6s18 with static IP 192.168.5.100/24DNS 192.168.5.1 (Private DNS Server)
Server - Package Installation
apt install -y openvpn
Server - Configuration
-
Copy from sample configuration file
cp /usr/share/doc/openvpn/examples/sample/config-files/server.conf /etc/openvpn/server/server.conf
-
Edit the copied file as following content
port 1194 proto tcp # Use routing mode instead of bridge mode dev tun ca ca.crt cert example.fake.crt key example.fake.key dh dh.pem topology subnet server 192.168.7.0 255.255.255.0 # Add route for subnet on server to connected VPN clients # Notice: firewall rule adjustment is required push "route 192.168.3.0 255.255.255.0"
Server - Firewall rule
-
Allow incoming connections to port 1194 if default policy of chain INPUT is NOT ACCEPT
-
Allow VPN interface and subnet to access other devices inside the server subnet (192.168.3.0/24)
iptables -A FORWARD -i tun0 -o enp6s18 -s 192.168.7.0/24 -d 192.168.3.0/24 -j ACCEPT iptables -A FORWARD -i enp6s18 -o tun0 -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -t nat -A POSTROUTING -s 192.168.7.0/24 -o enp6s18 -j MASQUERADE
-
Don't forget to save the changes to both firewall configuration file and runtime configuration
# Save iptables runtime to file iptables-save > /etc/iptables/rules.v4