Cara Membuat Hotspot Voucher di OpenWrt untuk Usaha RT/RW-net: Captive Portal dan Limit Bandwidth

Kalau di sekitar rumahmu banyak tetangga yang butuh internet tapi tidak mau langganan bulanan, usaha RT/RW-net adalah peluang yang nyata. Modalnya satu router OpenWrt, satu koneksi internet, dan sistem voucher: tetangga beli kode, masukkan kode di halaman login, internet langsung jalan sampai masa aktifnya habis. Artikel ini membahas cara membuat hotspot voucher di OpenWrt sampai selesai — dari SSID khusus hotspot, captive portal, kode voucher, sampai limit bandwidth.

Yang kamu butuhkan: router yang sudah terinstal OpenWrt (minimal RAM 128 MB lebih nyaman), koneksi internet yang sudah jalan di router itu, dan akses SSH atau LuCI. Kalau router-mu belum OpenWrt sama sekali, pelajari dulu dasar instalasinya, atau pakai solusi siap pakai dari openwrt.my.id supaya tidak mulai dari nol.

1. Pisahkan Jaringan Hotspot dari WiFi Pribadi

Aturan pertama usaha voucher: jangan campur pelanggan dengan jaringan pribadimu. Buat network baru bernama hotspot dengan subnet sendiri, misalnya 192.168.10.0/24, dan SSID sendiri, misalnya "RT-RW-Net". Dengan begitu, kalau ada pelanggan yang iseng, perangkat rumahmu tetap aman.

Tambahkan network baru di /etc/config/network:

config interface 'hotspot'
        option device 'br-hotspot'
        option proto 'static'
        option ipaddr '192.168.10.1'
        option netmask '255.255.255.0'

config device
        option name 'br-hotspot'
        option type 'bridge'
        list ports 'lan2'

Kalau router-mu hanya punya satu port LAN, lewati bridge di atas dan buat SSID hotspot menumpang di radio yang sama — yang penting network-nya tetap terpisah. Selanjutnya, buat DHCP khusus hotspot di /etc/config/dhcp:

config dhcp 'hotspot'
        option interface 'hotspot'
        option start '100'
        option limit '100'
        option leasetime '2h'
        option dhcp_option '3,192.168.10.1'
        option dhcp_option '6,192.168.10.1'

Lalu buat SSID-nya di /etc/config/wireless (sesuaikan nama radio-mu, biasanya radio0):

config wifi-iface 'hotspot'
        option device 'radio0'
        option mode 'ap'
        option ssid 'RT-RW-Net'
        option network 'hotspot'
        option encryption 'none'

Enkripsi sengaja none karena autentikasinya lewat captive portal, bukan password WiFi. Terakhir, buat zona firewall sendiri di /etc/config/firewall supaya hotspot hanya boleh ke internet, bukan ke LAN rumah:

config zone
        option name 'hotspot'
        option input 'REJECT'
        option output 'ACCEPT'
        option forward 'REJECT'
        list network 'hotspot'

config forwarding
        option src 'hotspot'
        option dest 'wan'

Simpan semua file, lalu restart servicenya:

/etc/init.d/network restart
/etc/init.d/dnsmasq restart
/etc/init.d/firewall restart

Verifikasi awal: sambungkan HP ke SSID "RT-RW-Net" dan pastikan HP mendapat IP 192.168.10.x. Belum ada internet dulu tidak apa-apa — portalnya memang belum dipasang.

2. Instal dan Konfigurasi Captive Portal (opennds)

Captive portal adalah halaman login yang otomatis muncul saat pelanggan tersambung ke WiFi. Di OpenWrt, paket yang paling praktis untuk ini adalah opennds. Instal lewat SSH:

opkg update
opkg install opennds luci-app-opennds

Kemudian atur opennds di /etc/config/opennds agar menjaga interface hotspot:

config opennds
        option enabled '1'
        option gatewayinterface 'br-hotspot'
        option gatewayaddress '192.168.10.1'
        option gatewayport '2050'
        option maxclients '100'
        option sessiontimeout '1440'
        option fasport '2080'
        option fasremotefqdn '192.168.10.1'
        option faspath '/voucher/'
        option preauthidletimeout '30'
        option authidletimeout '120'

Penjelasan singkat: gatewayinterface adalah jaringan hotspot yang dijaga, sessiontimeout 1440 menit adalah batas maksimum satu sesi (24 jam — voucher harian akan kita batasi lebih pendek lewat skrip nanti), dan faspath adalah alamat halaman voucher yang akan kita buat. Aktifkan servicenya:

/etc/init.d/opennds enable
/etc/init.d/opennds restart
ndsctl status

Kalau ndsctl status menampilkan gateway berjalan dan 0 klien, portalmu sudah hidup. Sambungkan HP ke SSID hotspot — halaman splash bawaan opennds akan muncul. Nanti kita ganti dengan halaman voucher sendiri.

