Membangun Jaringan Desa Anti-Mati dengan MikroTik: PCC, Hotspot, dan 2 ISP Dinamis
Halo teman-teman! Jika Anda mengelola jaringan desa, kampung, atau RT/RW Net, Anda pasti tahu rasanya pusing ketika internet mati atau lambat di jam-jam sibuk. Belakangan ini, saya memutuskan untuk melakukan upgrade besar-besaran pada jaringan desa saya menggunakan MikroTik RB450Gx4 (RouterOS v7).
Tujuan saya sederhana: Internet harus kencang, tidak boleh mati, dan pengguna harus login dulu (Hotspot).
Tapi ada tantangannya: Saya menggunakan dua ISP, dan keduanya memiliki IP Dinamis (IP yang berubah-ubah). Di artikel ini, saya akan berbagi cerita, konfigurasi, dan "jebakan" yang saya alami saat menyatukan Load Balancing PCC, Hotspot, dan IP Dinamis.
πΊοΈ Arsitektur Jaringan Saya
- Router: MikroTik RB450Gx4 (RouterOS v7)
- ISP1: Dinamis (
ISP-ether5) - ISP2: Dinamis (
ISP-port-1) - Jaringan Lokal (LAN/Hotspot):
ether2(IP10.10.10.1/ Subnet10.10.8.0/22)
Tujuan Saya:
- Menggabungkan bandwidth dua ISP (Load Balancing).
- 100% Uptime (Jika ISP1 mati, ISP2 mengambil alih, dan sebaliknya).
- Semuanya berjalan otomatis (Tidak perlu setting ulang saat IP dari ISP berubah).
- Pengguna wajib login via Hotspot tanpa merusak sistem Load Balancing.
Langkah 1: Menjinakkan IP Dinamis (Routing Table & Script DHCP)
Kenapa ini penting?
Karena IP saya dinamis, gateway (gerbang keluar) dari ISP sering berubah. Jika saya hardcode (kunci) IP gateway, internet akan mati begitu ISP mengganti IP saya. Selain itu, untuk PCC, kita butuh "Tabel Routing" terpisah agar router tahu paket ini harus lewat pintu mana.
Solusinya:
Pertama, saya membuat dua tabel routing khusus, dan dua tabel main (untuk trafik router itu sendiri seperti DNS/NTP):
routeros/routing table add name=to_ISP1 fib
/routing table add name=to_ISP2 fib
Lalu, saya membuat Primary Route dan Fallback Route. Perhatikan check-gateway=ping. Ini adalah kunci failover saya. Jika router tidak bisa ping gateway, rute akan dianggap mati dan dialihkan ke rute cadangan!
routeros# Rute Utama (Distance 1)
/ip route add dst-address=0.0.0.0/0 gateway=192.168.4.1 routing-table=to_ISP1 distance=1 check-gateway=ping comment="ISP1-Primary"
/ip route add dst-address=0.0.0.0/0 gateway=100.64.0.1 routing-table=to_ISP2 distance=1 check-gateway=ping comment="ISP2-Primary"
# Rute Cadangan (Distance 2) - Saling silang
/ip route add dst-address=0.0.0.0/0 gateway=100.64.0.1 routing-table=to_ISP1 distance=2 check-gateway=ping comment="ISP1-Fallback-to-ISP2"
/ip route add dst-address=0.0.0.0/0 gateway=192.168.4.1 routing-table=to_ISP2 distance=2 check-gateway=ping comment="ISP2-Fallback-to-ISP1"
# Rute Main untuk trafik Router (DNS, NTP, Update)
/ip route add dst-address=0.0.0.0/0 gateway=192.168.4.1 routing-table=main distance=1 comment="Main-ISP1"
/ip route add dst-address=0.0.0.0/0 gateway=100.64.0.1 routing-table=main distance=2 comment="Main-ISP2"
Otomatisasinya (Script DHCP Client):
Saya mematikan opsi Add Default Route di DHCP Client. Sebagai gantinya, saya menempelkan script di DHCP Client. Setiap kali ISP memperbarui IP, script ini akan menangkap IP Gateway baru dan memperbarui rute utama dan rute cadangan secara instan!
Script untuk ISP1 (ISP-ether5):
routeros:if ($bound=1) do={
:local newGw ($"gateway-address")
/ip route set [find comment="ISP1-Primary"] gateway=$newGw
/ip route set [find comment="ISP2-Fallback-to-ISP1"] gateway=$newGw
/ip route set [find comment="Main-ISP1"] gateway=$newGw
}
Script untuk ISP2 (ISP-port-1):
routeros:if ($bound=1) do={
:local newGw ($"gateway-address")
/ip route set [find comment="ISP2-Primary"] gateway=$newGw
/ip route set [find comment="ISP1-Fallback-to-ISP2"] gateway=$newGw
/ip route set [find comment="Main-ISP2"] gateway=$newGw
}
Langkah 2: Jantung Jaringan β Mangle Rules & PCC
Kenapa ini penting?
PCC membagi koneksi (bukan paket data). Saya harus memberi tahu router untuk tidak mengutak-atik trafik lokal, dan membagi sisa trafik internet ke dua ISP.
Solusinya:
routeros# 1. Bypass Trafik Lokal (Wajib!)
/ip firewall mangle add chain=prerouting action=accept dst-address-type=local comment="Bypass local traffic"
/ip firewall mangle add chain=prerouting action=accept dst-address=10.10.8.0/22 comment="Bypass LAN ether2"
# 2. Klasifikasi PCC (Contoh: Bagi Rata 50/50)
# Rule untuk ISP1
/ip firewall mangle add chain=prerouting action=mark-connection new-connection-mark=ISP1_conn connection-mark=no-mark dst-address-type=!local hotspot=auth per-connection-classifier=both-addresses-and-ports:2/0 comment="PCC ISP1"
# Rule untuk ISP2
/ip firewall mangle add chain=prerouting action=mark-connection new-connection-mark=ISP2_conn connection-mark=no-mark dst-address-type=!local hotspot=auth per-connection-classifier=both-addresses-and-ports:2/1 comment="PCC ISP2"
# 3. Terapkan Routing Mark
/ip firewall mangle add chain=prerouting action=mark-routing new-routing-mark=to_ISP1 connection-mark=ISP1_conn
/ip firewall mangle add chain=prerouting action=mark-routing new-routing-mark=to_ISP2 connection-mark=ISP2_conn
Langkah 3: Paradoks Hotspot (Kenapa Halaman Login Tidak Muncul?)
Ini masalah paling menyebalkan yang saya alami!
Saat pengguna baru terhubung ke Wi-Fi, HP mereka mencoba membuka Google. MikroTik Hotspot seharusnya membelokkan mereka ke halaman login (10.10.10.1).
TAPI TUNGGU! Rule PCC saya ada di antrean prerouting. PCC menangkap koneksi tersebut lebih dulu, menandainya, dan melemparkannya ke ISP. Hotspot tidak pernah mendapat kesempatan untuk mencegatnya. Akibatnya, pengguna mendapat timeout, dan halaman login tidak pernah muncul.
Solusinya:
Saya menggunakan matcher bawaan MikroTik. Saya memberi tahu rule PCC: "Hanya bagi beban (load balance) trafik ini JIKA penggunanya sudah login."
Perhatikan parameter hotspot=auth yang saya tambahkan di Rule PCC Langkah 2 di atas.
- Jika pengguna belum login, trafik mereka diabaikan oleh PCC, tetap di tabel
main, dan berhasil dicegat oleh Hotspot. - Jika pengguna sudah login, trafik mereka cocok dengan
hotspot=auth, ditandai, dan dibagi beban secara sempurna!
Langkah 4: Pembunuh Senyap β Bypass DNS dan NTP
Kenapa ini penting?
Setelah Hotspot berjalan, saya mendapat keluhan: "Internet lambat," dan STB (Set-Top Box) TV di desa tidak mau memperbarui jam/waktunya.
- DNS (Port 53): Jika HP menggunakan
8.8.8.8, permintaan DNS dipisah oleh PCC. Request keluar lewat ISP1, tapi balasannya datang lewat ISP2. HP membuang balasan itu, dan halaman web gagal dimuat. (Belum lagi beberapa ISP memblokir DNS Google). - NTP (Port 123): STB mencoba mengambil waktu sebelum login Hotspot. Jika dipisah oleh PCC, waktu gagal sinkron.
Solusinya:
Saya mem-bypass protokol kritis ini dari PCC dan memaksa mereka lewat tabel main.
routeros# Bypass DNS
/ip firewall mangle add chain=prerouting action=accept protocol=udp dst-port=53 comment="Bypass DNS UDP from PCC" place-before=12
/ip firewall mangle add chain=prerouting action=accept protocol=tcp dst-port=53 comment="Bypass DNS TCP from PCC" place-before=13
# Bypass NTP
/ip firewall mangle add chain=prerouting action=accept protocol=udp dst-port=123 comment="Bypass NTP from PCC" place-before=14
Agar STB bisa mengambil waktu sebelum login, saya membuat "lubang" di tembok Hotspot menggunakan Walled Garden:
routeros/ip hotspot walled-garden ip add action=accept protocol=udp dst-port=123 comment="Allow NTP for STB"
π Hasil Akhir
Dengan menggabungkan script DHCP client, failover check-gateway, bypass hotspot-auth, dan aturan protokol khusus, jaringan desa saya sekarang memiliki:
- Dua ISP yang bekerja bersamaan (Load Balancing).
- Rute yang diperbarui otomatis saat IP dinamis berubah.
- Failover mulus tanpa perlu mencabut kabel (Jika satu ISP mati, ISP lain mengambil alih 100%).
- Pengguna desa bisa login via Hotspot dengan lancar tanpa error.
- DNS dan sinkronisasi waktu (jam TV/STB) berjalan sangat stabil.
Tips dari saya: Jangan lupa untuk selalu memperbarui (update) RouterOS ke versi stabil terbaru setelah jaringan berjalan mulus, untuk melindungi jaringan desa Anda dari celah keamanan!
Semoga pengalaman dan konfigurasi saya ini bisa membantu teman-teman yang sedang membangun jaringan internet yang lebih baik di daerahnya! Jika ada pertanyaan, silakan tinggalkan komentar di bawah.