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: | ||