Memiliki 2 koneksi internet ke berbeda Internet Services Provider(ISP) tentu kurang optimal jika tidak digabungkan untuk dipakai bersama, disamping dapat menaikkan reliability performa bandwidth juga dapat mengurangi downtime internet jika salah satu koneksi terputus. Sistem ini dinamakan Load Balancing dan Failover.
Sesuai judul diatas Sistem Load Balancing dan Failover saya terapkan pada sebuah warung internet di daerah Pancoran Jakarta Selatan. Sistem ini menggunakan sistem operasi Linux distribusi Debian, setelah sebelumnya pernah memakai Packet Firewall (PF) di OpenBSD, dan pfSense(free Open Source FreeBSD based). Jadi kali ini saya memakai routing/load balancing menggunakan Linux dan next time mencoba Vyatta Software.
Kebutuhan yang sudah ada :
– 2 Modem ADSL (DLINK dan SANEX) terkoneksi ke Telkom Speedy dengan bandwidth sama Downstream 1022 Kbps Upstream 124 Kbps
– Server Router dengan 3 LAN Card : eth0,eth1,eth2, sistem operasi Debian Lenny 5.0.3
– Switch, PC Client(workstation), dsb.
Spesifikasi Internet Address(IP) :
-ADSL1 DLINK : 10.10.10.1 masuk ke eth0 server router
-ADSL2 SANEX : 172.168.1.1 masuk ke eth1 server router
-Server Router dengan eth0 : DHCP dari modem ADSL1 , eth1 : DHCP dari modem ADSL2 , eth2 : 192.168.1.1 sebagai gateway PC CLient/Workstation.
Setelah sistem operasi Linux Debian Lenny sudah terinstall dengan standar system, kita buang service yang tidak perlu yang secara default selalu disertakan dalam instalasi standart sistem Debian :
apt-get remove –purge exim4 exim4-base exim4-config exim4-daemon-light
update-rc.d -f exim4 remove
apt-get remove nfs-common portmap
mengkonfigurasi eth0,eth1,eth2 melalui /etc/network/interfaces
kencana:/home/gtoms# nano /etc/network/interfaces
auto lo
iface lo inet loopback
allow-hotplug eth0
iface eth0 inet dhcp
allow-hotplug eth1
iface eth1 inet dhcp
auto eth2
iface eth2 inet static
address 192.168.1.1
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255
dns-nameservers 202.134.0.155 202.134.0.61 203.130.196.155
IP address eth0 dan eth1 didapat dari Modem ADSL1 dan 2 yang menjalankan DHCP server, sementara pada eth2 kita assign IP 192.168.1.1 sebagai gateway ke Client/workstation, jika eth0 dan eth1 berfungsi sebagai dhcp client, maka eth2 kita fungsikan sebagai DHCP Server untuk dapat memberikan IP address ke pc client yang akan dipakai user.
apt-get install dhcp3-server
kencana:~# nano /etc/dhcp3/dhcpd.conf
ddns-update-style none;
authoritative;
log-facility local7;
option domain-name “kencana”;
option domain-name-servers 202.134.0.155, 202.134.0.61;
option routers 192.168.1.1;
default-lease-time 86400;
max-lease-time 604800;
subnet 192.168.1.0 netmask 255.255.255.0 {
range 192.168.1.3 192.168.1.250;
}
Setelah urusan DHCP selesai, kita masuk ke bagian setting routing dan load balancing multiple uplinks/providers. Kita buat dulu additional routing tables untuk kedua koneksi ADSL yaitu adsl1 dan adsl2 serta internet dan di tambahkan kedalam file rt_tables.
kencana:/home/gtoms#nano /etc/iproute2/rt_tables :
255 local
254 main
253 default
0 unspec
120 adsl1
121 adsl2
123 internet
Kemudian jalankan perintah berikut untuk routing, load balancing, NAT bisa juga dimasukkan kedalam sebuah file kemudian dipanggil melalui /etc/init.d/networking sehingga saat server reboot sudah terloading otomatis :
ip route flush table adsl1
ip route flush table adsl2
ip route flush table internetip rule add prio 10 table main
ip rule add prio 20 table adsl1
ip rule add prio 30 table adsl2
ip rule add prio 40 table internetip route del default table main
ip route del default table adsl1
ip route del default table adsl2
ip route del default table internetip rule add prio 20 from 10.10.10.0/24 table adsl1
ip route add default via 10.10.10.1 dev eth0 src 10.10.10.10 proto static table adsl1
ip route append prohibit default table adsl1 metric 1 proto staticip rule add prio 30 from 172.1.1.0/24 table adsl2
ip route add default via 172.1.1.1 dev eth1 src 172.1.1.2 proto static table adsl2
ip route append prohibit default table adsl2 metric 5 proto staticip rule add prio 40 table internet
ip route add default proto static table internet \nexthop via 10.10.10.1 dev eth0 weight 1 \nexthop via 172.1.1.1 dev eth1 weight 1echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -F
iptables -P INPUT DROP
iptables -A INPUT -i eth2 -j ACCEPTiptables -A INPUT -m state –state ESTABLISHED, RELATED -j ACCEPT
iptables -A INPUT -p tcp -i eth0 -j REJECT –reject-with tcp-reset
iptables -A INPUT -p tcp -i eth1 -j REJECT –reject-with tcp-resetiptables -A INPUT -p tcp -i eth0 -j REJECT –reject-with icmp-port-unreachable
iptables -A INPUT -p tcp -i eth1 -j REJECT –reject-with icmp-port-unreachableiptables -t nat -A POSTROUTING -o eth0 -j SNAT –to 10.10.10.10
iptables -t nat -A POSTROUTING -o eth1 -j SNAT –to 172.1.1.2
Pemahaman weight pada command diatas adalah jika bandwidth internet ADSL1 dan ADSL2 sama maka saya setting weight 1 weight 1 , jika ADSL2 lebih cepat 10 kali dari ADSl 1 maka disetting weight 1 weight 10.
Setelah konfigurasi diatas kita jalankan running well, maka dilakukan pengecekan :
kencana:/home/gtoms# ip route show table main
192.168.1.0/24 dev eth2 proto kernel scope link src 192.168.1.1
172.1.1.0/24 dev eth1 proto kernel scope link src 172.1.1.2
10.10.10.0/24 dev eth0 proto kernel scope link src 10.10.10.10
default via 10.10.10.1 dev eth0
default via 172.1.1.1 dev eth1
kencana:/home/gtoms# iptables -L -n -v -t nat
Chain PREROUTING (policy ACCEPT 5740 packets, 500K bytes)
pkts bytes target prot opt in out source destination
Chain POSTROUTING (policy ACCEPT 10 packets, 1672 bytes)
pkts bytes target prot opt in out source destination
5958 495K SNAT all — * eth0 0.0.0.0/0 0.0.0.0/0 to:10.10.10.10
3 744 SNAT all — * eth1 0.0.0.0/0 0.0.0.0/0 to:172.1.1.2
Chain OUTPUT (policy ACCEPT 1360 packets, 98808 bytes)
pkts bytes target prot opt in out source destination
Setup fail-over disini untuk membuat automatis routing dengan men-cek apakah ada koneksi ADSL yang mati, jika down akan diganti ke adsl 2, dan jika adsl1 up akan dikembalikan ke adsl1. Untuk ini memerlukan script yang dijalankan saat startup.
Berikut isi scripts yang saya pakai untuk Server Router :
#!/bin/bash
SLEEPTIME=10
TESTIP=www.yahoo.com
TIMEOUT=2
EXTIF1=eth0
EXTIF2=eth1
IP1=10.10.10.10
IP2=172.1.1.2
GW1=10.10.10.1
GW2=172.1.1.1
W1=1
W2=1
NAME1=adsl1
NAME2=adsl2
SUCCESSREPEATCOUNT=4
FAILUREREPEATCOUNT=1LLS1=1
LLS2=1LPS1=1
LPS2=1CPS1=1
CPS2=1CLS1=1
CLS2=1COUNT1=0
COUNT2=0while : ; do
ping -W $TIMEOUT -I $IP1 -c 1 $TESTIP > /dev/null 2>&1
RETVAL=$?if [ $RETVAL -ne 0 ]; then
echo $NAME1 Down
CPS1=1
else
CPS1=0
fiif [ $LPS1 -ne $CPS1 ]; then
echo Ping status changed for $NAME1 from $LPS1 to $CPS1
COUNT1=1
else
if [ $LPS1 -ne $LLS1 ]; then
COUNT1=`expr $COUNT1 + 1`
fi
fiif [[ $COUNT1 -ge $SUCCESSREPEATCOUNT || ($LLS1 -eq 0 && $COUNT1 -ge $FAILUREREPEATCOUNT) ]]; then
echo Uptime status will be changed for $NAME1 from $LLS1
CLS1=0
COUNT1=0
if [ $LLS1 -eq 1 ]; then
LLS1=0
else
LLS1=1
fi
else
CLS1=1
fiLPS1=$CPS1
ping -W $TIMEOUT -I $IP2 -c 1 $TESTIP > /dev/null 2>&1
RETVAL=$?if [ $RETVAL -ne 0 ]; then
echo $NAME2 Down
CPS2=1
else
CPS2=0
fiif [ $LPS2 -ne $CPS2 ]; then
echo Ping status changed for $NAME2 from $LPS2 to $CPS2
COUNT2=1
else
if [ $LPS2 -ne $LLS2 ]; then
COUNT2=`expr $COUNT2 + 1`
fi
fiif [[ $COUNT2 -ge $SUCCESSREPEATCOUNT || ($LLS2 -eq 0 && $COUNT2 -ge $FAILUREREPEATCOUNT) ]]; then
echo Uptime status will be changed for $NAME2 from $LLS2
CLS2=0
COUNT2=0
if [ $LLS2 -eq 1 ]; then
LLS2=0
else
LLS2=1
fi
else
CLS2=1
fiLPS2=$CPS2
if [[ $CLS1 -eq 0 || $CLS2 -eq 0 ]]; then
if [[ $LLS1 -eq 1 && $LLS2 -eq 0 ]]; then
echo Switching to $NAME2
ip route replace default scope global via $GW2 dev $EXTIF2
elif [[ $LLS1 -eq 0 && $LLS2 -eq 1 ]]; then
echo Switching to $NAME1
ip route replace default scope global via $GW1 dev $EXTIF1
elif [[ $LLS1 -eq 0 && $LLS2 -eq 0 ]]; then
echo Restoring default load balancing
ip route replace default scope global nexthop via $GW1 dev $EXTIF1 weight $W1 nexthop via $GW2 dev $EXTIF2 weight $W2
fi
fi
sleep $SLEEPTIMEdone
Setelah selesai saya menambahkan MRTG(gbr diatas), iftop dan beberapa testing lainnya sbb :
Bacaan : http://lartc.org/howto/lartc.rpdb.multiple-links.html
Need my support email to : henry@gultom.or.id
mantap gan, trims.. sangat bermanfaat
Bos, pemilihan DNS server yang digunakan gimana?? misalkan kedua koneksi ADSL kita mempunyai DNS yang berbeda…
mohon bantuannya…… Thaks..
Untuk distribusi IP ke client saya menggunakan DHCP, dan pada dhcpd.conf saya memasukkan DNS Telkom sbb :
202.134.0.155
202.134.0.61
203.130.196.155
Kadang DNS Telkom sering ngawur jadi saya pakai Public DNS Google dengan IP :
8.8.8.8
8.8.4.4
cukup cepat,cerdas dan tidak lelet.
maaf gan mau tanya,saya mau menerapkan loadbalancing dengan 2 koneksi yaitu :
1. smart (modem dialup)
2. speedy (lan)
saya mau menerapkan loadbalancing di windows,mohon pencerahannya??
sebelumnya saya sudah coba dengan menggunakan software kerio winroute, tetapi kendalanya jika salah satu koneksi terputus maka koneksi pun mati.saya tunggu balasanya.mohon email saya di xcitchx@yahoo.com.terima kasih sebelumnya
Yang pernah saya coba dan jalan pakai Windows Load Balancing Service (WLBS) atau Network Load Balancing (NLB) pada Windows Terminal Server. OSnya Windows 2000 Advanced Server.
maaf mo tanya stelah sy bc tuts diatas, untuk LB 2 speedy dgn modem diset bridge menggunakan PFsense gimn ya mas?
sebelumnya makasih atas pencerahannya…
salam ….
Saya sudah coba sampai pada tahap setting routing, load balancing, tapi pada saat menjalankan perintah “ip route show table main” tidak keluar default gatewaynya. ini gimana ya?
@victor,
untuk mengisolasi masalah anda, jalankan satu persatu baris perintah routing dimulai dari :
ip route flush table adsl1
dst………
double check pasti ada yang error…makanya “ip route show table main” gak kasih output..
Halo Pak, salam kenal saya Brury.
Saya ingin tanya untuk settingan nya itu ada yang versi GUI nya tidak ???
#maklum baru blajar… :D
thaks…