Kumpulan script untuk mengelola beberapa instance FreeRADIUS + REST API secara otomatis di satu server.
- OS: Ubuntu/Debian
- Root access
- Paket berikut (auto-install jika belum ada):
freeradius,freeradius-utils,freeradius-mysqlmariadb-clientpython3,python3-venvgit,openssl,iproute2
Script utama untuk membuat, mengelola, dan menghapus instance FreeRADIUS beserta database dan REST API-nya.
- Membuat database & user MariaDB khusus instance
- Mengimport schema FreeRADIUS ke database
- Membuat SQL module (
sql_<nama>) dan EAP module (eap_<nama>) - Membuat virtual server & inner tunnel dengan port acak yang belum terpakai
- Meng-clone repo freeradius-api ke
/root/<nama>-api/ - Mengisi
.envAPI dengan credentials database dan Swagger secara otomatis - Mengisi credentials di
autoclearzombie.sh+ membuat cron job (tiap 30 menit) - Mengisi credentials di
autobackups3.sh+ membuat cron job backup S3 (tiap hari jam 02:00) - Membuat dan mengaktifkan systemd service untuk REST API
| Port | Fungsi |
|---|---|
AUTH_PORT |
RADIUS Authentication |
AUTH_PORT + 1 |
RADIUS Accounting |
AUTH_PORT + 2000 |
CoA (Change of Authorization) |
AUTH_PORT + 5000 |
Inner Tunnel (EAP) |
API_PORT |
REST API (mulai dari 8100) |
Port dipilih secara acak (range 10000–59000) dan dicek agar tidak bentrok dengan port yang sudah dipakai.
Setiap instance menyimpan info di /etc/freeradius/3.0/.instance_<nama>, berisi:
- Credentials database
- Port yang digunakan
- URL API
sudo bash radius-manager.sh <command> [options]sudo bash radius-manager.sh create <nama> [db_pass]Membuat instance baru lengkap (FreeRADIUS + database + REST API).
<nama>— dipakai sebagai nama instance, database, dan user MariaDB[db_pass]— opsional, password database (auto-generate jika tidak diisi)
# Contoh
sudo bash radius-manager.sh create replaymedia
sudo bash radius-manager.sh create baimnabil MyPass123sudo bash radius-manager.sh delete <nama> [--with-db]Menghapus config FreeRADIUS dan API service.
--with-db— hapus juga database & user MariaDB (ada konfirmasi)
sudo bash radius-manager.sh delete replaymedia
sudo bash radius-manager.sh delete replaymedia --with-dbsudo bash radius-manager.sh start <nama>
sudo bash radius-manager.sh stop <nama>Mengaktifkan atau menonaktifkan instance (tanpa menghapus config).
sudo bash radius-manager.sh restartRestart FreeRADIUS (semua instance aktif ikut restart).
sudo bash radius-manager.sh listMenampilkan semua instance beserta status port dan service API.
sudo bash radius-manager.sh info <nama>Menampilkan detail credentials dan port instance.
sudo bash radius-manager.sh test <nama>Mengecek port dan mengirim Access-Request test ke instance.
sudo bash radius-manager.sh test-disconnect <nama> <username> <session-id>Mengirim CoA Disconnect-Request ke instance.
NAS didaftarkan langsung ke tabel nas di database instance:
USE <nama>;
INSERT INTO nas (nasname, shortname, type, secret, server)
VALUES ('IP_MIKROTIK', 'nama_nas', 'other', 'secret_radius', '<nama>');Ubah variabel berikut di bagian CONFIGURATION radius-manager.sh sesuai setup rclone:
S3_REMOTE="ljns3" # Nama remote rclone
S3_BUCKET="backup-db" # Nama bucket
S3_BACKUP_ROOT="radiusdb" # Root path di bucket (folder per instance: radiusdb/<nama>)
S3_BACKUP_SCHEDULE="0 2 * * *" # Jadwal cron (default: tiap hari jam 02:00)Pastikan rclone sudah terinstall dan remote ljns3 sudah dikonfigurasi:
apt install rclone
rclone config # Setup remote ljns3Script untuk meng-update semua instance API secara otomatis via git pull, cocok dijalankan sebagai cron job.
- Membaca semua instance dari
/etc/freeradius/3.0/.instance_* - Menjalankan
git pulldi direktori API masing-masing instance - Jika ada update:
- Re-patch credentials di
autoclearzombie.sh(agar tidak tertimpa hasil pull) - Re-patch credentials di
autobackups3.sh(agar tidak tertimpa hasil pull) - Restart systemd service instance tersebut
- Re-patch credentials di
- Jika Already up to date — skip, service tidak diganggu
chmod +x /root/update-api.sh
# Buka crontab
crontab -eTambahkan baris berikut (tiap jam):
0 * * * * /root/update-api.sh >> /var/log/update-api.log 2>&1
tail -f /var/log/update-api.logContoh output:
[2026-03-13 10:00:01] [INFO] --- Checking: replaymedia (/root/replaymedia-api) ---
[2026-03-13 10:00:02] [INFO] Git pull: Already up to date.
[2026-03-13 10:00:02] [INFO] Tidak ada perubahan, skip restart
[2026-03-13 10:00:03] [INFO] --- Checking: baimnabil (/root/baimnabil-api) ---
[2026-03-13 10:00:05] [INFO] Git pull: Updating a3f1c2d..9b8e4f1
[2026-03-13 10:00:05] [OK] autoclearzombie.sh di-patch ulang
[2026-03-13 10:00:07] [OK] Service baimnabil-api berhasil di-restart
[2026-03-13 10:00:07] [INFO] --- Done ---
/etc/freeradius/3.0/
├── .instance_<nama> # Info & credentials setiap instance
├── .port_registry # Registry port yang sudah terpakai
├── mods-available/
│ ├── sql_<nama> # SQL module per instance
│ └── eap_<nama> # EAP module per instance
├── mods-enabled/
│ ├── sql_<nama> -> ...
│ └── eap_<nama> -> ...
├── sites-available/
│ ├── <nama> # Virtual server per instance
│ └── inner-tunnel-<nama>
└── sites-enabled/
├── <nama> -> ...
└── inner-tunnel-<nama> -> ...
/root/
├── radius-manager.sh
├── update-api.sh
└── <nama>-api/ # Clone repo API per instance
├── .env # Credentials (auto-generated, chmod 600)
├── autoclearzombie.sh # Auto clear zombie sessions (auto-patched)
└── venv/
/etc/systemd/system/
└── <nama>-api.service # Service systemd per instance
/var/log/freeradius/
└── radacct-<nama>/ # Log accounting per instance
/var/log/
└── update-api.log # Log git pull & restart otomatis