Router & Bandwidth Control Dengan Raspberry Pi

Akhirnya saya berhasil memanfaatkan RaspberryPi menjadi router dengan kemampuan mengatur kuota bandwidth internet. Saya ikuti beberapa petunjuk dari sumber-sumber berikut ini :

Susunan jaringannya menjadi seperti ini :

20130303-215947.jpg

  • Port Ethernet bawaan RaspberryPi (eth0) menjadi port WAN yang terhubung langsung dengan modem internet.
  • Adapter USB Ethernet (eth1) menjadi port LAN yang terhubung ke switch.
  • WiFi TP-Link tidak lagi dipakai sebagai DHCP server. Port WANnya pun tidak dipakai. Hanya difungsikan sebagai access-point. Client mendapat IP address dari Raspberry. Karena Wi-Fi ini menggunakan DD-WRT sebagai sistem operasinya, saya harus mematikan DHCP server & memilih untuk menggunakan DHCP Forwarder.

Ini adalah konfigurasi IP di RaspberryPi.

root@raspberrypi:~# cat /etc/network/interfaces 
auto lo

iface lo inet loopback

auto eth0
iface eth0 inet dhcp

auto eth1
iface eth1 inet static
    address 192.168.10.1
    netmask 255.255.255.0
    network 192.168.10.0
    broadcast 192.168.10.255
    dns-nameservers 192.168.10.1
root@raspberrypi:~#

Port eth0 diset menggunakan IP dinamis, IPnya didapat dari modem FirstMedia. Sementara port eth1 adalah port LAN sehingga menggunakan IP statis.

Untuk menjadikan Raspberry sebagai DHCP server di jaringan lokal saya perlu paket dnsmasq.

root@raspberrypi:~# apt-get install dnsmasq

Konfigurasi dnsmasq sangat simpel seperti berikut ini :

root@raspberrypi:~# cat /etc/dnsmasq.conf 
interface=eth1
dhcp-range=192.168.10.50,192.168.10.150,255.255.255.0,12h
root@raspberrypi:~# 

Saya hanya perlu mencantumkan di interface mana DHCP server akan beroperasi, tentu ini interface yang terhubung ke LAN. Dan satu lagi opsi yang dhcp-range, opsi ini mendefinisikan alamat IP mana saja yang disediakan oleh DHCP server. Sebenarnya masih banyak opsi yang bisa dipakai oleh dnsmasq, tapi untuk keperluan test ini hanya itu yang saya perlukan.

Proses routing dijalankan oleh perintah iptables. Di website Debian Administrator sudah ada contoh script yang memanfaatkan iptables sebagai router & juga sebagai firewall.

root@raspberrypi:~# cat /etc/network/if-up.d/router 
#!/bin/sh

PATH=/usr/sbin:/sbin:/bin:/usr/bin

# Notes : eth0 = WAN port / internet
#         eth1 = LAN port
#
# delete all existing rules.
#
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X

# Always accept loopback traffic
iptables -A INPUT -i lo -j ACCEPT

# Allow established connections, and those not coming from the outside
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state NEW ! -i eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT

# Allow outgoing connections from the LAN side.
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT

# Masquerade.
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

# Don't forward from the outside to the inside.
iptables -A FORWARD -i eth0 -o eth0 -j REJECT

# Enable routing.
echo 1 > /proc/sys/net/ipv4/ip_forward
root@raspberrypi:~#

Sementara untuk mengatur alokasi bandwidth aplikasi yang dipakai adalah tc. Konsep yang diterapkan untuk mengatur alokasi bandwidth ini adalah HTB (Hierarchical Token Bucket). Pengaturan bandwidth dilakukan dalam sistem hirarki. Saya contoh apa yang dijelaskan di web ini. Ada beberapa modifikasi yang saya tambahkan. Di web tadi hanya kecepatan download yang dibatasi. Ternyata untuk membatasi kecepatan upload, saya perlu tambahkan rule lain di port WANnya (dalam contoh kasus saya di port eth0).

root@raspberrypi:~# cat /etc/network/if-up.d/tcscript 
#!/bin/bash

# DOWNLOAD LIMIT
tc qdisc add dev eth1 root handle 1:0 htb default 10
tc class add dev eth1 parent 1:0 classid 1:10 htb rate 256kbit ceil 256kbit prio 0
tc class add dev eth1 parent 1:1 classid 1:5 htb rate 4864kbit ceil 4864kbit prio 1
tc filter add dev eth1 parent 1:0 prio 1 handle 5 fw flowid 1:5

# UPLOAD LIMIT
tc qdisc add dev eth0 root handle 1:0 htb default 10
tc class add dev eth0 parent 1:0 classid 1:10 htb rate 128kbit ceil 128kbit prio 0
tc class add dev eth0 parent 1:1 classid 1:5 htb rate 4864kbit ceil 4864kbit prio 1
tc filter add dev eth0 parent 1:0 prio 1 handle 5 fw flowid 1:5

iptables -t mangle -N shaper-out
iptables -t mangle -N shaper-in

iptables -t mangle -I POSTROUTING -o eth1 -j shaper-in
iptables -t mangle -I PREROUTING -i eth1 -j shaper-out
iptables -t mangle -I PREROUTING -i eth0 -j shaper-in
iptables -t mangle -I POSTROUTING -o eth0 -j shaper-out

iptables -t mangle -A shaper-out -s 192.168.10.0/24 -j MARK --set-mark 1
iptables -t mangle -A shaper-in -d 192.168.10.0/24 -j MARK --set-mark 1

iptables -t mangle -A shaper-out -s 192.168.10.129 -j MARK --set-mark 5
iptables -t mangle -A shaper-in -d 192.168.10.129 -j MARK --set-mark 5
root@raspberrypi:~#

Di contoh script di atas, saya buat skenario sederhana yaitu hanya IP 192.168.10.129 (IP Macbook) yang diberi akses untuk menggunakan bandwidth sampai maksimum (4-5MB).

20130303-234031.jpg

Sementara semua client lain dalam jaringan 192.168.10.0/24 hanya bisa mendapat kecepatan download 256Kbps & kecepatan upload 128Kbps. Ternyata berhasil, dan ini contohnya hasil testing dengan iPhone :

20130303-233616.jpg

Kira-kira begitu pemanfaatan Raspberry Pi untuk mengontrol pemakaian bandwidth dalam jaringan. Masih banyak yang bisa dibahas dari topik ini. Mungkin nanti saya tuliskan lagi di tulisan-tulisan berikutnya.

7 thoughts on “Router & Bandwidth Control Dengan Raspberry Pi

  1. om boleh tanya?
    saya baru memakai raspberry, ingin tau bagaimana caranya biar kita bisa menangkap input dari port USB yang pertama dari Raspberry? kan ada dua port om.
    mohon bantuannya menyelesaikan tugas saya, terima kasih..

  2. gan tcscript ku kok gak jalan yah ?? jadi management bandwidthnya gak running tapi setting router dan yg laiinnya uda UP mohon bantuannya thanks . . .

Leave a Reply