This comprehensive Linux guide expects that you run the following commands as root user but if you decide to run the commands as a different user then ensure that the user has
sudo
access and that you precede each of the privileged commands withsudo
OpenVPN is an open-source VPN protocol allowing secure online access from point-to-point completely free of charge. It implements multiple secuirty layers using the SSL/TLS protocol. You can bypass blocked site and increase your privacy or safety online by being an anonymous user as your actual credentials and location are hidden to the target website.
Finding your own IP Address
First, you need to find your own IP Address. You can use following commands to find IPv4 public address.
ip addr show eth0
Or if your network card is identified as eth1 use the following command, otherwise type the identifier of your corresponding network card.
ip addr show eth1
Aternatively you can also view your public IP Address by using the host command.
host myip.opendns.com resolver1.opendns.com
Update System Libraries
Its a good practice to update system libraries before continuing so you can use the following commands to update your system
apt-get update
apt-get upgrade
You might also need to reboot, use the following command to reboot your linux machine.
reboot
Installing Uncomplicated Firewall
OpenVPN server must be configured on Debian 9 server along with firewall to secure and hardened OpenVPN Server on Debian 9
apt-get install ufw
After installation, you need to allow certain ports to be opened through the firewall such as SSH port 22, 80, 443. Use the following commands to enable the required ports.
ufw allow 22
ufw allow 80
ufw allow 443
Enabling The Firewall
To enable the firewall you can use the following commands
ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
Verification Of Firewall Rules
To verify the firewall you can use the following commands
ufw status
Status: active
To Action From
-- ------ ----
22 ALLOW Anywhere
80 ALLOW Anywhere
443 ALLOW Anywhere
22 (v6) ALLOW Anywhere (v6)
80 (v6) ALLOW Anywhere (v6)
443 (v6) ALLOW Anywhere (v6)
Downloading The OpenVPN Install.sh Script
Now its time to download and install the OpenVPN. You can use the following wget command to download the script.
wget https://git.io/vpn -O openvpn-install.sh
Configuring OpenVPN Server
After the download, type the following command to install and configure OpenVPN server automatically.
bash openvpn-install.sh
When the terminal asks for IP address, provide the actual IP address of the system previously determined in starting steps. Set the Port number to 1194. If you are not using a web server, you can set the port to 443 as well. Type in a client name and press enter to continue and finish the installation procedure.
The VPN service has been enabled and ready to use. You can view the configured firewall rules by using the following command
nano /etc/rc.local
- /etc/rc.local
-
#!/bin/sh -e iptables -I FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -I FORWARD -s 10.8.0.0/24 -j ACCEPT iptables -I INPUT -p udp --dport 1194 -j ACCEPT iptables -t nat -A POSTROUTING -s 10.8.0.0/24 ! -d 10.8.0.0/24 -j SNAT --to 104.237.156.154 exit 0
The OpenVPN server configuration can be viewed by the following command:
vi -M /etc/openvpn/server.conf
- /etc/openvpn/server.conf
-
port 1194 proto udp dev tun sndbuf 0 rcvbuf 0 ca ca.crt cert server.crt key server.key dh dh.pem auth SHA512 tls-auth ta.key 0 topology subnet server 10.8.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt push "redirect-gateway def1 bypass-dhcp" push "dhcp-option DNS 173.230.155.5" push "dhcp-option DNS 173.255.212.5" push "dhcp-option DNS 173.255.219.5" push "dhcp-option DNS 173.255.241.5" push "dhcp-option DNS 173.255.243.5" push "dhcp-option DNS 173.255.244.5" push "dhcp-option DNS 173.230.145.5" push "dhcp-option DNS 173.230.147.5" push "dhcp-option DNS 74.207.241.5" push "dhcp-option DNS 74.207.242.5" keepalive 10 120 cipher AES-256-CBC comp-lzo user nobody group nogroup persist-key persist-tun status openvpn-status.log verb 3 crl-verify crl.pem
Starting, Stopping and Restarting the OpenVPN Service
To Start the Service
systemctl start openvpn@server
To Stop the Service
systemctl stop openvpn@server
To Restart The Service
systemctl restart openvpn@server
Client Configuration
On your server you will find a client configuration file named as
~/macos-vpn-client.ovpn. In the Next Step, copy this file to your local desktop using the scp and provide this file to your OpenVPN client to connect:
scp [email protected]:~/macos-vpn-client.ovpn
On the Client System, use the following commands to install OpenVPN on a Debian System
apt install openvpn
Alternatively for CentOS you can use
yum install openvpn
Copy macos-vpn-client.ovpn as follows:
cp macos-vpn-client.ovpn /etc/openvpn/client.conf
Test connectivity using
openvpn --client --config /etc/openvpn/client.conf
To run this automatically at startup use:
systemctl start openvpn@client
Test the connectivity again using:
ping 10.8.0.1
ip route
dig TXT +short o-o.myaddr.l.google.com @ns1.google.com