3. Buat Halaman Voucher dan Sistem Kode Voucher

Di sinilah usaha voucher-mu terbentuk. Kita memakai FAS (Forwarding Authentication Service) opennds: halaman voucher berjalan di router sendiri lewat uhttpd, memeriksa kode yang dimasukkan pelanggan, lalu mengizinkan perangkatnya lewat perintah ndsctl auth.

Langkah pertama, buat daftar kode voucher. Simpan di /etc/opennds/vouchers.txt dengan format: kode, durasi dalam menit, dan status. Contoh:

RWNET-7D2K-9A,1440,unused
RWNET-4P8M-2Q,10080,unused
RWNET-1X5Z-7B,43200,unused

Artinya: kode pertama berlaku 1 hari (1440 menit), kedua 7 hari, ketiga 30 hari. Untuk membuat banyak kode sekaligus, pakai skrip generator ini di router:

#!/bin/sh
# gen-voucher.sh: buat 20 voucher harian, 10 mingguan, 5 bulanan
OUT=/etc/opennds/vouchers.txt
mkdir -p /etc/opennds
: > "$OUT"
i=1
while [ $i -le 20 ]; do
  CODE="RWNET-HARI-$(tr -dc 'A-Z0-9' < /dev/urandom | head -c 6)"
  echo "$CODE,1440,unused" >> "$OUT"
  i=$((i+1))
done
i=1
while [ $i -le 10 ]; do
  CODE="RWNET-MINGGU-$(tr -dc 'A-Z0-9' < /dev/urandom | head -c 6)"
  echo "$CODE,10080,unused" >> "$OUT"
  i=$((i+1))
done
i=1
while [ $i -le 5 ]; do
  CODE="RWNET-BULAN-$(tr -dc 'A-Z0-9' < /dev/urandom | head -c 6)"
  echo "$CODE,43200,unused" >> "$OUT"
  i=$((i+1))
done
echo "Voucher dibuat:"
cat "$OUT"

Jalankan dengan sh gen-voucher.sh, lalu cetak daftarnya untuk dijual — misalnya ditempel di warung atau dikirim lewat chat. Satu kode untuk satu perangkat; begitu dipakai, statusnya berubah jadi used dan tidak bisa dipakai orang lain.

Langkah kedua, buat halaman voucher di /www/voucher/index.html (uhttpd melayani folder /www secara default). Halaman ini menampilkan form kode dan meneruskannya ke skrip validasi:

<html>
<head><title>Hotspot RT/RW-Net</title></head>
<body>
<h1>Selamat datang di Hotspot RT/RW-Net</h1>
<p>Masukkan kode voucher yang sudah kamu beli:</p>
<form action="/cgi-bin/voucher" method="get">
<input type="text" name="code" placeholder="Contoh: RWNET-HARI-XXXXXX" />
<input type="hidden" name="tok" id="tok" value="" />
<button type="submit">Aktifkan Internet</button>
</form>
<p>Belum punya voucher? Hubungi admin RT/RW-Net.</p>
<script>
document.getElementById('tok').value =
  new URLSearchParams(location.search).get('tok') || '';
</script>
</body>
</html>

Langkah ketiga, buat skrip validasi di /www/cgi-bin/voucher dan jadikan executable (chmod +x /www/cgi-bin/voucher):

#!/bin/sh
echo "Content-type: text/html"
echo ""
CODE=$(echo "$QUERY_STRING" | sed -n 's/.*code=\([^&]*\).*/\1/p')
TOK=$(echo "$QUERY_STRING" | sed -n 's/.*tok=\([^&]*\).*/\1/p')
LINE=$(grep "^$CODE," /etc/opennds/vouchers.txt | grep ',unused$')
if [ -z "$LINE" ]; then
  echo "<h1>Kode salah atau sudah dipakai</h1>"
  echo "<p>Periksa lagi kode voucher-mu, atau beli voucher baru ke admin.</p>"
  exit 0
fi
MINUTES=$(echo "$LINE" | cut -d, -f2)
sed -i "s/^$CODE,.*/$CODE,$MINUTES,used/" /etc/opennds/vouchers.txt
ndsctl auth "$TOK" "$MINUTES"
echo "<h1>Internet aktif!</h1>"
echo "<p>Voucher berlaku $MINUTES menit. Selamat berselancar.</p>"

Cara kerjanya sederhana: skrip mencari kode di daftar, menolak kalau tidak ada atau sudah dipakai, menandai kode jadi used, lalu memanggil ndsctl auth dengan durasi sesuai paket. Pelanggan yang masa aktifnya habis akan otomatis kembali ke halaman voucher saat membuka internet lagi.

4. Limit Bandwidth Supaya Satu Orang Tidak Menghabiskan Semua

Usaha voucher gagal kalau satu pelanggan download besar-besaran sementara yang lain tidak bisa browsing. Pasang SQM di interface hotspot supaya pembagian bandwidth adil dan latensi tetap rendah:

