Menggunakan OpenVPN Untuk Menghubungkan Dua Jaringan Berbeda
Salah satu metode yang paling umum dipakai untuk menghubungkan dua jaringan di lokasi fisik yang berbeda melalui Internet adalah dengan mengunakan VPN. Dengan menambahkan VPN gateway, masing-masing perangkat lokal di jaringan berbeda dapat saling berkomunikasi seolah-olah mereka terhubung secara lokal di jaringan yang sama. Walaupun biasanya VPN gateway berbentuk perangkat fisik yang ter-integrasi dengan router, pada artikel ini, saya akan mencoba menggunakan sebuah PC dengan sistem operasi Ubuntu Server untuk dijadikan VPN gateway.
Sebagai contoh, anggap saja terdapat dua jaringan di rumah berbeda yang terhubung ke Internet melalui router OpenWRT bawaan ISP rumahan seperti yang terlihat pada topologi GNS3 berikut ini:

Karena saya menggunakan UDP tunnel di cloud node untuk mensimulasikan Internet, tidak ada fasilitas DHCP sehingga
saya perlu memberikan alamat IP statis di router-rumah1 dan router-rumah2. Karena kedua router tersebut adalah
router OpenWRT, saya dapat mengubah file /etc/config/network pada bagian konfigurasi wan di router-rumah1 agar
terlihat seperti pada kode berikut ini:
...config interface 'wan' option device 'eth1' option proto 'static' option ipaddr '10.0.0.1' option netmask '255.0.0.0'...Setelah itu, saya dapat menerapkan konfigurasi di atas dengan memberikan perintah:
service network restartSaya juga melakukan hal yang sama dengan router-rumah2 tapi dengan menggunakan IP yang berbeda seperti yang terlihat
pada kode berikut ini:
...# Untuk router-rumah-2config interface 'wan' option device 'eth1' option proto 'static' option ipaddr '10.0.0.2' option netmask '255.0.0.0'...Saya memastikan bahwa router-rumah1 dapat menghubungi IP router-rumah2 di 10.0.0.2. Begitu juga
sebaliknya, router-rumah2 harus bisa menghubungi IP router-rumah1 di 10.0.0.1. Sampai disini, saya sudah
mensimulasikan dua buah router rumah yang saling terhubung (seolah-olah melalui IP publik di Internet).
Pada topologi seperti ini, bila saya menggunakan perintah ping, saya akan menemukan bahwa:
PC1dapat menghubungiPC2danrouter-rumah2.PC2dapat menghubungiPC1danrouter-rumah2.PC3dapat menghubungiPC4danrouter-rumah1.PC4dapat menghubungiPC3danrouter-rumah1.
PC1 dan PC2 tidak dapat menghubungi PC3 dan PC4. Begitu juga sebaliknya, PC3 dan PC4 tidak dapat menghubungi
PC1 dan PC2. Bagaimana bila saya menginginkan mereka dapat saling berkomunikasi satu dengan yang lainnya? Agar pola komunikasi
tersebut terwujud, saya akan mencoba menambahkan komponen OpenVPN sehingga topologinya kini akan terlihat seperti pada gambar berikut ini:

