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:
Setelah itu, saya dapat menerapkan konfigurasi di atas dengan memberikan perintah:
Saya juga melakukan hal yang sama dengan router-rumah2
tapi dengan menggunakan IP yang berbeda seperti yang terlihat
pada kode berikut ini:
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:
PC1
dapat menghubungiPC2
danrouter-rumah2
.PC2
dapat menghubungiPC1
danrouter-rumah2
.PC3
dapat menghubungiPC4
danrouter-rumah1
.PC4
dapat menghubungiPC3
danrouter-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:
Karena server ini akan menjadi gateway, saya juga akan mengubah isi file /etc/sysctl.conf
dengan menambahkan baris berikut ini
untuk mengaktifkan IP forwarding:
Selain itu, saya juga akan membuat file key statis untuk komunikasi OpenVPN dengan memberikan perintah berikut ini:
Setelah 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:
Pada 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:
Setelah 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
:
Selain itu, saya juga mengubah file /etc/default/isc-dhcp-server
menjadi seperti berikut ini:
Saya kemudian menerapkan perubahan ini dengan memberikan perintah seperti berikut ini:
Sekarang, bila saya memberikan perintah ip dhcp
pada PC3
ataupun PC4
, saya akan mendapatkan alamat IP seperti yang terlihat pada:
Agar 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:
Walaupun 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:
Saya kemudian dapat menjalankan OpenVPN dengan memberikan perintah seperti berikut ini:
Khusus 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:
Untuk mengaktifkan konfigurasi di atas, saya dapat memberikan perintah berikut ini:
Sampai 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:
Bila 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:
Saya juga akan mengaktifkan DHCP di sisi klien dengan menambahkan baris berikut ini pada /etc/dhcp/dhcpd.conf
:
Sama seperti pada sisi server, saya juga mengubah file /etc/default/isc-dhcp-server
agar mendengarkan DHCP request di
perangkat ens5
:
Untuk menerapkan konfigurasi DHCP di atas, saya memberikan perintah:
Seperti sebelumnya, saya menambahkan perintah berikut ini untuk mengaktifkan NAT:
Sebagai langkah terakhir, saya membuat konfigurasi OpenVPN dengan nama client.ovpn
dengan isi seperti berikut ini:
Untuk menjalankan OpenVPN, saya memberikan perintah berikut ini:
Sampai 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
.