opkg install luci-app-sqm
uci set sqm.hotspot=queue
uci set sqm.hotspot.interface='br-hotspot'
uci set sqm.hotspot.qdisc='cake'
uci set sqm.hotspot.script='piece_of_cake.qos'
uci set sqm.hotspot.download='40000'
uci set sqm.hotspot.upload='10000'
uci set sqm.hotspot.enabled='1'
uci commit sqm
/etc/init.d/sqm restart

Angka di atas contoh untuk koneksi 50 Mbps: batasi total hotspot di 40 Mbps download dan 10 Mbps upload, sisakan sedikit untuk jaringan pribadimu. Sesuaikan dengan kecepatan internetmu — ukur dulu dengan speedtest, lalu isi 85–90 persen dari hasil ukur. Cake akan membagi bandwidth secara adil antar perangkat, jadi tidak ada satu HP yang memonopoli.

Kalau mau lebih ketat per paket voucher (misalnya paket hemat dibatasi lebih rendah dari paket bulanan), tambahkan aturan tc per perangkat setelah autentikasi, atau pisahkan SSID per kelas paket. Untuk tahap awal, SQM yang adil seperti di atas sudah cukup untuk puluhan pelanggan rumahan.

5. Verifikasi: Uji dari HP Pelanggan Sampai Beres

Jangan langsung jualan sebelum uji end-to-end ini lolos semua:

1. Portal muncul otomatis. Sambungkan HP ke SSID "RT-RW-Net", buka browser — halaman voucher harus muncul tanpa mengetik alamat apa pun.

2. Kode salah ditolak. Masukkan kode sembarangan — harus muncul pesan kode salah, dan HP tetap tidak bisa internet.

3. Kode benar mengaktifkan internet. Masukkan satu kode dari daftar — HP harus bisa browsing dan speedtest jalan. Cek di router:

ndsctl clients
ndsctl status

Perangkatmu harus terlihat sebagai klien terautentikasi dengan sisa waktu sesuai paket.

4. Masa aktif benar-benar habis. Untuk menguji tanpa menunggu seharian, buat satu kode percobaan berdurasi 5 menit, pakai, tunggu 5 menit, lalu coba browsing lagi — halaman voucher harus muncul kembali.

5. Pelanggan tidak bisa masuk LAN rumah. Dari HP hotspot, coba akses 192.168.1.1 (IP LAN rumah) — harus gagal, karena zona firewall hotspot tidak diizinkan ke LAN.

Kalau satu langkah gagal, cek urutannya: DHCP hotspot jalan atau tidak, opennds aktif atau tidak (logread | grep opennds), dan skrip voucher sudah executable atau belum.

6. Tips Jualan Voucher Biar Laris dan Minim Komplain

Tentukan harga dari biaya internetmu. Hitung langganan ISP per bulan dibagi target pelanggan. Contoh: internet Rp300.000/bulan dibagi 30 pelanggan = Rp10.000 per pelanggan sebagai modal — voucher harian Rp3.000–Rp5.000, mingguan Rp15.000–Rp20.000, dan bulanan Rp50.000–Rp75.000 adalah titik awal yang wajar di banyak kampung dan perumahan.

Cetak voucher yang rapi. Satu kertas kecil berisi: nama hotspot, kode voucher, durasi, dan nomor admin. Pelanggan yang komplain "kode tidak bisa" hampir selalu salah ketik — minta mereka foto kertas vouchernya, lalu cek status kode itu di /etc/opennds/vouchers.txt.

Pisahkan SSID pribadi dan SSID jualan. Jangan pernah membagikan password WiFi rumah ke pelanggan. Kalau router-mu hanya punya satu radio dan SSID pribadi ikut melambat, turunkan dulu total SQM hotspot seperti langkah 4.

Catat pemasukan dan stok kode. Setiap minggu, hitung kode used versus unused di file voucher. Kalau kode habis di tengah minggu, pelanggan kecewa — selalu sediakan stok 2 minggu ke depan.

Penutup: Mulai dari Satu RT Dulu

Hotspot voucher OpenWrt tidak butuh modal besar, tapi butuh sistem yang rapi: jaringan terpisah, portal yang jelas, kode sekali pakai, dan limit bandwidth yang adil. Mulai dari satu RT, uji dengan tetangga terdekat, perbaiki yang komplain, baru tambah jangkauan dengan access point tambahan.

Kalau kamu tidak mau meracik konfigurasi di atas satu per satu — file network, opennds, halaman voucher, dan skrip validasinya — ada jalan pintasnya: openwrt.my.id menyediakan Config Hotspot Voucher (RT/RW-net) seharga Rp69.000, sistem voucher siap jualan lengkap dengan captive portal, limit bandwidth, dan masa aktif per voucher, tinggal diimpor ke router OpenWrt-mu. Selamat berjualan, dan semoga hotspot-mu jadi langganan satu kampung.

Komentar