Saat ini ada banyak sekali solusi VPN yang tersedia dengan segala kelebihan dan keterbatasannya. Beberapa contoh solusi yang populer dan gratis adalah OpenVPN, strongSwan, WireGuard, berbagai implementasi PPTP, tinc, dan VPN via SSH. Posting ini akan membahas mengenai tinc yang memiliki fitur mesh networking.
Beberapa perbedaan dari berbagai solusi VPN ini adalah:
- Support platformnya. Contoh: saat ini wireguard tidak memiliki client di Windows, jadi kalau Anda memakai Windows, ini jelas tidak akan dipertimbangkan.
- Kemudahan instalasinya (contoh: VPN melalui SSH cukup rumit setupnya, terutama di Windows)
- Kecepatannya (ini biasanya hanya jika Anda memakai link dengan kecepatan tinggi) dan CPU usagenya (jika memiliki komputer dengan spesifikasi rendah)
- Keamanannya, walau secara praktis serangan terhadap berbagai protokol VPN ini jarang/sulit dilakukan kecuali pada protokol kuno seperti PPTP.
Selain berbagai perbedaan teknis, pertimbangan lain memilih VPN adalah: apakah protokol VPN tertentu atau port tertentu diblok oleh ISP. Contohnya di ISP saya saat ini VPN dengan PPTP diblok, jadi harus menggunakan yang lain.
Karena ada begitu banyak software VPN, maka saya tidak akan membandingkan semuanya dan hanya akan membahas tinc saja di posting ini. Pengetahuan di atas sekedar untuk memberitahu bahwa tinc mungkin bukan solusi terbaik di berbagai skenario.
Seperti saya singgung di atas Kelebihan tinc adalah kemampuannya membuat mesh network. Mungkin ada yang bertanya-tanya: maksudnya mesh networking seperti apa sih? Maksudnya adalah sebuah node bisa terkoneksi ke node lain tanpa melalui hierarki tertentu dan sifatnya dinamik.
Semua VPN bisa kita gunakan untuk membuat konfigurasi seperti ini: ada server dan banyak client.
Dengan tinc kita bisa membuat konfigurasi seperti gambar berikut.
Garis yang saya gambarkan ini sekedar menunjukkan bahwa ada setting agar suatu node melakukan koneksi ke node tertentu. Dalam praktiknya: setelah kita mengkonfigurasi ini, kita bisa melakukan koneksi dari satu node ke node manapun.
Contoh konfigurasi di atas kira-kira seperti ini:
- Ada 2 VPS (Node 1 dan Node 4) dengan IP Publik
- Node 2 dan 3 diset bisa melakukan koneksi ke node 1 (IP node i ini publik jadi mudah setting ini)
- Node 5 dan 6 diset bisa melakukan koneksi ke node 4
- Node 7 (mungkin ini sebuah virtual machine di Node 6) diset untuk melakukan koneksi melalui Node 6
Tentunya konfigurasi jaringannya bisa seperti apa saja: intinya sebuah node bisa dikoneksikan ke satu atau lebih node lain (contohnya bisa saja dibuat setting bahwa Node 2 bisa terkoneksi langsung ke Node 3).
Setelah setting ini selesai, koneksi dari node manapun ke manapun bisa dilakukan seolah-olah semuanya ada di jaringan yang sama. Jadi node 7 ke node 2 bisa langsung dilakukan.
Bagaimana jika kita ingin menambah node baru? misalnya ingin menambah VM di node 6, sehingga ada Node 8 yang terkoneksi ke node 5, apakah kita perlu susah payah mengubah semua konfigurasi? Jawabannya: tidak, kita cukup menambahkan di node 6 bahwa ada node bernama Node 8 dengan public key tertentu, dan di Node 8 perlu diberi public key Node 6 supaya bisa tahu bahwa Node 6 ini adalah node yang valid.
Kehebatan tinc adalah jika kita menambahkan Node 8 yang terkoneksi ke Node 6, maka Node 7 dan 8 bisa berkomunikasi langsung di jaringan lokal, tidak melalui VPS. Bahkan bisa juga kita mengkonfigurasi agar Node 2 dan 3 juga melakukan koneksi ke dua VPN bukan cuma 1 (ke Node 1 dan Node 4). Jika Node 1 down, otomatis route lain akan diambil (lewat Node 4).
Atau jika masih sulit dibayangkan. Anggap saja semua node tersebut seolah terhubung ke sebuah switch virtual (atau hub, tergantung modenya di konfigurasi tinc). Karena terhubung ke switch maka semua seolah berada di jaringan yang sama.
Konfigurasi di Linux
Untuk menkonfigurasi sebuah node, yang perlu dilakukan:
- membuat sebuah direktori dengan nama jaringan yang kita inginkan
- membuat file tinc.conf di direktori itu
- membuat private dan public key untuk host kita
- mengcopy public key host lain yang ingin kita hubungi
- mengkonfigurasi interface jaringan
Bagian terakhir (konfigurasi interface jaringan) ini yang berbeda di tiap OS. Kita bisa memakai skrip atau mensetup manual.
Tentunya sebelum mulai, kita perlu menginstall tinc. Gunakan software package manager yang sesuai untuk OS masing-masing atau gunakan installer untuk Windows. Di ubuntu/debian:
apt-get install tinc
Saya contohkan jaringan kecil pertama, dengan node1 ada di eksternal (punya IP publik), sedangkan yang lain IP-nya private. Saya beri nama jaringan ini: jaringanku. Bayangkan saja nama jaringan ini seperti nama sebuah switch dalam ilustrasi sebelumnya.
Untuk contoh ini host eksternal saya beri nama “serverku” dan host internal “komputerku“. Sekarang kita konfigurasi serverku:
Buat direktori baru:
sudo mkdir -p /etc/tinc/jaringanku/hosts
Buat file tinc.conf (pathnya: /etc/tinc/jaringaku/tinc.conf). Isinya:
Name = serverku
AddressFamily = ipv4
Interface = tun0
Buat file /etc/tinc/jaringanku/hosts/serverku dengan isi:
Address = alamat_ip_publik_serverku
Subnet = 10.0.0.1/32
Artinya IP server ini dalam jaringaku adalah 10.0.0.1, tentunya ini bisa diganti dengan IP private manapun. Saya sendiri sudah memakai IP 192.168 di jaringan rumah saya, jadi saya memakai 10.x.x.x untuk tinc.
Lalu buat private/public key untuk server ini, tekan saja enter untuk berbagai pertanyaan defaultnya
tincd -n jaringanku -K4096
Sekarang kita butuh skrip untuk mengeset IP ketika jaringan up dan menghapus IP ketika jaringan down.
Buat: /etc/tinc/jaringanku/tinc-up dengan isi:
#!/bin/sh
ifconfig $INTERFACE 10.0.0.1 netmask 255.255.255.0
Catatan: sebenarnya cara yang lebih modern adalah menggunakan perintah “ip addr add”. Tapi cara ini masih kurang cross platform (tidak jalan di BSD dsb). Jadi saya masih lebih suka memakai ifconfig.
Dan /etc/tinc/jaringanku/tinc-up
#!/bin/sh
ifconfig $INTERFACE down
Jangan lupa diset modenya agar bisa dieksekusi:
sudo chmod +x /etc/tinc/jaringanku/tinc-*
Sekarang untuk komputerku (yang ipnya private) langkahnya sangat mirip. Hanya saja di sini ada konfigurasi agar koneksi dilakukan dari host ini ke server publik (tidak bisa sebaliknya karena server publik tidak bisa melakukan koneksi ke jaringan internal).
sudo mkdir -p /etc/tinc/jaringanku/hosts
Isi tinc.conf disesuaikan: namanya dan ada ConnectTo
Name = komputerku
AddressFamily = ipv4
Interface = tun0
ConnectTo = serverku
Sekarang buat file /etc/tinc/jaringanku/hosts/komputerku dengan isi:
Subnet = 10.0.0.2/32
Cukup itu saja, kita akan memberi alamat 10.0.0.2 ke komputerku. Buat juga key untuk node ini
tincd -n jaringanku -K4096
Isi /etc/tinc/jaringanku/tinc-down sama dengan serverku, tapi isi tinc-up sedikit berbeda (IP-nya disesuaikan)
#!/bin/sh
ifconfig $INTERFACE 10.0.0.2 netmask 255.255.255.0
Nah sekarang langkah penting: setiap kali 2 node terhubung langsung, kedua node tersebut perlu tahu key satu sama lain. Jadi intinya:
- Copy isi /etc/tinc/jaringaku/hosts/serverku di server ke
/etc/tinc/jaringaku/hosts/serverku di komputerku - Copy isi /etc/tinc/jaringaku/hosts/komputerku ke
/etc/tinc/jaringaku/hosts/komputerku di server
Jadi misalnya kita mau menambah laptop (misalnya namanya: laptopku yang akan dipakai jalan-jalan dengan IP yang berbeda-beda), settingnya sama dengan komputerku. Kita cukup perlu copy key laptopku ke serverku dan isi key serverku ke laptop dan dari laptop kita bisa konek ke komputerku.
Dalam kasus itu kita tidak perlu mengcopy key komputerku ke laptop, walau boleh saja kalau mau. Misalnya supaya gampang, semua isi file hosts dicopy ke sebuah hosting atau dropbox dan tiap kali setup komputer baru, semua file-file di copy ke /etc/tinc/jaringaku/hosts/. Isinya hanya public key yang tidak rahasia, yang rahasia adalah private keynya.
Nah sekarang saatnya testing. Di server dan komputer jalankan:
tincd -D -d4 -n jaringanku
Jika semua beres, dari server kita bisa ping ke 10.0.0.2 (ke komputer) dan dari komputer kita bisa ping ke 10.0.0.1 (ke server). Jika semua lancar, kita bisa men-kill tincd dan membuatnya permanen. Supaya permanen, di sistem yang memakai systemd kita bisa menggunakan ini:
systemctl enable tinc@jaringanku
systemctl start tinc@jaringanku
Setting di Windows
Sebenarnya konfigurasinya sama saja dengan Linux. Yang berbeda adalah instalasinya dan lokasi direktorinya. Supaya tidak terlalu panjang artikelnya, silakan lihatpetunjuk instalasi di : https://www.tinc-vpn.org/examples/windows-install/
Lokasi direktori konfigurasi ada di: C:\Program Files (x86)\tinc (pada Windows 64 bit) atau C:\Program Files\tinc (Windows 32 bit). Buat direktori: “jaringanku” di dalam direktori tersebut (butuh hak admin, seperti halnya di Linux butuh root).
Untuk konfigurasi IP: kita tidak memakai skrip up dan down, IP di setting manual melalui GUI. Cara testingnya sama:
tincd -D -d4 -n jaringanku
Dan jika sudah OK, untuk membuat permanen (diinstall sebagai service).
tincd -n jaringanku
Jika ingin merestart, mendisable, atau menghapus service ini, maka bisa dilakukan melalui GUI Services di Windows. Atau jika menguasai PowerShell ini juga bisa dilakukan via PowerShell
Berikutnya
Setting tinc yang saya jelaskan hanya supaya kedua host terkoneksi dengan ip internal. Setelah itu kita bisa mensetup banyak hal lain, tapi tidak akan dibahas di sini. Contohnya yang bisa disetting:
- Jika kita ingin membagi koneksi internet server ke client (supaya client bisa browsing web dengan IP server seperti koneksi VPN pada umumnya) kita bisa memakai IP masquarading atau menginstall proxy server di server.
- Jika kita ingin server di rumah kita diakses dari luar, kita bisa memakai DNAT (atau SSH remote port forwarding).
Sebagai penutup: mengetahui berbagai teknologi VPN bisa sangat berguna dan bisa dipakai untuk menyelesaikan masalah sesuai kebutuhan kita.