Membuat Server VPN Sendiri Gratis di Oracle Cloud

1
1758
views

Anda tentu sudah tidak asing dengan VPN. VPN di Indonesia umumnya dipakai untuk membuka situs website yang telah diblokir oleh regulator. Banyak juga kita temui penyedia layanan VPN gratis, baik untuk desktop maupun mobile. Namun tentu saja, karena gratis jadi tidak hanya kita yang menggunakan. Server VPN gratis tersebut tentu dipakai orang lain juga, akses server VPN terbagi-bagi sehingga tak heran jika ada yang mengatakan menggunakan VPN gratis itu lamban. Tapi bagaimana jika Anda dapat membuat server VPN yang bisa Anda gunakan sendiri tanpa harus berbagi dengan pengguna yang lain? Artikel ini akan berusaha menjawab pertanyaan tersebut.

Kenapa Membuat VPN Sendiri?

Mempunyai VPN sendiri artinya hanya kita sendiri yang menggunakannya, atau setidaknya kita juga bisa berbagi ke beberapa orang terbatas. Dengan memiliki server VPN sendiri maka kita punya akses ekslusif ke server, tidak dibagi-bagi, sehingga diyakini akan terasa lebih cepat dan stabil dibanding menggunakan VPN gratis yang ada di luar sana.

VPN Tidak Hanya untuk Membuka Situs yang diblokir

Perlu diketahui bahwa VPN tidak hanya digunakan untuk membuka situs terblokir, VPN bisa sangat bermanfaat untuk developer dalam beberapa kasus, diantaranya seperti:

  • Membuat lingkungan aman untuk aplikasi yang berjalan di server. Apabila Anda memiliki aplikasi yang hanya boleh diakses oleh orang tertentu secara ekslusif, maka Anda bisa memanfaatkan VPN. Hanya orang yang tersambung ke VPN Anda yang dapat mengakses aplikasi Anda. Hal ini akan menambah keamanan dari aplikasi tersebut.
  • Menyambungkan Host yang Berbeda Jaringan Menjadi Satu Jaringan. Katakanlah Anda memiliki server fisik atau komputer yang ingin Anda akses dari tempat yang jauh, tentu Anda tidak bisa langsung mengaksesnya karena sudah berbeda jaringan dan server fisik tersebut tidak memiliki IP publik yang bisa diakses dari internet. Maka VPN bisa menjadi solusi karena memungkinkan kita membuat sebuah jaringan virtual yang dapat menyambungkan host yang berbeda tersebut selama masing-masing host memiliki akses ke internet.
  • Memungkinkan Anda untuk Memiliki IP Static. Beberapa sistem mungkin menerapkan IP Whitelist, yang artinya hanya IP yang diizinkan saja yang boleh mengakses sistem tersebut. Jika Anda sedang bekerja dengan sistem semacam itu, maka dengan menggunakan VPN Anda akan memiliki static, cukup daftarkan IP static Anda ke sistem IP Whitelist dan Anda tidak perlu kuatir IP Anda berubah yang dapat mengakibatkan akses ke sistem tersebut terganggu.
  • Tentu masih banyak lagi skenario yang bisa kita kembangkan dari penggunaan VPN ini. Anda bisa eksplor sendiri jika ingin tahu lebih lanjut.

Bagaimana Bisa Gratis?

Untuk membuat VPN server, tentu Anda membutuhkan server. Supaya bisa gratis, maka Anda membutuhkan server yang gratis pula. Disini saya menggunakan layanan dari Oracle Cloud karena ada paket selalu gratis. Coba simak ulasan saya terkait server selalau gratis dari Oracle Cloud ini pada post sebelumnya.

Apabila Anda sudah memiliki server gratis dari Oracle Cloud, silakan lanjut pada tahap berikut.

Instalasi VPN Server pada Oracle Cloud

Persiapan

Aplikasi VPN server yang saya gunakan pada artikel ini adalah “OpenConnect”, jadi jika nanti server sudah siap, saya juga perlu menggunakan aplikasi client untuk OpenConnect. Oh iya, OS pada server yang saya gunakan adalah “Ubuntu 20.04 Server”. Selain itu Anda juga perlu memiliki domain yang mengarah ke server Anda. Bila Anda mencari penyedia domain gratis, coba cek situs website Freenom. Dalam artikel ini saya akan menggunakan subdomain vpn.tutorlokal.com, silakan ganti sesuai domain/subdomain milik Anda pada saat melakukan konfigurasi.

