Aplikasi billing & manajemen ISP (fiber optic) — PWA pelanggan, portal teknisi & kolektor, admin panel lengkap, multi-vendor OLT, RADIUS, WhatsApp/Telegram, pembayaran QRIS. Kredit & lisensi (ISC): - Base kode & repo: alijayanet/billing-rtrw oleh Alijaya Net — terima kasih banyak atas base kode dan repo yang bermanfaat. - Add-on: GoWA, LibreSpeed/OpenSpeedTest, Uptime Kuma, notification-forwarder. - Dikembangkan menjadi OPEN-ISP oleh oxpoe — https://github.com/oxpoe/open-isp
9.2 KiB
Dokumentasi Integrasi RADIUS & MikroTik
📋 Overview
Aplikasi billing ini mendukung dua mode autentikasi PPPoE:
- Mode MikroTik - PPPoE Secret disimpan di MikroTik (RADIUS offline)
- Mode RADIUS - PPPoE Secret dikelola oleh RADIUS Server internal (RADIUS aktif)
- Mode Hybrid - RADIUS aktif tapi beberapa pelanggan tetap menggunakan MikroTik secret
🔄 Cara Kerja Saat Tambah/Edit Pelanggan
✅ PRINSIP PENTING:
PPPoE Secret TIDAK PERNAH dihapus dari MikroTik secara otomatis!
Sistem hanya melakukan:
- ✅ CREATE secret baru (jika belum ada)
- ✅ UPDATE profile secret (jika sudah ada)
- ❌ TIDAK menghapus/remove secret dari MikroTik
🎯 Logika Sinkronisasi ke MikroTik
1. SAAT RADIUS OFFLINE (radius_enabled = "0")
Semua pelanggan PPPoE WAJIB memiliki secret di MikroTik.
Saat Tambah Pelanggan:
1. Admin input: username, password, package
2. Data disimpan ke database billing
3. Secret OTOMATIS dibuat di MikroTik
4. Profile di-set sesuai package pelanggan
Saat Edit Pelanggan:
1. Admin edit data pelanggan (ganti package, status, dll)
2. Data diupdate di database billing
3. Sistem cek: apakah secret sudah ada di MikroTik?
- Jika SUDAH ADA: Hanya update PROFILE (tidak hapus!)
- Jika BELUM ADA: Create secret baru (jika ada password)
2. SAAT RADIUS AKTIF (radius_enabled = "1")
Ada dua kemungkinan per pelanggan:
Mode Full RADIUS (is_radius = 1)
- Pelanggan autentikasi via RADIUS Server
- Secret TIDAK perlu ada di MikroTik
- MikroTik hanya sebagai NAS Client yang forward request ke RADIUS
- Sinkronisasi ke MikroTik: SKIP
Mode Hybrid - Tetap ke MikroTik (is_radius = 0)
- Pelanggan autentikasi langsung dari MikroTik secret
- Secret HARUS ada di MikroTik
- Sinkronisasi ke MikroTik: AKTIF
- Berguna untuk pelanggan khusus yang tidak mau pakai RADIUS
🔧 Implementasi Teknis
File yang Dimodifikasi:
routes/adminPortal.js(route handler tambah/edit pelanggan)
Logika Kode:
// Tentukan apakah harus sync ke MikroTik
const radiusEnabled = getSetting('radius_enabled', '0') === '1';
const isRadius = radiusEnabled ? (req.body.is_radius || 0) : 0;
const shouldSyncToMikrotik = !radiusEnabled || !isRadius;
// Jika shouldSyncToMikrotik = true, maka:
if (shouldSyncToMikrotik) {
// TAMBAH: Create secret baru ke MikroTik
// EDIT: Update profile atau create jika belum ada
}
Kondisi Sinkronisasi:
| RADIUS Status | is_radius | Sync ke MikroTik? | Keterangan |
|---|---|---|---|
| OFFLINE (0) | - | ✅ YA | Selalu ke MikroTik |
| AKTIF (1) | 0 | ✅ YA | Hybrid mode |
| AKTIF (1) | 1 | ❌ TIDAK | Full RADIUS |
📝 Contoh Skenario
Skenario 1: RADIUS Offline (Mode Normal)
Settings: radius_enabled = "0"
TAMBAH PELANGGAN:
- Username: customer01
- Password: pass123
- Package: 10Mbps
HASIL:
✅ Data tersimpan di database billing
✅ Secret dibuat di MikroTik: customer01/pass123
✅ Profile di-set: 10Mbps
EDIT PELANGGAN (Ganti Package ke 20Mbps):
✅ Data diupdate di database
✅ Profile di MikroTik diupdate: 10Mbps → 20Mbps
✅ Secret TIDAK dihapus, tetap ada di MikroTik
Skenario 2: RADIUS Aktif - Full RADIUS Mode
Settings: radius_enabled = "1"
Form: is_radius = 1 (checkbox dicentang)
TAMBAH PELANGGAN:
- Username: customer02
- Password: pass456
- Package: 20Mbps
HASIL:
✅ Data tersimpan di database billing
❌ Secret TIDAK dibuat di MikroTik (RADIUS yang handle)
✅ Pelanggan login via RADIUS Server
EDIT PELANGGAN:
✅ Data diupdate di database
❌ Tidak sync ke MikroTik (RADIUS mode)
Skenario 3: RADIUS Aktif - Hybrid Mode
Settings: radius_enabled = "1"
Form: is_radius = 0 (checkbox TIDAK dicentang)
TAMBAH PELANGGAN:
- Username: customer03
- Password: pass789
- Package: 50Mbps
HASIL:
✅ Data tersimpan di database billing
✅ Secret dibuat di MikroTik (meskipun RADIUS aktif)
✅ Pelanggan login dari MikroTik secret, bukan RADIUS
Berguna untuk:
- Pelanggan VIP yang butuh koneksi stabil
- Testing sebelum migrasi penuh ke RADIUS
🛡️ Keamanan & Best Practices
1. Password Management:
- ✅ Password disimpan di database billing
- ✅ Password disimpan di MikroTik secret (saat mode MikroTik)
- ✅ Password di-hash di database RADIUS accounting (aman)
2. Saat Hapus Pelanggan:
// File: services/customerService.js
// Fungsi: deleteCustomer()
// Secret AKAN dihapus dari MikroTik jika:
✅ Pelanggan dihapus dari database
✅ Connection type = pppoe
✅ Ada pppoe_username
✅ Ada router_id
// Ini adalah satu-satunya kondisi secret dihapus otomatis!
3. Saat Ganti Connection Type:
PPPoE → Static IP:
✅ pppoe_username dikosongkan di database
⚠️ Secret TETAP ada di MikroTik (tidak auto-hapus)
💡 Admin perlu hapus manual jika diperlukan
Static IP → PPPoE:
✅ pppoe_username diisi
✅ Secret dibuat baru di MikroTik (jika ada password)
🚀 Migrasi dari MikroTik ke RADIUS
Langkah Migrasi Bertahap:
Step 1: Persiapan
1. Pastikan database billing sudah lengkap (username & password)
2. Test RADIUS Server: aktifkan di Admin → RADIUS Settings
3. Setup MikroTik: jalankan script auto-setup dari admin panel
4. Test koneksi 1-2 pelanggan pilot
Step 2: Migrasi Bertahap
1. RADIUS aktif, tapi semua pelanggan is_radius = 0 (hybrid)
2. Pelanggan masih login dari MikroTik secret
3. Test RADIUS dengan mengubah 5-10 pelanggan ke is_radius = 1
4. Monitor stability & performance
Step 3: Full RADIUS
1. Bulk update semua pelanggan: is_radius = 1
2. Semua autentikasi via RADIUS Server
3. Secret di MikroTik bisa dihapus (opsional, untuk cleanup)
Rollback Plan:
Jika ada masalah dengan RADIUS:
1. Set radius_enabled = "0" di settings.json
2. Restart aplikasi
3. Semua pelanggan otomatis kembali ke MikroTik mode
4. Secret masih ada di MikroTik (tidak pernah dihapus)
🐛 Troubleshooting
Problem: "Secret tidak dibuat di MikroTik saat tambah pelanggan"
Cek:
-
✅ RADIUS Status: Apakah RADIUS sedang aktif?
- Jika YA: Cek checkbox "Mode RADIUS" di form (harus TIDAK dicentang)
- Jika TIDAK: Seharusnya auto-create
-
✅ Password: Apakah field password diisi?
- Jika TIDAK: Secret tidak bisa dibuat
- Jika YA: Cek error log di
logs/error.log
-
✅ Router: Apakah router MikroTik dipilih dan online?
- Test koneksi: Admin → MikroTik → Test Connection
-
✅ Profile: Apakah profile/package ada di MikroTik?
- Cek: Admin → MikroTik → PPPoE Profiles
Solusi:
# Cek log error
tail -f logs/error.log
# Restart aplikasi
pm2 restart billing-rtrw
Problem: "Secret tidak terupdate saat edit pelanggan"
Cek:
- ✅ Mode RADIUS: Apakah is_radius = 0? (harus 0 untuk sync ke MikroTik)
- ✅ Username: Apakah pppoe_username terisi?
- ✅ Connection Type: Apakah masih PPPoE?
Catatan:
- Update hanya mengubah profile, bukan password
- Jika ingin ganti password, edit langsung di MikroTik
Problem: "Pelanggan tidak bisa login setelah edit"
Kemungkinan:
- Profile tidak ada di MikroTik
- Secret terhapus manual dari MikroTik
- Password berubah di database tapi tidak di MikroTik
Solusi:
1. Cek secret di MikroTik:
Admin → MikroTik → PPPoE Secrets
2. Jika secret hilang:
- Edit pelanggan
- Isi password
- Save (akan create secret baru)
3. Jika profile salah:
- Edit pelanggan
- Ganti package
- Save (akan update profile)
📊 Monitoring & Logging
Log yang Tercatat:
Saat Tambah Pelanggan:
[Add Customer] Created PPPoE secret "customer01" in MikroTik (RADIUS OFF)
[Add Customer] Updated PPPoE profile for "customer01" to "10Mbps"
Saat Edit Pelanggan:
[Edit Customer] Updated PPPoE profile for "customer01" to "20Mbps"
[Edit Customer] Created NEW PPPoE secret for "customer02" in MikroTik
Saat Hapus Pelanggan:
[DELETE] Attempting to remove PPPoE secret: customer01 from router 1
[DELETE] Successfully removed PPPoE secret for customer01 from MikroTik
Lokasi File Log:
logs/combined.log - Semua log aplikasi
logs/error.log - Error saja
🎓 Kesimpulan
Yang Perlu Diingat:
- ✅ PPPoE Secret TIDAK PERNAH dihapus otomatis saat edit pelanggan
- ✅ RADIUS offline = semua ke MikroTik (auto-create/update)
- ✅ RADIUS aktif = bisa hybrid (sebagian RADIUS, sebagian MikroTik)
- ✅ Edit hanya update profile, bukan hapus secret
- ✅ Hapus pelanggan = secret dihapus (satu-satunya kondisi auto-delete)
Keuntungan Desain Ini:
- 🔒 Aman: Secret tidak hilang karena salah edit
- 🔄 Fleksibel: Bisa RADIUS, MikroTik, atau hybrid
- 📈 Scalable: Mudah migrasi bertahap ke RADIUS
- 🛡️ Rollback: Bisa kembali ke MikroTik mode kapan saja
📞 Support
Jika ada pertanyaan atau masalah, hubungi developer atau cek dokumentasi lengkap di:
- README.md
- FITUR_APLIKASI_LENGKAP.md
- AUDIT_SECURITY_2026.md
Dibuat: 18 Agustus 2026
Versi: 1.0
Last Update: 18 Agustus 2026