{"id":1474,"date":"2022-02-20T21:58:16","date_gmt":"2022-02-20T21:58:16","guid":{"rendered":"https:\/\/tungle.ca\/?p=1474"},"modified":"2022-05-04T09:36:11","modified_gmt":"2022-05-04T17:36:11","slug":"implementing-openvpn-server-on-debian-10","status":"publish","type":"post","link":"https:\/\/tungle.ca\/?p=1474","title":{"rendered":"Implementing OpenVPN server on Debian 10"},"content":{"rendered":"\n<p>Below is a lab topology to use to implement the OpenVPN solution on Debian 10.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"567\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/05\/image-54-1024x567.png\" alt=\"\" class=\"wp-image-3738\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/05\/image-54-1024x567.png 1024w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/05\/image-54-300x166.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/05\/image-54-768x425.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/05\/image-54-200x111.png 200w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/05\/image-54.png 1529w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>In this lab, we need to make sure clients on the Internet are able to create secure OpenVPN connections to the OpenVPN server. Also, the OpenVPN client is able to access inside the network beside the VPN tunnel (LAMP subnet: 192.168.131.0\/24), and still access the Internet. Moreover, the Split tunneling feature should be used to make sure only traffic is related to accessing the LAMP subnet will be routed via the OpenVPN tunnel. All other traffic will use a public network adapter (Internet).<\/p>\n\n\n\n<p>IP addresses of Debian OpenVPN server.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"972\" height=\"409\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-84.png\" alt=\"\" class=\"wp-image-1476\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-84.png 972w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-84-300x126.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-84-768x323.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-84-200x84.png 200w\" sizes=\"auto, (max-width: 972px) 100vw, 972px\" \/><\/figure>\n\n\n\n<p>Access SSH from LinuxMint to easy to copy and paste commands.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"848\" height=\"686\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/1-1.png\" alt=\"\" class=\"wp-image-1477\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/1-1.png 848w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/1-1-300x243.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/1-1-768x621.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/1-1-200x162.png 200w\" sizes=\"auto, (max-width: 848px) 100vw, 848px\" \/><\/figure>\n\n\n\n<p>Upgrade Debian&#8217;s machine.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>apt-get update -y\napt-get upgrade -y<\/code><\/pre>\n\n\n\n<p>+ Enable IP Forwarding<\/p>\n\n\n\n<p>Edit the file \/etc\/sysctl.conf and add the line below at the end of the file.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>net.ipv4.ip_forward = 1<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"965\" height=\"538\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/2-1.png\" alt=\"\" class=\"wp-image-1478\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/2-1.png 965w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/2-1-300x167.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/2-1-768x428.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/2-1-200x112.png 200w\" sizes=\"auto, (max-width: 965px) 100vw, 965px\" \/><\/figure>\n\n\n\n<p>+ Enable proxy_arp for arp entry to appear on the OpenVPN server.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>echo 1 &gt; \/proc\/sys\/net\/ipv4\/conf\/all\/proxy_arp<\/code><\/pre>\n\n\n\n<p>+ Add a line below into \/etc\/sysctl.conf to make it permanent.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>net.ipv4.conf.all.proxy_arp=1<\/code><\/pre>\n\n\n\n<p>Run the following command to make the changes work.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>sysctl -p<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"428\" height=\"72\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/3-1.png\" alt=\"\" class=\"wp-image-1479\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/3-1.png 428w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/3-1-300x50.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/3-1-200x34.png 200w\" sizes=\"auto, (max-width: 428px) 100vw, 428px\" \/><\/figure>\n\n\n\n<p>+ Install OpenVPN server.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>apt-get install openvpn -y<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"579\" height=\"137\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/4.png\" alt=\"\" class=\"wp-image-1480\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/4.png 579w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/4-300x71.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/4-200x47.png 200w\" sizes=\"auto, (max-width: 579px) 100vw, 579px\" \/><\/figure>\n\n\n\n<p>Copy the easy-rsa directory from \/usr\/share directory to \/etc\/openvpn directory.for managing SSL certificates.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cp -r \/usr\/share\/easy-rsa \/etc\/openvpn\/<\/code><\/pre>\n\n\n\n<p>+ Set up Certificate Authority (CA)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cd \/etc\/openvpn\/easy-rsa\nnano vars\n#Add information below to the file.<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"979\" height=\"414\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/5-1.png\" alt=\"\" class=\"wp-image-1481\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/5-1.png 979w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/5-1-300x127.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/5-1-768x325.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/5-1-200x85.png 200w\" sizes=\"auto, (max-width: 979px) 100vw, 979px\" \/><\/figure>\n\n\n\n<pre class=\"wp-block-code\"><code>set_var EASYRSA                 \"$PWD\"\nset_var EASYRSA_PKI             \"$EASYRSA\/pki\"\nset_var EASYRSA_DN              \"cn_only\"\nset_var EASYRSA_REQ_COUNTRY     \"CANADA\"\nset_var EASYRSA_REQ_PROVINCE    \"BC\"\nset_var EASYRSA_REQ_CITY        \"Vancouver\"\nset_var EASYRSA_REQ_ORG         \"BCIT Student\"\nset_var EASYRSA_REQ_EMAIL\t\"admin@newhorizon.ca\"\nset_var EASYRSA_REQ_OU          \"BCIT Student\"\nset_var EASYRSA_KEY_SIZE        2048\nset_var EASYRSA_ALGO            rsa\nset_var EASYRSA_CA_EXPIRE\t7500\nset_var EASYRSA_CERT_EXPIRE     365\nset_var EASYRSA_NS_SUPPORT\t\"no\"\nset_var EASYRSA_NS_COMMENT\t\"BCIT Student CERTIFICATE AUTHORITY\"\nset_var EASYRSA_EXT_DIR         \"$EASYRSA\/x509-types\"\nset_var EASYRSA_SSL_CONF        \"$EASYRSA\/openssl-easyrsa.cnf\"\nset_var EASYRSA_DIGEST          \"sha256\"\n<\/code><\/pre>\n\n\n\n<p>&nbsp;Run the following command to initiate your own PKI.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">.\/easyrsa init-pki<\/pre>\n\n\n\n<p>Build the CA certificates.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">.\/easyrsa build-ca<\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"481\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/7-1-1024x481.png\" alt=\"\" class=\"wp-image-1482\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/7-1-1024x481.png 1024w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/7-1-300x141.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/7-1-768x361.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/7-1-200x94.png 200w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/7-1.png 1270w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>+ Generate Server Certificate Files.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>.\/easyrsa gen-req tung-server nopass<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"869\" height=\"415\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/8-2.png\" alt=\"\" class=\"wp-image-1483\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/8-2.png 869w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/8-2-300x143.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/8-2-768x367.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/8-2-200x96.png 200w\" sizes=\"auto, (max-width: 869px) 100vw, 869px\" \/><\/figure>\n\n\n\n<p>+ Sign the public key of the Server Using Root CA.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">.\/easyrsa sign-req server tung-server<\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"878\" height=\"586\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/9-2.png\" alt=\"\" class=\"wp-image-1484\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/9-2.png 878w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/9-2-300x200.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/9-2-768x513.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/9-2-200x133.png 200w\" sizes=\"auto, (max-width: 878px) 100vw, 878px\" \/><\/figure>\n\n\n\n<p>Verify cert.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>openssl verify -CAfile pki\/ca.crt pki\/issued\/tung-server.crt <\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"887\" height=\"64\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/10-1.png\" alt=\"\" class=\"wp-image-1485\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/10-1.png 887w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/10-1-300x22.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/10-1-768x55.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/10-1-200x14.png 200w\" sizes=\"auto, (max-width: 887px) 100vw, 887px\" \/><\/figure>\n\n\n\n<p>+ Create  a strong Diffie-Hellman key to use for the key exchange<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>.\/easyrsa gen-dh<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"813\" height=\"450\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/11-1.png\" alt=\"\" class=\"wp-image-1486\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/11-1.png 813w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/11-1-300x166.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/11-1-768x425.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/11-1-200x111.png 200w\" sizes=\"auto, (max-width: 813px) 100vw, 813px\" \/><\/figure>\n\n\n\n<p>After creating all certificate files, copy them to the \/etc\/openvpn\/server\/ directory.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cp pki\/ca.crt \/etc\/openvpn\/server\/\ncp pki\/dh.pem \/etc\/openvpn\/server\/\ncp pki\/private\/tung-server.key \/etc\/openvpn\/server\/\ncp pki\/issued\/tung-server.crt \/etc\/openvpn\/server\/<\/code><\/pre>\n\n\n\n<p>+ Generate Client Certificate and Key File<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>.\/easyrsa gen-req client nopass<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"890\" height=\"414\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/13-1.png\" alt=\"\" class=\"wp-image-1487\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/13-1.png 890w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/13-1-300x140.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/13-1-768x357.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/13-1-200x93.png 200w\" sizes=\"auto, (max-width: 890px) 100vw, 890px\" \/><\/figure>\n\n\n\n<p>Next, sign the client key using your CA certificate.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>.\/easyrsa sign-req client client<\/code><\/pre>\n\n\n\n<p>Next, copy all client certificate and key file to the \/etc\/openvpn\/client\/ directory<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>cp pki\/ca.crt \/etc\/openvpn\/client\/\ncp pki\/issued\/client.crt \/etc\/openvpn\/client\/\ncp pki\/private\/client.key \/etc\/openvpn\/client\/<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"765\" height=\"82\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/14-1.png\" alt=\"\" class=\"wp-image-1488\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/14-1.png 765w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/14-1-300x32.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/14-1-200x21.png 200w\" sizes=\"auto, (max-width: 765px) 100vw, 765px\" \/><\/figure>\n\n\n\n<p>+ Configure OpenVPN Server<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>nano \/etc\/openvpn\/server.conf\n#---\nroot@debian10new:~# cat \/etc\/openvpn\/server.conf \nport 1194\nproto udp\n# USE TCP\n#port 4443\n#proto tcp-server\ndev tun\nca \/etc\/openvpn\/server\/ca.crt\ncert \/etc\/openvpn\/server\/tung-server.crt\nkey \/etc\/openvpn\/server\/tung-server.key\ndh \/etc\/openvpn\/server\/dh.pem\n# OpenVPN tunnel IP address range\nserver 172.16.1.0 255.255.255.0\n# server 192.168.131.0 255.255.255.0\n# route all traffic via OpenVPN\npush \"redirect-gateway def1\"\npush \"dhcp-option DNS 8.8.8.8\"\nduplicate-cn\ncipher AES-256-CBC\ntls-version-min 1.2\ntls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256\nauth SHA512\nauth-nocache\nkeepalive 20 60\npersist-key\npersist-tun\n#disable compress lz4 because of error on OpenVPN client\n#compress lz4\ndaemon\nuser nobody\ngroup nogroup\nlog-append \/var\/log\/openvpn.log\nverb 3\nroot@debian10new:~# \n#---<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"443\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/31-1-1024x443.png\" alt=\"\" class=\"wp-image-1489\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/31-1-1024x443.png 1024w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/31-1-300x130.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/31-1-768x332.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/31-1-200x87.png 200w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/31-1.png 1304w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>+ Start OpenVPN service.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>systemctl start openvpn@server\nsystemctl enable openvpn@server\nsystemctl status openvpn@server<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"199\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-85-1024x199.png\" alt=\"\" class=\"wp-image-1490\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-85-1024x199.png 1024w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-85-300x58.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-85-768x149.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-85-200x39.png 200w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-85.png 1497w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Show OpenVPN tunnel.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ip a show tun0<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1014\" height=\"143\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-86.png\" alt=\"\" class=\"wp-image-1491\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-86.png 1014w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-86-300x42.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-86-768x108.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-86-200x28.png 200w\" sizes=\"auto, (max-width: 1014px) 100vw, 1014px\" \/><\/figure>\n\n\n\n<p>+ Generate client configuration.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\">nano \/etc\/openvpn\/client\/client.ovpn\n#---\nclient\ndev tun\n# USE UDP\nproto udp\nremote 10.0.0.52 1194\n\n# USE TCP\n#proto tcp-server\n# Public IP address on OpenVPN is 10.0.0.52\n#remote 10.0.0.52 4443\nca ca.crt\ncert client.crt\nkey client.key\n#remote-cert-tls server\ncipher AES-256-CBC\n# Below lines is important to allow OpenVPN is still accessing the Internet when making OpenVPN session.\n# Split tunneling on OpenVPN\n# https:\/\/forums.openvpn.net\/viewtopic.php?t=8229\nroute-nopull\n# the LAN subnet that you need to access via VPN tunnel\nroute 192.168.131.0 255.255.255.0 vpn_gateway\nauth SHA512\nauth-nocache\ntls-version-min 1.2\ntls-cipher TLS-DHE-RSA-WITH-AES-256-GCM-SHA384:TLS-DHE-RSA-WITH-AES-256-CBC-SHA256:TLS-DHE-RSA-WITH-AES-128-GCM-SHA256:TLS-DHE-RSA-WITH-AES-128-CBC-SHA256\nresolv-retry infinite\n#compress lz4\nnobind\npersist-key\npersist-tun\nmute-replay-warnings\nverb 3\n#---<\/pre>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"448\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/30-1-1024x448.png\" alt=\"\" class=\"wp-image-1492\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/30-1-1024x448.png 1024w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/30-1-300x131.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/30-1-768x336.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/30-1-200x88.png 200w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/30-1.png 1322w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>+ Configure routing using UFW.<\/p>\n\n\n\n<p>By default, the UFW firewall is not installed in Debian 10.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>apt-get install ufw -y<\/code><\/pre>\n\n\n\n<p>Configure UFW to accept the forwarded packets.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>nano \/etc\/default\/ufw\n# Change the following line:\n\nDEFAULT_FORWARD_POLICY=\"ACCEPT\"<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"678\" height=\"537\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-88.png\" alt=\"\" class=\"wp-image-1495\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-88.png 678w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-88-300x238.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-88-200x158.png 200w\" sizes=\"auto, (max-width: 678px) 100vw, 678px\" \/><\/figure>\n\n\n\n<pre class=\"wp-block-preformatted\">nano \/etc\/ufw\/before.rules<\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"682\" height=\"211\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-87.png\" alt=\"\" class=\"wp-image-1494\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-87.png 682w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-87-300x93.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-87-200x62.png 200w\" sizes=\"auto, (max-width: 682px) 100vw, 682px\" \/><\/figure>\n\n\n\n<p>Note: Replace ens3 with the name of your public network interface in Debian OpenVPN server is ens35.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"729\" height=\"236\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-89.png\" alt=\"\" class=\"wp-image-1496\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-89.png 729w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-89-300x97.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/image-89-200x65.png 200w\" sizes=\"auto, (max-width: 729px) 100vw, 729px\" \/><\/figure>\n\n\n\n<p>Allow the default OpenVPN port 1194 and OpenSSH. Then, reload the UFW firewall.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>ufw allow 1194\/udp\nufw allow OpenSSH\nufw disable\nufw enable<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"775\" height=\"309\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/23-1.png\" alt=\"\" class=\"wp-image-1497\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/23-1.png 775w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/23-1-300x120.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/23-1-768x306.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/23-1-200x80.png 200w\" sizes=\"auto, (max-width: 775px) 100vw, 775px\" \/><\/figure>\n\n\n\n<p>+ Connect OpenVPN from a client.<\/p>\n\n\n\n<p>Install OpenVPN from the Kali machine.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>apt-get install openvpn -y<\/code><\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"685\" height=\"168\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/24-1.png\" alt=\"\" class=\"wp-image-1498\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/24-1.png 685w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/24-1-300x74.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/24-1-200x49.png 200w\" sizes=\"auto, (max-width: 685px) 100vw, 685px\" \/><\/figure>\n\n\n\n<p>On the client machine, run the command below to download all the client configuration files.<\/p>\n\n\n\n<pre class=\"wp-block-preformatted\"># public-vpn-server-ip: is 10.0.0.52\nscp -r root@public-vpn-server-ip:\/etc\/openvpn\/client .<\/pre>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"563\" height=\"169\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/25-1.png\" alt=\"\" class=\"wp-image-1499\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/25-1.png 563w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/25-1-300x90.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/25-1-200x60.png 200w\" sizes=\"auto, (max-width: 563px) 100vw, 563px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"718\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/35-3-1024x718.png\" alt=\"\" class=\"wp-image-1505\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/35-3-1024x718.png 1024w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/35-3-300x210.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/35-3-768x538.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/35-3-200x140.png 200w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/35-3.png 1307w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Check OpenVPN tunnel.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"671\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/29-1-1024x671.png\" alt=\"\" class=\"wp-image-1501\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/29-1-1024x671.png 1024w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/29-1-300x197.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/29-1-768x503.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/29-1-200x131.png 200w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/29-1.png 1125w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>On OpenVPN client.<\/p>\n\n\n\n<p>ping 8.8.8.8 (Internet)<\/p>\n\n\n\n<p>ping 192.168.131.134 (OpenVPN gw tunnel)<\/p>\n\n\n\n<p>ping 192.168.131.128 (LAMP server behind OpenVPN server)<\/p>\n\n\n\n<p>We can see split tunneling is working well on OpenVPN.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"743\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/36-1-1024x743.png\" alt=\"\" class=\"wp-image-1506\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/36-1-1024x743.png 1024w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/36-1-300x218.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/36-1-768x557.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/36-1-200x145.png 200w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/36-1.png 1074w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Access LAMP server.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/37-1.png\" alt=\"\" class=\"wp-image-1507\" width=\"398\" height=\"324\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/37-1.png 967w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/37-1-300x245.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/37-1-768x627.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/37-1-200x163.png 200w\" sizes=\"auto, (max-width: 398px) 100vw, 398px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/38-1-1024x436.png\" alt=\"\" class=\"wp-image-1508\" width=\"355\" height=\"151\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/38-1-1024x436.png 1024w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/38-1-300x128.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/38-1-768x327.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/38-1-200x85.png 200w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/38-1.png 1229w\" sizes=\"auto, (max-width: 355px) 100vw, 355px\" \/><\/figure>\n\n\n\n<p>On Debian OpenVPN server.<\/p>\n\n\n\n<p>Check routing table on OpenVPN server.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"783\" height=\"164\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/32-1.png\" alt=\"\" class=\"wp-image-1502\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/32-1.png 783w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/32-1-300x63.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/32-1-768x161.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/32-1-200x42.png 200w\" sizes=\"auto, (max-width: 783px) 100vw, 783px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"480\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/33-1-1024x480.png\" alt=\"\" class=\"wp-image-1503\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/33-1-1024x480.png 1024w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/33-1-300x141.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/33-1-768x360.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/33-1-200x94.png 200w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/33-1.png 1089w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Check OpenVPN logs on the OpenVPN server.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"128\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/39-1-1024x128.png\" alt=\"\" class=\"wp-image-1509\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/39-1-1024x128.png 1024w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/39-1-300x38.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/39-1-768x96.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/39-1-1536x192.png 1536w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/39-1-200x25.png 200w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/39-1.png 1702w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Monitor traffic on the OpenVPN server. OpenVPN traffic is using port 1194 UDP. OpenVPN traffic is encrypted using this tunnel.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"748\" src=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/40-1-1024x748.png\" alt=\"\" class=\"wp-image-1510\" srcset=\"https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/40-1-1024x748.png 1024w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/40-1-300x219.png 300w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/40-1-768x561.png 768w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/40-1-200x146.png 200w, https:\/\/tungle.ca\/wp-content\/uploads\/2022\/02\/40-1.png 1161w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Below is a lab topology to use to implement the OpenVPN solution on Debian 10. In this lab, we need to make sure clients on the Internet are able to create secure OpenVPN connections to the OpenVPN server. Also, the OpenVPN client is able to access inside the network beside the VPN tunnel (LAMP subnet: [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[6,11],"tags":[8,13],"class_list":["post-1474","post","type-post","status-publish","format-standard","hentry","category-linux","category-security","tag-linux","tag-security"],"_links":{"self":[{"href":"https:\/\/tungle.ca\/index.php?rest_route=\/wp\/v2\/posts\/1474","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/tungle.ca\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/tungle.ca\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/tungle.ca\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/tungle.ca\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1474"}],"version-history":[{"count":9,"href":"https:\/\/tungle.ca\/index.php?rest_route=\/wp\/v2\/posts\/1474\/revisions"}],"predecessor-version":[{"id":3748,"href":"https:\/\/tungle.ca\/index.php?rest_route=\/wp\/v2\/posts\/1474\/revisions\/3748"}],"wp:attachment":[{"href":"https:\/\/tungle.ca\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1474"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/tungle.ca\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1474"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/tungle.ca\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1474"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}