Lewati ke konten utama
  1. Posts/

Tutorial Limit Bandwidth Per IP OpenWrt Pakai Nftables

·705 kata·4 menit
Noor Khafidzin
Penulis
Noor Khafidzin
Daftar isi

Halo para pegiat homelab dan opreker jaringan!

Pernah merasa gemas dengan fitur bawaan router pabrikan? Itu pula yang saya rasakan. Di router TP-Link Archer A6 kesayangan saya, fitur Guest Wi-Fi memang ada, tapi nihil opsi pembatasan bandwidth. Begitu tamu atau tetangga masuk, koneksi utama langsung “tekor” kena sedot.

Akhirnya saya putuskan untuk flash ke OpenWrt. Awalnya, saya coba pakai cara “standar” industri: SQM (Cake/FQ_Codel). Hasilnya? Memang rapi, tapi Archer A6 saya, yang notabene router kelas menengah ke bawah—mulai terasa engap. Setelah beberapa hari, router sering hang dan butuh hard reboot. Ternyata, proses enkapsulasi paket di SQM cukup memakan resource CPU.

Saya pun beralih ke cara yang lebih “dekat dengan mesin”: Native nftables di FW4. Tanpa overhead aplikasi tambahan, hanya scripting tipis-tipis. Hasilnya? Sudah berminggu-minggu uptime stabil, CPU adem, dan limitasi per-device jalan sempurna.

Berikut adalah panduan QoS Ringan per-Device (IP) yang kebal mati lampu untuk router OpenWrt kesayangan Anda.


Mengapa nftables?
#

Berbeda dengan SQM yang mengatur antrean paket secara kompleks, kita akan menggunakan fitur limit rate langsung di tabel nftables. Ini sangat ringan karena:

  1. Tanpa SQM/CAKE: Tidak ada beban CPU untuk manajemen antrean yang berat.
  2. Per-Device: Setiap perangkat di segmen Guest akan mendapatkan jatah yang sama secara adil.
  3. FW4 Native: Terintegrasi langsung dengan sistem firewall OpenWrt terbaru.

Langkah 1: Bersihkan Jejak Lama
#

Sebelum mulai, pastikan tidak ada konflik dengan paket QoS lain. Kita ingin firewall kita bersih.

# Hapus paket QoS lama jika ada
opkg remove luci-app-nft-qos nft-qos --force-removal-of-dependent-packages
rm -rf /etc/nftables.d
rm -rf /etc/config/nft-qos
nft flush ruleset
/etc/init.d/firewall restart

Langkah 2: Membuat Script Limitasi
#

Kita akan membuat rule di mana setiap IP di segmen 10.1.2.0/24 (Guest) dibatasi sebesar 6 Mbps (sekitar 750 KB/s).

mkdir -p /etc/nftables.d
cat << 'EOF' > /etc/nftables.d/guest-limit.nft
set guest_hosts {
        type ipv4_addr
        flags dynamic,timeout
        timeout 5m
}

chain guest_prerouting {
        type filter hook prerouting priority -150; policy accept;
        ip saddr 10.1.2.0/24 add @guest_hosts { ip saddr }
        ip saddr @guest_hosts limit rate over 750 kbytes/second drop
}

chain guest_postrouting {
        type filter hook postrouting priority -150; policy accept;
        ip daddr 10.1.2.0/24 add @guest_hosts { ip daddr }
        ip daddr @guest_hosts limit rate over 750 kbytes/second drop
}
EOF

Langkah 3: Daftarkan ke Firewall (FW4)
#

Agar script tadi dijalankan otomatis oleh OpenWrt saat booting, kita harus mendaftarkannya ke konfigurasi UCI firewall.

uci add firewall include
uci set firewall.@include[-1].type='nftables'
uci set firewall.@include[-1].path='/etc/nftables.d/guest-limit.nft'
uci commit firewall
fw4 reload

Langkah 4: Proteksi “Mati Lampu” (Auto-Heal)
#

Masalah klasik OpenWrt pada router kecil adalah file system yang korup atau firewall yang gagal load setelah mati lampu mendadak. Kita akan buat watchdog sederhana di rc.local.

cat << 'EOF' > /etc/rc.local
#!/bin/sh
# Cek apakah firewall aktif, jika tidak, paksa jalan kembali
nft list table inet fw4 >/dev/null 2>&1 || {
    logger -t fw4-watchdog "Firewall missing, auto restore in progress..."
    /etc/init.d/firewall start
    fw4 reload
}
exit 0
EOF
chmod +x /etc/rc.local

Analisis Hasil
#

Setelah konfigurasi ini terpasang, Anda bisa melakukan pengecekan dengan perintah nft list table inet fw4 | grep guest. Jika muncul, selamat! Router Anda sekarang punya “polisi lalu lintas” yang sangat efisien.

Fitur Hasil
Beban CPU Sangat Rendah (Idle hampir 0%)
Limitasi 6 Mbps per IP (Stabil)
Ketahanan Kebal Reboot & Mati Lampu

Troubleshooting: Apa yang Mungkin Salah?
#

Meskipun metode ini stabil, dunia oprek punya variabel tak terduga. Berikut beberapa kendala yang mungkin muncul:

1. Wi-Fi Terhubung tapi Tidak Ada Internet
#

  • Penyebab: Biasanya terjadi jika tabel fw4 gagal dimuat sempurna karena konflik internal.

  • Solusi: Jalankan perintah fix cepat ini di terminal:

    cp /rom/etc/init.d/firewall /etc/init.d/firewall
    chmod +x /etc/init.d/firewall
    /etc/init.d/firewall start
    fw4 reload

2. Limit Tidak Berjalan (Tetap Full Speed)
#

  • Penyebab: Perangkat tamu mungkin mendapatkan IP di luar range 10.1.2.0/24.
  • Solusi: Cek kembali di menu Network > Interfaces, pastikan interface Guest Anda menggunakan segmen IP yang sesuai dengan script di atas. Jika berbeda, sesuaikan angka di file /etc/nftables.d/guest-limit.nft.

3. Masalah Software Flow Offloading
#

  • Penyebab: Fitur Software Flow Offloading kadang membypass nftables untuk meningkatkan kecepatan.

  • Solusi: Jika limit tidak bekerja, coba matikan “Software Flow Offloading” di menu Network > Firewall. Namun, untuk Archer A6, biasanya fitur ini tetap bisa berdampingan dengan nftables limit.


Dengan metode ini, TP-Link Archer A6 saya sekarang bisa melayani tamu dengan tenang tanpa mengganggu sesi gaming saya di jaringan utama. Router enteng, hati pun tenang.


Terkait


Load Comments