<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://www.bask.se/index.php?action=history&amp;feed=atom&amp;title=Howto%2FOpenVPN</id>
	<title>Howto/OpenVPN - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://www.bask.se/index.php?action=history&amp;feed=atom&amp;title=Howto%2FOpenVPN"/>
	<link rel="alternate" type="text/html" href="http://www.bask.se/index.php?title=Howto/OpenVPN&amp;action=history"/>
	<updated>2026-04-19T14:28:58Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.41.0</generator>
	<entry>
		<id>http://www.bask.se/index.php?title=Howto/OpenVPN&amp;diff=5403&amp;oldid=prev</id>
		<title>Pf: Created page with &quot;This is how to install [https://openvpn.net/ OpenVPN] 2.4.7 server including a local CA on [https://releases.ubuntu.com/20.04/ Ubuntu 20.04.1 LTS (Focal Fossa)].  We will also...&quot;</title>
		<link rel="alternate" type="text/html" href="http://www.bask.se/index.php?title=Howto/OpenVPN&amp;diff=5403&amp;oldid=prev"/>
		<updated>2021-01-02T16:37:11Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;This is how to install [https://openvpn.net/ OpenVPN] 2.4.7 server including a local CA on [https://releases.ubuntu.com/20.04/ Ubuntu 20.04.1 LTS (Focal Fossa)].  We will also...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;This is how to install [https://openvpn.net/ OpenVPN] 2.4.7 server including a local CA on [https://releases.ubuntu.com/20.04/ Ubuntu 20.04.1 LTS (Focal Fossa)].&lt;br /&gt;
&lt;br /&gt;
We will also create client configurations for OpenVPN and OpenWRT.&lt;br /&gt;
&lt;br /&gt;
Assumptions:&lt;br /&gt;
Login username is &amp;quot;ubuntu&amp;quot;.&lt;br /&gt;
Working material saved under that users home directory&lt;br /&gt;
Editor used is &amp;quot;vi&amp;quot;&lt;br /&gt;
OpenVPN Server’s CommonName will be ov-server&lt;br /&gt;
Use OpenVPNs &amp;quot;tls-crypt&amp;quot; functionality&lt;br /&gt;
The default route interface is &amp;quot;eth0&amp;quot;&lt;br /&gt;
Use Layer 3 routing (tun interface and separate IP addresses)&lt;br /&gt;
IP address range for client is 10.88.0.0/16&lt;br /&gt;
Use NAT&lt;br /&gt;
&lt;br /&gt;
Good references:&lt;br /&gt;
https://openvpn.net/&lt;br /&gt;
https://www.digitalocean.com/community/tutorials/how-to-set-up-and-configure-an-openvpn-server-on-ubuntu-20-04&lt;br /&gt;
https://www.digitalocean.com/community/tutorials/how-to-set-up-and-configure-a-certificate-authority-ca-on-ubuntu-20-04&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Install needed packages:&lt;br /&gt;
&amp;lt;code&amp;gt;sudo apt update&lt;br /&gt;
sudo apt install openvpn easy-rsa&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Bootstrat Easy-RSA&lt;br /&gt;
&lt;br /&gt;
mkdir ~/easy-rsa&lt;br /&gt;
&lt;br /&gt;
cp -a /usr/share/easy-rsa/* ~/easy-rsa/&lt;br /&gt;
&lt;br /&gt;
Creating PKI structure including local CA&lt;br /&gt;
&lt;br /&gt;
sudo chown ubuntu ~/easy-rsa&lt;br /&gt;
chmod 700 ~/easy-rsa&lt;br /&gt;
cd ~/easy-rsa&lt;br /&gt;
./easyrsa init-pki&lt;br /&gt;
&lt;br /&gt;
vi vars&lt;br /&gt;
&lt;br /&gt;
set_var EASYRSA_REQ_COUNTRY    &amp;quot;SE&amp;quot;&lt;br /&gt;
set_var EASYRSA_REQ_PROVINCE   &amp;quot;VG&amp;quot;&lt;br /&gt;
set_var EASYRSA_REQ_CITY       &amp;quot;Trollhattan&amp;quot;&lt;br /&gt;
set_var EASYRSA_REQ_ORG        &amp;quot;Bask&amp;quot;&lt;br /&gt;
set_var EASYRSA_REQ_EMAIL      &amp;quot;admin@bask.se&amp;quot;&lt;br /&gt;
set_var EASYRSA_REQ_OU         &amp;quot;OPS&amp;quot;&lt;br /&gt;
set_var EASYRSA_ALGO           &amp;quot;ec&amp;quot;&lt;br /&gt;
set_var EASYRSA_DIGEST         &amp;quot;sha512&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Create the CA certificate without password.  Remove &amp;quot;nopass&amp;quot; if you would like to enter a password for each use.&lt;br /&gt;
./easyrsa build-ca nopass&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
sudo cp pki/ca.crt /usr/local/share/ca-certificates/&lt;br /&gt;
sudo update-ca-certificates&lt;br /&gt;
&lt;br /&gt;
Creating OpenVPN Server Certificate and Private Key&lt;br /&gt;
&lt;br /&gt;
./easyrsa gen-req ov-server nopass&lt;br /&gt;
&lt;br /&gt;
./easyrsa sign-req server ov-server&lt;br /&gt;
&lt;br /&gt;
sudo cp pki/private/ov-server.key /etc/openvpn/server/&lt;br /&gt;
sudo cp pki/issued/ov-server.crt  /etc/openvpn/server/&lt;br /&gt;
sudo cp pki/ca.crt                /etc/openvpn/server/&lt;br /&gt;
&lt;br /&gt;
openvpn --genkey --secret ta.key&lt;br /&gt;
sudo cp ta.key /etc/openvpn/server&lt;br /&gt;
&lt;br /&gt;
mkdir -p ~/client-configs/keys&lt;br /&gt;
chmod -R 700 ~/client-configs&lt;br /&gt;
cp ~/easy-rsa/ta.key ~/client-configs/keys/&lt;br /&gt;
&lt;br /&gt;
./easyrsa gen-req client1 nopass&lt;br /&gt;
./easyrsa sign-req client client1&lt;br /&gt;
&lt;br /&gt;
cp pki/private/client1.key ~/client-configs/keys/&lt;br /&gt;
cp pki/issued/client1.crt ~/client-configs/keys/&lt;br /&gt;
sudo cp /etc/openvpn/server/ca.crt ~/client-configs/keys/&lt;br /&gt;
sudo chown ubuntu ~/client-configs/keys/*&lt;br /&gt;
&lt;br /&gt;
Configure OpenVPN&lt;br /&gt;
&lt;br /&gt;
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/server/&lt;br /&gt;
sudo gunzip /etc/openvpn/server/server.conf.gz&lt;br /&gt;
&lt;br /&gt;
sudo vi /etc/openvpn/server/server.conf&lt;br /&gt;
&lt;br /&gt;
Add the following:&lt;br /&gt;
tls-crypt ta.key&lt;br /&gt;
cipher AES-256-GCM&lt;br /&gt;
auth SHA256&lt;br /&gt;
dh none&lt;br /&gt;
user nobody&lt;br /&gt;
group nogroup&lt;br /&gt;
push &amp;quot;redirect-gateway def1 bypass-dhcp&amp;quot;&lt;br /&gt;
push &amp;quot;dhcp-option DNS 8.8.8.8&amp;quot;&lt;br /&gt;
push &amp;quot;dhcp-option DNS 8.8.4.4&amp;quot;&lt;br /&gt;
cert ov-server.crt&lt;br /&gt;
key ov-server.key&lt;br /&gt;
&lt;br /&gt;
sudo nano /etc/sysctl.conf&lt;br /&gt;
net.ipv4.ip_forward = 1&lt;br /&gt;
sudo sysctl -p&lt;br /&gt;
&lt;br /&gt;
sudo nano /etc/ufw/before.rules&lt;br /&gt;
&lt;br /&gt;
# START OPENVPN RULES&lt;br /&gt;
# NAT table rules&lt;br /&gt;
*nat&lt;br /&gt;
:POSTROUTING ACCEPT [0:0]&lt;br /&gt;
# Allow traffic from OpenVPN client to eth0 (change to the interface you discovered!)&lt;br /&gt;
-A POSTROUTING -s 10.88.0.0/16 -o eth0 -j MASQUERADE&lt;br /&gt;
COMMIT&lt;br /&gt;
# END OPENVPN RULES&lt;br /&gt;
&lt;br /&gt;
sudo nano /etc/default/ufw&lt;br /&gt;
DEFAULT_FORWARD_POLICY=&amp;quot;ACCEPT&amp;quot; (cahnge from DROP)&lt;br /&gt;
&lt;br /&gt;
Update firewall to allow UDP port 1194&lt;br /&gt;
sudo ufw allow 1194/udp&lt;br /&gt;
&lt;br /&gt;
sudo ufw disable&lt;br /&gt;
sudo ufw enable&lt;br /&gt;
&lt;br /&gt;
sudo systemctl -f enable openvpn-server@server.service&lt;br /&gt;
sudo systemctl start openvpn-server@server.service&lt;br /&gt;
sudo systemctl status openvpn-server@server.service&lt;br /&gt;
&lt;br /&gt;
mkdir -p ~/client-configs/files&lt;br /&gt;
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf&lt;br /&gt;
&lt;br /&gt;
nano ~/client-configs/base.conf&lt;br /&gt;
user nobody&lt;br /&gt;
group nogroup&lt;br /&gt;
&lt;br /&gt;
;ca ca.crt&lt;br /&gt;
;cert client.crt&lt;br /&gt;
;key client.key&lt;br /&gt;
&lt;br /&gt;
;tls-auth ta.key 1&lt;br /&gt;
&lt;br /&gt;
cipher AES-256-GCM&lt;br /&gt;
auth SHA256&lt;br /&gt;
&lt;br /&gt;
key-direction 1&lt;br /&gt;
&lt;br /&gt;
; script-security 2&lt;br /&gt;
; up /etc/openvpn/update-resolv-conf&lt;br /&gt;
; down /etc/openvpn/update-resolv-conf&lt;br /&gt;
&lt;br /&gt;
; script-security 2&lt;br /&gt;
; up /etc/openvpn/update-systemd-resolved&lt;br /&gt;
; down /etc/openvpn/update-systemd-resolved&lt;br /&gt;
; down-pre&lt;br /&gt;
; dhcp-option DOMAIN-ROUTE .&lt;br /&gt;
&lt;br /&gt;
nano ~/client-configs/make_config.sh&lt;br /&gt;
&lt;br /&gt;
#!/bin/bash&lt;br /&gt;
&lt;br /&gt;
# First argument: Client identifier&lt;br /&gt;
&lt;br /&gt;
KEY_DIR=~/client-configs/keys&lt;br /&gt;
OUTPUT_DIR=~/client-configs/files&lt;br /&gt;
BASE_CONFIG=~/client-configs/base.conf&lt;br /&gt;
&lt;br /&gt;
cat ${BASE_CONFIG} \&lt;br /&gt;
    &amp;lt;(echo -e &amp;#039;&amp;lt;ca&amp;gt;&amp;#039;) \&lt;br /&gt;
    ${KEY_DIR}/ca.crt \&lt;br /&gt;
    &amp;lt;(echo -e &amp;#039;&amp;lt;/ca&amp;gt;\n&amp;lt;cert&amp;gt;&amp;#039;) \&lt;br /&gt;
    ${KEY_DIR}/${1}.crt \&lt;br /&gt;
    &amp;lt;(echo -e &amp;#039;&amp;lt;/cert&amp;gt;\n&amp;lt;key&amp;gt;&amp;#039;) \&lt;br /&gt;
    ${KEY_DIR}/${1}.key \&lt;br /&gt;
    &amp;lt;(echo -e &amp;#039;&amp;lt;/key&amp;gt;\n&amp;lt;tls-crypt&amp;gt;&amp;#039;) \&lt;br /&gt;
    ${KEY_DIR}/ta.key \&lt;br /&gt;
    &amp;lt;(echo -e &amp;#039;&amp;lt;/tls-crypt&amp;gt;&amp;#039;) \&lt;br /&gt;
    &amp;gt; ${OUTPUT_DIR}/${1}.ovpn&lt;br /&gt;
&lt;br /&gt;
chmod 700 ~/client-configs/make_config.sh&lt;br /&gt;
&lt;br /&gt;
cd ~/client-configs&lt;br /&gt;
./make_config.sh client1&lt;/div&gt;</summary>
		<author><name>Pf</name></author>
	</entry>
</feed>