Install OpenConnect VPN Server

Silakan login ke server Anda lalu jalankan perintah berikut:

$ sudo apt update
$ sudo apt install ocserv

Setelah berhasil terinstall, coba cek status servicenya, pastikan sudah aktif berjalan.

$ sudo systemctl status ocserv
Status service ocserv aktif berjalan.

Install Let’s Encrypt Client (certbot)

Untuk mendapatkan versi certbot terbaru, kita perlu install certbot menggunakan snapd, jadi pastikan server Anda sudah tersedia snapd. Kemudian jalankan perintah berikut untuk memastikan Anda mendapatkan versi snapd terbaru.

$ sudo snap install core; sudo snap refresh core

Sebelum memulai install cerbot terbaru, pastikan Anda sudah menghapus certbot yang mungkin sudah pernah terpasang sebelumnya di server.

$ sudo apt-get remove certbot

Jika sudah, sekarang saatnya install certbot terbaru menggunakan snapd.

$ sudo snap install --classic certbot

Lalu jalankan perintah berikut untuk memastikan perintah certbot bisa dijalankan.

$ sudo ln -s /snap/bin/certbot /usr/bin/certbot

Cek versi certbot.

$ certbot --version
certbot 1.14.0

Install dan Konfigurasi Nginx

Pertama, install Nginx jika belum tersedia.

$ sudo apt install nginx

Kemudian buat file konfigurasi vhost nginx.

$ sudo nano /etc/nginx/conf.d/vpn.tutorlokal.com.conf

Lalu copy dan paste konten konfigurasi Nginx berikut.

server {
      listen 80;
      server_name vpn.tutorlokal.com;

      root /var/www/ocserv/;

      location ~ /.well-known/acme-challenge {
         allow all;
      }
}

Jangan lupa untuk menyimpan perubahan. Selanjutnya buatlah direktori berikut.

$ sudo mkdir -p /var/www/ocserv
$ sudo chown www-data:www-data /var/www/ocserv -R

Lalu reload konfigurasi Nginx.

$ sudo systemctl reload nginx

Setelah vhost sudah selesai dikonfigurasi, sekarang saatnya membuat sertifikat SSL menggunakan certbot.

$ sudo certbot certonly --webroot --agree-tos --email you@example.com -d vpn.tutorlokal.com -w /var/www/ocserv

Apabila Anda menemui certbot gagal mendapatkan sertifikat dan menampilkan pesan di bawah ini:

IMPORTANT NOTES:
 - The following errors were reported by the server:

   Domain: vpn.tutorlokal.com
   Type:   connection
   Detail: Fetching
   http://vpn.tutorlokal.com/.well-known/acme-challenge/munRKW4IhTEanIqnpj11K7YVFIPK2TGZaXqqjJYyELY:
   Error getting validation data

   To fix these errors, please make sure that your domain name was
   entered correctly and the DNS A/AAAA record(s) for that domain
   contain(s) the right IP address. Additionally, please check that
   your computer has a publicly routable IP address and that no
   firewalls are preventing the server from communicating with the
   client. If you're using the webroot plugin, you should also verify
   that you are serving files from the webroot path you provided.

Maka kemungkinan port web server masih tertutup, misalnya pada server saya setelah saya check di https://www.ipfingerprints.com/portscan.php port 80 saat ini masih tertutup.

Kita harus membuka access port ini, pastikan port pada firewall di Oracle Cloud sudah diberikan akses buka.

Pastikan daftar port yang ingin Anda buka juga terdaftar disini, misalnya 443 untuk HTTPS. Apabila port yang ingin dibuka sudah terdaftar pada firewall di Oracle Cloud tersebut namun ketika dicek status portnya belum open, maka kemungkinan ada firewall internal atau pengaturan routing dalam server yang membatasi.

Coba periksa pengaturan routing dengan menggunakan perintah berikut:

$ sudo iptables --list --line-numbers

Lalu periksa output dari perintah tersebut, cari apakah ada keterangan REJECT pada baris-baris yang muncul.

Apabila dilihat pada hasil cek di atas, maka dapat dilihat ada keterangan REJECT pada Chain INPUT dan Chain FORWARD. Catat nomor baris pada masing-masing Chain, kita perlu menghapus baris tersebut dengan menyebutkan nomor barisnya.

Misal dalam kasus saya pada Chain INPUT baris REJECT berada pada nomor 6, maka untuk menghapusnya perintah yang saya gunakan adalah sebagai berikut:

$ sudo iptables -D INPUT 6

