This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
openvpn [2021/11/03 03:31] – vissie | openvpn [2021/11/10 03:39] (current) – [Here is my steps] vissie | ||
---|---|---|---|
Line 9: | Line 9: | ||
====Here is my steps==== | ====Here is my steps==== | ||
+ | ===Step 1 — Installing OpenVPN and EasyRSA=== | ||
sudo apt install openvpn | sudo apt install openvpn | ||
wget https:// | wget https:// | ||
aunpack ./ | aunpack ./ | ||
+ | ===Step 2 — Configuring the EasyRSA Variables and Building the CA=== | ||
cd ./ | cd ./ | ||
cp vars.example vars | cp vars.example vars | ||
Line 25: | Line 27: | ||
set_var EASYRSA_REQ_EMAIL | set_var EASYRSA_REQ_EMAIL | ||
set_var EASYRSA_REQ_OU | set_var EASYRSA_REQ_OU | ||
- | | + | ===Step 3 — Creating the Server Certificate, |
./easyrsa init-pki | ./easyrsa init-pki | ||
"... Your newly created PKI dir is: / | "... Your newly created PKI dir is: / | ||
Line 32: | Line 34: | ||
"name the server" | "name the server" | ||
"... Your new CA certificate file for publishing is at: | "... Your new CA certificate file for publishing is at: | ||
- | / | + | / |
+ | cp ./ | ||
./easyrsa gen-req server nopass | ./easyrsa gen-req server nopass | ||
sudo cp ./ | sudo cp ./ | ||
./easyrsa sign-req server server | ./easyrsa sign-req server server | ||
+ | sudo cp ./ | ||
+ | sudo cp ./ | ||
./easyrsa gen-dh | ./easyrsa gen-dh | ||
sudo openvpn --genkey --secret ta.key | sudo openvpn --genkey --secret ta.key | ||
sudo cp ./ta.key / | sudo cp ./ta.key / | ||
sudo cp ./ | sudo cp ./ | ||
- | Step 4 — Generating a Client Certificate and Key Pair | + | ===Step 4 — Generating a Client Certificate and Key Pair=== |
+ | cd ~ | ||
+ | mkdir -p ~/ | ||
+ | chmod -R 700 ~/ | ||
+ | cd ~/ | ||
+ | ./easyrsa gen-req vissie nopass | ||
+ | cp ./ | ||
+ | ./easyrsa sign-req client vissie | ||
+ | ' | ||
+ | ' | ||
+ | cp ./ | ||
+ | sudo cp ~/ | ||
+ | sudo cp / | ||
+ | ===Step 5 — Configuring the OpenVPN Service=== | ||
+ | sudo cp / | ||
+ | sudo gzip -d / | ||
+ | sudo vim / | ||
+ | ... | ||
+ | tls-auth ta.key 0 # This file is secret | ||
+ | cipher AES-256-CBC | ||
+ | # Below this, add an auth directive | ||
+ | auth SHA256 | ||
+ | #If necessary, change the file name by removing the 2048 so it aligns with the key you generated in the previous step: | ||
+ | dh dh.pem | ||
+ | user nobody | ||
+ | group nogroup | ||
+ | #Find the redirect-gateway | ||
+ | push " | ||
+ | #Just below this, find the dhcp-option section. Again, remove the “;” from in front of both of the lines to uncomment them: | ||
+ | push " | ||
+ | push " | ||
+ | # Optional! | ||
+ | port 11 | ||
+ | # Optional! | ||
+ | proto tcp | ||
+ | #If you do switch the protocol to TCP, you will need to change the explicit-exit-notify directive’s value from 1 to 0 | ||
+ | explicit-exit-notify 0 | ||
+ | ... | ||
+ | ===Step 6 — Adjusting the Server Networking Configuration=== | ||
+ | sudo vim / | ||
+ | ... | ||
+ | net.ipv4.ip_forward=1 | ||
+ | ... | ||
+ | sudo sysctl -p | ||
+ | ip route | grep default | ||
+ | #Your public interface is the string found within this command’s output that follows the word “dev”. For example, this result shows the interface named eth0: | ||
+ | #Output | ||
+ | #default via 203.0.113.1 dev eth0 proto static | ||
+ | |||
+ | sudo apt install ufw | ||
+ | sudo vim / | ||
+ | |||
+ | # UFW rules are typically added using the ufw command. Rules listed in the before.rules file, though, are read and put into place before the conventional UFW rules are loaded. | ||
+ | # Towards the top of the file, add the highlighted lines below. This will set the default policy for the POSTROUTING chain in the nat table and masquerade any traffic coming | ||
+ | # from the VPN. Remember to replace eth0 in the -A POSTROUTING line below with the interface you found in the above command: | ||
+ | <sxh bash; gutter: false> | ||
+ | # | ||
+ | # rules.before | ||
+ | # | ||
+ | # Rules that should be run before the ufw command line added rules. Custom | ||
+ | # rules should be added to one of these chains: | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | # | ||
+ | |||
+ | # START OPENVPN RULES | ||
+ | # NAT table rules | ||
+ | *nat | ||
+ | : | ||
+ | # Allow traffic from OpenVPN client to eth0 (change to the interface you discovered!) | ||
+ | -A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE | ||
+ | COMMIT | ||
+ | # END OPENVPN RULES | ||
+ | |||
+ | # Don't delete these required lines, otherwise there will be errors | ||
+ | *filter | ||
+ | . . . | ||
+ | </ | ||
+ | | ||
+ | sudo vim / | ||
+ | ... | ||
+ | DEFAULT_FORWARD_POLICY=" | ||
+ | ... | ||
+ | sudo ufw allow 1194/udp | ||
+ | sudo ufw allow OpenSSH | ||
+ | ===Step 7 — Starting and Enabling the OpenVPN Service=== | ||
+ | sudo systemctl start openvpn@server | ||
+ | sudo systemctl status openvpn@server | ||
+ | sudo systemctl enable openvpn@server | ||
+ | ===Step 8 — Creating the Client Configuration Infrastructure=== | ||
+ | mkdir -p ~/ | ||
+ | cp / | ||
+ | vim ~/ | ||
+ | ... | ||
+ | remote my.server.com 1194 | ||
+ | proto udp | ||
+ | # Downgrade privileges after initialization (non-Windows only) | ||
+ | user nobody | ||
+ | group nogroup | ||
+ | #ca ca.crt | ||
+ | #cert client.crt | ||
+ | #key client.key | ||
+ | #tls-auth ta.key 1 | ||
+ | cipher AES-256-CBC | ||
+ | auth SHA256 | ||
+ | key-direction 1 | ||
+ | # Finally, add a few commented out lines. Although you can include these directives in every client configuration file, you only need to enable them for Linux clients | ||
+ | # that ship with an / | ||
+ | # script-security 2 | ||
+ | # up / | ||
+ | # down / | ||
+ | ... | ||
+ | vim ~/ | ||
+ | | ||
+ | #!/bin/bash | ||
+ | |||
+ | # First argument: Client identifier | ||
+ | <sxh bash; gutter: false> | ||
+ | KEY_DIR=/ | ||
+ | OUTPUT_DIR=/ | ||
+ | BASE_CONFIG=/ | ||
+ | |||
+ | cat ${BASE_CONFIG} \ | ||
+ | <(echo -e '< | ||
+ | ${KEY_DIR}/ | ||
+ | <(echo -e '</ | ||
+ | ${KEY_DIR}/ | ||
+ | <(echo -e '</ | ||
+ | ${KEY_DIR}/ | ||
+ | <(echo -e '</ | ||
+ | ${KEY_DIR}/ | ||
+ | <(echo -e '</ | ||
+ | > ${OUTPUT_DIR}/ | ||
+ | </ | ||
+ | chmod 700 ~/ | ||
+ | ===Step 9 — Generating Client Configurations=== | ||
+ | cd ~/ | ||
+ | sudo ./ | ||
+ | ls ~/ | ||
+ | ===Step 10 — Installing the Client Configuration=== | ||
+ | sudo apt install openvpn | ||
+ | # Check to see if your distribution includes an / | ||
+ | ls / | ||
+ | update-resolv-conf | ||
+ | #Next, edit the OpenVPN client configuration file you transfered: | ||
+ | vim client1.ovpn | ||
+ | <sxh bash; gutter: false> | ||
+ | ... | ||
+ | script-security 2 | ||
+ | up / | ||
+ | down / | ||
+ | ... | ||
+ | </ | ||
+ | | ||
+ | |||
+ | | ||
==== Here is my notes: ==== | ==== Here is my notes: ==== | ||
Use dig command for determining my public IP address: | Use dig command for determining my public IP address: |