Konteks
Universitas Muhammadiyah Surakarta memiliki 12 cabang/fakultas yang tersebar di area Solo Raya. Sebelumnya, koneksi antar site menggunakan static routing dengan backup link 4G yang diaktifkan manual. Beberapa masalah utama:
- Failover lambat — begitu link utama putus, admin harus manual switch ke backup, rata-rata downtime 30 detik sampai 2 menit
- Suboptimal routing — traffic dari Fakultas A ke server di Fakultas B kadang lewat core dulu padahal bisa langsung
- Tidak ada QoS — Zoom meeting keputus saat ada download besar di site yang sama
Yang Saya Kerjakan
1. Audit & Dokumentasi Topologi
Sebelum menyentuh apa pun, saya dokumentasikan seluruh topologi existing — 300+ perangkat, mixed vendor (Cisco, MikroTik, Fortinet). Ini jadi baseline dan menyelamatkan saya berkali-kali saat rollback diperlukan.
2. Desain Arsitektur Baru
Pindah dari static routing ke SD-WAN dengan BGP sebagai underlay:
┌──────────┐
│ CORE DC │
│ FortiGate│
└────┬─────┘
│ BGP
┌────────────┼────────────┐
│ │ │
┌────┴────┐ ┌────┴────┐ ┌────┴────┐
│ Site A │ │ Site B │ │ Site C │
│FortiGate│ │FortiGate│ │FortiGate│
└────┬────┘ └────┬────┘ └────┬────┘
│ IPSec │ IPSec │ IPSec
│ + 4G B/U │ + 4G B/U │ + 4G B/U
- BGP sebagai routing protocol (kenapa bukan OSPF? Karena policy-based routing lebih fleksibel dengan BGP attributes seperti local-pref dan AS-path)
- IPSec tunnel ke semua site dengan 4G sebagai backup otomatis
- SD-WAN rules untuk QoS: traffic VoIP/Zoom prioritas tertinggi, bulk download lowest
3. Migrasi Bertahap
Migrasi dilakukan per site, satu per satu, di luar jam kerja:
- Pre-config FortiGate di site target (parallel config, nggak ganggu existing)
- Schedule maintenance window 2 jam per site
- Swap fisik, verifikasi BGP neighbor up
- Monitor 24 jam sebelum lanjut site berikutnya
Total waktu migrasi: 3 minggu (12 site), zero complaint dari user.
4. Automation dengan Netmiko
Backup konfigurasi dan health check diotomasi pakai Python + Netmiko:
from netmiko import ConnectHandler
import json
devices = [
{"host": "10.10.1.1", "device_type": "fortinet"},
{"host": "10.10.2.1", "device_type": "fortinet"},
# ... 12 devices
]
for device in devices:
conn = ConnectHandler(**device, username="admin", password="...")
bgp_status = conn.send_command("get router info bgp summary")
# parse, log, alert if neighbor down
Hasil
| Metrik | Sebelum | Sesudah |
|---|---|---|
| Failover time | 30-120 detik (manual) | < 3 detik (otomatis) |
| Latency antar site | 12-18ms | 6-9ms |
| Zoom call quality | Sering putus | Stabil, jitter < 5ms |
| Waktu provisioning site baru | 2 hari | 2 jam |
Lesson Learned
-
BGP itu overkill untuk network kecil, tapi lifesaver untuk multi-site. Static routing 3 site masih ok, 12 site + backup link = resep mimpi buruk.
-
SD-WAN rule yang paling penting: SLA monitoring. Pastiin selalu ada health check ke next-hop, jangan cuma andalin interface up/down.
-
Dokumentasi sebelum sentuh apa pun. Satu-satunya alasan kenapa rollback 2x tetap mulus adalah karena saya punya persis config sebelumnya.
-
Kalau vendor bilang “seamless migration”, siapin rollback plan. Fortinet SD-WAN wizard bagus, tapi real world selalu ada edge case yang nggak ke-cover.