Begitu juga untuk Chain FORWARD sesuaikan dengan nomor yang tampil, dalam kasus saya ada pada nomor 1:

$ sudo iptables -D FORWARD 1

Lalu jalankan lagi perintah untuk cek pengaturan tadi untuk memastikan baris yang tadi kita hapus sudah hilang.

$ sudo iptables --list --line-numbers

Jika sudah hilang, maka simpan pengaturan tersebut karena ini tidak permanen dan dapat kembali semula pada saat server restart. Gunakan perintah berikut untuk menyimpan pengaturan:

$ sudo netfilter-persistent save

Sekarang periksa lagi port status apakah sudah open?

Apabila semua port yang ingin Anda buka sudah berstatus open, maka silakan ulang lagi perintah untuk membuat sertifikat yang tadi gagal.

sudo certbot certonly --webroot --agree-tos --email you@example.com -d vpn.tutorlokal.com -w /var/www/ocserv

Begitu perintah berhasil dijalankan, maka akan muncul pesan seperti berikut:

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator webroot, Installer None
Requesting a certificate for vpn.tutorlokal.com
Performing the following challenges:
http-01 challenge for vpn.tutorlokal.com
Using the webroot path /var/www/ocserv for all unmatched domains.
Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/vpn.tutorlokal.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/vpn.tutorlokal.com/privkey.pem
   Your certificate will expire on 2021-08-13. To obtain a new or
   tweaked version of this certificate in the future, simply run
   certbot again. To non-interactively renew *all* of your
   certificates, run "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

Konfigurasi OpenConnect VPN Server

Edit file konfigurasi dengan menggunakan perintah berikut:

$ sudo nano /etc/ocserv/ocserv.conf

Berikut ringkasan baris-baris yang saya ganti:

  • Tambahkan komentar pada baris berikut:
    • Sebelum
      • auth = "pam[gid-min=1000]"
    • Sesudah
      • # auth = "pam[gid-min=1000]"
  • Lalu tambahkan di bawahnya baris berikut:
    • auth = "plain[passwd=/etc/ocserv/ocpasswd]"
  • Pastikan pengaturan tcp-port dan udp-port sesuai dengan yang Anda inginkan.
    • tcp-port = 443
    • udp-port = 443
  • Rubah path sertifikat agar mengarah ke path sertifikat yang tadi sudah kita buat sebelumnya.
    • Sebelum:
      • server-cert = /etc/ssl/certs/ssl-cert-snakeoil.pem
      • server-key = /etc/ssl/private/ssl-cert-snakeoil.key
    • Sesudah:
      • server-cert = /etc/letsencrypt/live/vpn.tutorlokal.com/fullchain.pem
      • server-key = /etc/letsencrypt/live/vpn.tutorlokal.com/privkey.pem
  • Anda dapat mengatur batasan untuk client yang boleh mengakses server VPN ini.
    • max-clients = 128
    • max-same-clients = 2
  • Lalu rubah default domain sesuai dengan domain milik Anda sendiri.
    • default-domain = vpn.tutorlokal.com
  • Anda dapat mengatur IP untuk jaringan VPN antara server dengan client Anda. Misalnya saya ingin jaringan antara server dengan client menggunakan IP 192.168.0.xxx maka pengaturannya akan seperti ini:
    • ipv4-network = 192.168.0.0
    • ipv4-netmask = 255.255.255.0
  • Lalu cari dan hapus comment pada baris berikut:
    • Sebelum
      • # tunnel-all-dns = true
    • Sesudah
      • tunnel-all-dns = true
  • Kemudian Anda dapat mengatur sendiri DNS server yang ingin Anda gunakan.
    • dns = 8.8.8.8
    • dns = 1.1.1.1
  • Lalu tambahkan comment pada semua parameter route.
    • Sebelum
      • route = 10.0.0.0/8
      • route = 172.16.0.0/12
      • route = 192.168.0.0/16
    • Sesudah
      • # route = 10.0.0.0/8
      • # route = 172.16.0.0/12
      • # route = 192.168.0.0/16

Simpan perubahan yang telah Anda buat, lalu jalankan perintah berikut untuk restart service dari server VPN ini.

$ sudo systemctl restart ocserv

Buat Akun VPN

Supaya perangkat client Anda dapat mengakses VPN, maka perlu dibuatkan akun VPN. Jalankan perintah berikut untuk membuat akun VPN, misalnya dengan username john. Anda akan diminta memasukkan kata sandi untuk john.