Konfigurasi Umum pada Ubuntu Server
Saya akan mulai dengan melakukan instalasi Ubuntu Server pada mesin ovpn-client dan ovpn-server. Saya dapat men-download
image yang dibutuhkan di https://ubuntu.com/download/server. Sesuai dengan namanya, Ubuntu Server adalah variasi Ubuntu yang ditujukan
untuk instalasi di mesin server. Berbeda dari Ubuntu biasanya, Ubuntu Server tidak dilengkapi dengan GUI, jaringan juga tidak
dikelola oleh NetworkManager, bahkan proses instalasi dilakukan berbasis teks.
Setelah selesai melakukan instalasi Ubuntu Server di mesin virtual QEMU, saya kemudian melakukan instalasi aplikasi yang dibutuhkan dengan memberikan perintah berikut ini:
sudo apt update && sudo apt upgradesudo apt install isc-dhcp-server openvpnKarena server ini akan menjadi gateway, saya juga akan mengubah isi file /etc/sysctl.conf dengan menambahkan baris berikut ini
untuk mengaktifkan IP forwarding:
net.ipv4.ip_forward=1Selain itu, saya juga akan membuat file key statis untuk komunikasi OpenVPN dengan memberikan perintah berikut ini:
openvpn --genkey secret static.keySetelah ini, saya dapat menambahkan mesin virtual QEMU tersebut sebagai node di topologi GNS3 dengan memilih menu Edit, Preferences, dan QEMU. Pada halaman konfigurasi yang ada, saya memastikan bawah jumlah network adapter untuk perangkat virtual ini adalah dua (2).
Konfigurasi pada Server OpenVPN
Saya akan mulai dengan melakukan konfigurasi jaringan di netplan dengan menambahkan file /etc/netplan/99-config.yaml dengan
isi seperti berikut ini:
network: version: 2 ethernets: ens4: dhcp4: true ens5: addresses: - 192.168.200.1/24Pada konfigurasi di atas, ens4 akan mendapatkan IP otomatis dari router-rumah2 melalui DHCP. ens5 akan diaktifkan dengan
alamat statis 192.168.200.1. Untuk menerapkan perubahan pada konfigurasi di atas, saya memberikan perintah berikut ini:
sudo netplan applySetelah ini, saya akan melakukan konfigurasi DHCP server pada perangkat ens5 yang akan memberikan alamat IP kepada PC3 dan PC4. Untuk itu,
saya menambahkan baris berikut ini pada /etc/dhcp/dhcpd.conf:
...subnet 192.168.200.0 netmask 255.255.255.0 { range 192.168.200.10 192.168.200.20; option routers 192.168.200.1;}...Selain itu, saya juga mengubah file /etc/default/isc-dhcp-server menjadi seperti berikut ini:
INTERFACESv4="ens5"INTERFACESv6="ens5"Saya kemudian menerapkan perubahan ini dengan memberikan perintah seperti berikut ini:
sudo service isc-dhcp-server restartSekarang, bila saya memberikan perintah ip dhcp pada PC3 ataupun PC4, saya akan mendapatkan alamat IP seperti yang terlihat pada:
ip dhcp
## Output:## DDORA IP 192.168.200.10/24 GW 192.168.200.1Agar PC3 dan PC4 dapat menghubungi dunia luar yang memiliki IP diluar 192.168.200.0/24 seperti router-rumah1 di 10.0.0.1, saya
akan mengaktifkan NAT di iptables dengan memberikan perintah berikut ini:
sudo iptables -t nat -A POSTROUTING -o ens4 -j MASQUERADEWalaupun sederhana dan tepat untuk percobaan sederhana seperti di tulisan ini, hasil dari perintah di atas tidak permanen sehingga saya perlu memberikan perintah yang sama setiap kali menjalankan ulang topologi.
Berikutnya, saya akan melakukan konfigurasi OpenVPN. Karena ovpn-server akan menjadi server OpenVPN, saya membuat file konfigurasi OpenVPN dengan nama server.ovpn yang memiliki isi seperti berikut ini:
dev tunlocal 192.168.1.196ifconfig 10.1.0.2 10.1.0.1secret static.keyroute 192.168.200.0 255.255.255.0 192.168.200.1route 192.168.100.0 255.255.255.0 10.1.0.2Saya kemudian dapat menjalankan OpenVPN dengan memberikan perintah seperti berikut ini:
sudo openvpn server.ovpnKhusus untuk pada sisi server, saya perlu melakukan sebuah langka ekstra karena server ovpn-server berada di balik
router-rumah2 sehingga tidak dapat diakses secara langsung dari publik. Yang memiliki IP publik (sehingga dapat dihubungi
dari luar melalui Internet) hanyalah router-rumah2. Oleh sebab itu, saya perlu menambahkan konfigurasi di OpenWRT supaya
meneruskan koneksi di port 1194 (untuk OpenVPN) ke jaringan lokal (yang saat ini hanya terhubung ke server OpenVPN ovpn-server).
Untuk itu, saya melakukan perubahan pada file /etc/config/firewall dengan menambahkan baris seperti berikut ini:
...config redirect option src wan option src_dport 1194 option dest lan option dest_port 1194 option proto udp...Untuk mengaktifkan konfigurasi di atas, saya dapat memberikan perintah berikut ini:
service firewall restartSampai disini, konfigurasi di sisi server sudah siap. Saatnya untuk melanjutkan ke konfigurasi di sisi klien.
Konfigurasi pada Klien OpenVPN
Pengaturan di sisi klien OpenVPN hampir sama seperti di server OpenVPN, hanya saja dengan alamat IP yang terbalik. Sebagai
contoh, saya membuat file /etc/netplan/99-config.yaml dengan isi seperti berikut ini:
network: version: 2 ethernets: ens4: dhcp4: true ens5: addresses: - 192.168.100.1/24Bila jaringan lokal pada sisi server menggunakan IP 192.168.200.1/24, di sisi klien, jaringan lokal-nya menggunakan IP
192.168.100.1/24. Untuk menerapkan perubahan ini, saya dapat memberikan perintah:
sudo netplan applySaya juga akan mengaktifkan DHCP di sisi klien dengan menambahkan baris berikut ini pada /etc/dhcp/dhcpd.conf:
...subnet 192.168.100.0 netmask 255.255.255.0 { range 192.168.100.10 192.168.100.20; option routers 192.168.100.1;}...Sama seperti pada sisi server, saya juga mengubah file /etc/default/isc-dhcp-server agar mendengarkan DHCP request di
perangkat ens5:
INTERFACESv4="ens5"INTERFACESv6="ens5"Untuk menerapkan konfigurasi DHCP di atas, saya memberikan perintah:
sudo service isc-dhcp-server restartSeperti sebelumnya, saya menambahkan perintah berikut ini untuk mengaktifkan NAT:
sudo iptables -t nat -A POSTROUTING -o ens4 -j MASQUERADESebagai langkah terakhir, saya membuat konfigurasi OpenVPN dengan nama client.ovpn dengan isi seperti berikut ini:
remote 10.0.0.2local 192.168.1.228dev tunifconfig 10.1.0.1 10.1.0.2secret static.keyroute 192.168.100.0 255.255.255.0 192.168.100.1route 192.168.200.0 255.255.255.0 10.1.0.1Untuk menjalankan OpenVPN, saya memberikan perintah berikut ini:
sudo openvpn client.ovpn....Peer Connection Initiated with [AF_INET]10.0.0.2:1194WARNING: this configuration may cache passwords in memory -- use the auth-nocache option to prevent thisInitialization Sequence CompletedSampai disini, ovpn-client dan ovpn-server sudah terhubung satu sama lainnya melalui jaringan publik router-rumah1 dan
router-rumah2.
Kesimpulan
Setelah melakukan konfigurasi OpenVPN dan melakukan koneksi OpenVPN antara ovpn-client dan ovpn-server, kini PC1 dan PC2
dapat menghubungi PC3 dan PC4 seolah-olah mereka terhubung pada jaringan yang sama. Begitu juga sebaliknya, PC3 dan PC4
juga dapat menghubungi PC1 dan PC2.