Akhirnya saya berhasil memanfaatkan RaspberryPi menjadi router dengan kemampuan mengatur kuota bandwidth internet. Saya ikuti beberapa petunjuk dari sumber-sumber berikut ini :
http://www.debian-administration.org/articles/23
http://sirlagz.net/2013/01/27/how-to-turn-the-raspberry-pi-into-a-shaping-wifi-router/
Susunan jaringannya menjadi seperti ini :
- 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).
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 :
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.
maenane sama 😀 kalo bagi benwit ke saya gimana mas bole gaa hehehe
mas beli usb to ethernetnya dimana ? minta contact yang bisa dihubungi mas. makasih
itu koneksi internetnya yang dishare gimana gan?.. pake paket spedy atau pake server?
Koneksi internetnya dari modem FastNet.
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..
Bagus om…. (y) keren
gan tcscript ku kok gak jalan yah ?? jadi management bandwidthnya gak running tapi setting router dan yg laiinnya uda UP mohon bantuannya thanks . . .