$ sudo ocpasswd -c /etc/ocserv/ocpasswd john

Aktifkan IP Forwarding

Agar client VPN dapat mengakses internet dari server maka perlu mengaktifkan IP Forwarding. Jalankan perintah berikut:

$ sudo nano /etc/sysctl.conf

Tambahkan text berikut pada baris paling akhir dari file tersebut:

net.ipv4.ip_forward = 1

Simpan lalu terapkan perubahan tersebut dengan menjalankan perintah berikut:

$ sudo sysctl -p

Konfigurasi IP Masquerading pada Firewall

Install firewall dengan perintah berikut:

$ sudo apt install ufw

Buka akses untuk SSH:

$ sudo ufw allow 22/tcp

Lalu cari tahu nama network interface pada server Anda, misalnya dengan menggunakan perintah ifconfig. Anda akan melihat tampilan seperti ini, nama network interface akan tertera disana. Dalam kasus saya, nama network interface-nya adalah ens3.

Kita akan memasukkan nama network interface ini dalam pengaturan, jalankan perintah berikut:

$ sudo nano /etc/ufw/before.rules

Tambahkan teks berikut pada akhir baris dari file tersebut:

# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -o ens3 -j MASQUERADE

# End each table with the 'COMMIT' line or these rules won't be processed
COMMIT

Jangan lupa untuk mengganti ens3 dengan nama network interface Anda sendiri jika berbeda dengan kasus saya.

Secara bawaan firewall akan mencegah adanya packet forwarding, oleh karena itu mari kita set agar dibolehkan. Masih di file yang sama tambahkan teks berikut tepat di bawah pengaturan terkait forwarding:

# allow forwarding for trusted network
-A ufw-before-forward -s 192.168.0.0/24 -j ACCEPT
-A ufw-before-forward -d 192.168.0.0/24 -j ACCEPT

Pastikan IP address yang tertera disitu telah Anda sesuaikan dengan pengaturan IP Anda sebelumnya.

Simpan perubahan lalu aktifkan ufw dengan perintah berikut:

$ sudo ufw enable

Lalu restart service ufw:

$ sudo systemctl restart ufw

Setelah itu, jika Anda melihat pengaturan POSTROUTING, maka akan tampil kurang lebih seperti gambar berikut:

$ sudo iptables -t nat -L POSTROUTING

Buka Port 443 pada Firewall Server

$ sudo ufw allow 443/tcp
$ sudo ufw allow 443/udp

Sampai disini, proses setup server VPN bisa dikatakan selesai. Setelah ini mari kita coba menghubungkan perangkat client ke server ini.

Menghubungkan Client ke VPN Server

Disini saya menggunakan Kubuntu 20.04 pada perangkat client, sebelumnya pastikan aplikasi VPN pada client sudah terpasang:

$ sudo apt install openconnect

Pada Kubuntu, kita dapat menggunakan network manager. Silakan buat konfigurasi koneksi VPN baru, pilih “Cisco AnyConnect Compatible VPN (openconnect)”

Masukkan nama koneksi VPN serta alamat domain server VPN Anda pada kolom Gateway:

Pada network manager akan muncul opsi koneksi baru yang sudah dibuat, silakan klik tombol Connect untuk menghubungkan client dengan server VPN.

Akan muncul window baru yang akan meminta Anda untuk memasukkan username dan password dari akun VPN yg tadi sudah kita buat. Namun sebelumnya klik tombol Connect terlebih dahulu (tombol dengan icon globe).

Seusai terhubung, untuk memastikan apakah sudah benar-benar berhasil, Anda dapat menguji dengan cara memeriksa IP publik Anda melalui website seperti https://whatismyipaddress.com. Jika berhasil maka IP Address yg muncul akan sama dengan IP Address dari server VPN Anda, dan lokasi yang terdeteksi akan sesuai dengan lokasi dimana server Anda berada.

Penutup

Membuat server VPN sangat mudah dan dengan Oracle Cloud Always Free kita bisa mendapatkan akses VPN secara gratis. Semoga artikel ini bermanfaat untuk Anda.

Referensi:

  • https://www.linuxbabe.com/ubuntu/openconnect-vpn-server-ocserv-ubuntu-20-04-lets-encrypt
  • https://stackoverflow.com/questions/54794217/opening-port-80-on-oracle-cloud-infrastructure-compute-node

1 KOMENTAR

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Situs ini menggunakan Akismet untuk mengurangi spam. Pelajari bagaimana data komentar Anda diproses.