Skip to content

Instantly share code, notes, and snippets.

@dhenandi
Last active July 29, 2019 15:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dhenandi/1d85e9b8d27b31f530a81cad5e3a9971 to your computer and use it in GitHub Desktop.
Save dhenandi/1d85e9b8d27b31f530a81cad5e3a9971 to your computer and use it in GitHub Desktop.
Tutorial OpenVPN untuk Tunneling

Tunnelling OpenVPN.adoc

Berikut adalah topologi dari Lab:

Internet --------VPN Server (172.104.182.135) -----DIAL----- Web Server Lokal

1. Konfigurasi Hostname

Hal yang pertama dilakukan adalah mengubah hostname, hostname ditujukkan untuk mengubah nama dari server kita

hostnamectl set-hostname vpn.dhenandi.web.id
cat <<EOF > /etc/hosts
127.0.0.1   localhost
172.104.182.135     vpn.dhenandi.web.id vpn
EOF

2. Instal OpenVPN, banyak paketnya, dll

Instal Paket OpenVPN dan easy-rsa. Tujuannya untuk membuat sertifikat self-signed nya:

sudo apt update
sudo apt -y install openvpn easy-rsa

3. Setup CA Dir

Buat CA Direktori, untuk membuat root certificate

sudo make-cadir ~/openvpn-ca
cd ~/openvpn-ca

sudo sed -i 's/US/ID/g' vars
sudo sed -i 's/CA/Jabar/g' vars
sudo sed -i 's/SanFrancisco/Bekasi/g' vars
sudo sed -i 's/Fort-Funston/Bani Saleh/g' vars
sudo sed -i 's/me@myhost.mydomain/admin@dhenandi.web.id/g' vars
sudo sed -i 's/MyOrganizationalUnit/Puskom/g' vars
sudo sed -i 's/KEY_NAME="EasyRSA"/KEY_NAME="server"/g' vars

4. Build CA, KEY, DH dan Client Key

Kemudian, generate CA Root sertifikatnya. dengan perintah berikut, CA root dibuat dengan nama server

source ./vars
./clean-all
./build-ca  # Jika ada pertanyaan Teken ENTER Terus, Jika ada pertanyaan y/n pilih aja Y

./build-key-server server # Jika ada pertanyaan Teken ENTER Terus, Jika ada pertanyaan y/n pilih aja Y

./build-dh

openvpn --genkey --secret keys/ta.key

5. Generate Sertifikat Klien

Langkah selanjutnya adalah generate sertifikat untuk klien, sertifikat ini nantinya akan digunakan oleh klien, contoh saya beri nama client1

source vars
./build-key client1 # Jika ada pertanyaan Teken ENTER Terus, Jika ada pertanyaan y/n pilih aja Y

6. Copy Key ke openvpn folder

Salin file tersebut ke dalam konfigurasi openvpn

cd ~/openvpn-ca/keys
sudo cp ca.crt server.crt server.key ta.key dh2048.pem /etc/openvpn

7. Buat Konfigurasi OpenVPN Server

Untuk melakukan konfigurasi openvpn, kita dapat menggunakan dengan teks editor dengan mengedit file /etc/openvpn/server.conf, namun pada tutorial ini kami sudah mempersingkat dengan perintah pada linux dengan menggunakan sed:

gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | sudo tee /etc/openvpn/server.conf
sudo sed -i 's/;push "redirect-gateway def1 bypass-dhcp"/push "redirect-gateway def1 bypass-dhcp"/g' /etc/openvpn/server.conf
sudo sed -i 's/;push "dhcp-option DNS 208.67.222.222"/push "dhcp-option DNS 208.67.222.222"/g' /etc/openvpn/server.conf
sudo sed -i 's/;push "dhcp-option DNS 208.67.220.220"/push "dhcp-option DNS 208.67.220.220"/g' /etc/openvpn/server.conf
sudo sed -i 's/;user nobody/user nobody/g' /etc/openvpn/server.conf
sudo sed -i 's/;group nogroup/group nogroup/g' /etc/openvpn/server.conf
sudo sed -i 's/;log-append/log-append/g' /etc/openvpn/server.conf
sudo sed -i 's/;tls-auth ta.key 0/tls-auth ta.key 0/g' /etc/openvpn/server.conf
sudo echo "key-direction 0" >> /etc/openvpn/server.conf

8. Jalankan Service OpenVPN Server

sudo systemctl start openvpn@server
sudo systemctl enable openvpn@server

9. Forward TCP Trafik pada VPN

Jalankan perintah berikut agar jalur VPN bisa menggunakan internet:

sudo sed -i 's/#net.ipv4.ip_forward=1/net.ipv4.ip_forward=1/g' /etc/sysctl.conf
sudo sysctl -p

10. Buat Konfigurasi untuk klien

Langkah selanjutnya adalah membuat konfigurasi .ovpn untuk di import pada komputer yang hendak di koneksikan. jangan lupa sesuaikan 172.104.182.135 dengan server kamu. Kebetulan saya sudah menggunakan skrip otomatis untuk generate .ovpn secara mudah.

mkdir -p ~/client-configs/files
chmod 700 ~/client-configs/files
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf

sudo sed -i 's/my-server-1/172.104.182.135/g' ~/client-configs/base.conf
sudo sed -i 's/;user nobody/user nobody/g' ~/client-configs/base.conf
sudo sed -i 's/;group nogroup/group nogroup/g' ~/client-configs/base.conf
sudo sed -i 's/ca ca.crt/#ca ca.crt/g' ~/client-configs/base.conf
sudo sed -i 's/cert client.crt/#cert client.crt/g' ~/client-configs/base.conf
sudo sed -i 's/key client.key/#key client.key/g' ~/client-configs/base.conf
sudo echo key-direction 1 >> ~/client-configs/base.conf

10.1. Generate Konfigurasi Untuk Klien

Berikut cara generate menggunakan skrip:

cd ~/client-configs/
wget -c https://dhenandi.com/repo/make_config.sh
chmod +x ~/client-configs/make_config.sh
cd ~/client-configs
./make_config.sh client1
ls ~/client-configs/files

11. Salin file hasil generate ke komputer lokal

Salin file hasil generate (~/client-configs/files/client1.ovpn) ke komputer lokal dan lakukan koneksi pada OpenVPN klien menggunakan file .ovpn tersebut.

12. Buat Routingan

Agar web server bisa di teruskan ke jaringan publik, lakukan routing dengan menggunakan iptables sebagai berikut: Note: jangan lupa sesuaikan 10.8.0.6:8080 (ip 10.8.0.6 adalah ip yang saya dapat setelah dial ke OpenVPN Server, dan 8080 adalah port web server lokal saya)

iptables -t nat -A POSTROUTING -s 10.8.0.0/8 -o eth0 -j MASQUERADE
iptables -I FORWARD -i tun0 -o eth0 -s 10.8.0.0/24 -m conntrack --ctstate NEW -j ACCEPT
iptables -I FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 10.8.0.6:8080
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment