Load Balancing Dual-WAN dengan DD-WRT
Topologi (dengan ascii art )
________
+------------+ /
| | |
+-------------+ Provider 1 +-------
__ | | (WAN 1) | /
___/ \_ +------+-------+ +------------+ |
_/ \__ | if1 | /
/ \ |if0 | |
| Local network -----+ DD-WRT | | Internet
\_ __/ | | |
\__ __/ | if2 | \
\___/ +------+-------+ +------------+ |
| | | \
+-------------+ Provider 2 +-------
| (WAN 2) | |
+------------+ \________
Source: http://lartc.org/lartc.html#LARTC.RPDB.MULTIPLE-LINKS
Penulis mengambil bahan referensi dari link di bawah ini:
- Materi Workshop ddwrt oleh Dani Firman Syah
- Dual WAN with one as standby backup.
- Dual WAN with failover.
- Routing for multiple uplinks/providers.
Penulis menggunakan wireless router WRT54GL 1.1 yang sudah diflash ke dd-wrt. Jika pembaca memiliki linksys yang belum diflash ke dd-wrt dan ingin mengetahui apakah linksysnya bisa diflash, silahkan cek di situs ini Router Database | www.dd-wrt.com. Setelah itu pelajari cara flash WRT54G di WRT54G v4 Installation Tutorial.
Then let’s rock ‘n roll .
Topologi Network
LAN
Network LAN : 192.168.1.0/24
IP IF0 : 192.168.1.254
IP Client (DHCP): 192.168.1.100 - 192.168.1.120
WAN 1
IP IF1 : 121.101.x.170
Gateway : 121.101.x.254
WAN 2
IP IF2 : 121.101.y.170
Gateway : 121.101.y.254
Jika telah selesai melakukan konfigurasi di atas maka klik tombol Save.
Menambah WAN port DD-WRT
Untuk mengkonfigurasikan IP address dari WAN 2, perlu di buat terlebih dahulu VLAN baru sebutlah namanya vlan1. Caranya dari web interface DD-WRT, klik menu VLANs dan konfigurasikan Port 4 sebagai VLAN baru.
Jangan lupa tekan tombol Save dan Apply untuk menyimpan konfigurasi yang sudah di buat.
Script Startup
Langkah selanjutnya adalah menulis script langsung di interface web dd-wrt. Penulis tidak mengikuti langkah sebagaimana yang ditulis Dani Firmansyah dan manual dd-wrt dari link di atas:
Selanjutnya masuk ke console dengan menggunakan telnet/ssh ke IP address lan (IF0) dan jalankan
command berikut ini:
nvram set vlan0ports="1 2 3 5*"
nvram set vlan1ports="4 5"
nvram set vlan1hwname=et1
nvram commit
reboot
Dari menu web dd-wrt, masuk ke Administration > Commands. Isikan source code (edit seperlunya sesuai dengan topologi network anda) di bawah ini dan masukkan di kotak dialog Commands:
016 | WAN2_IPADDR=121.101.y.170 |
017 | WAN2_GATEWAY=121.101.y.254 |
018 | WAN2_NETMASK=255.255.255.0 |
019 | if [ "$(nvram get wan2_ipaddr)" != "$WAN2_IPADDR" ]; then |
020 | nvram set wan2_ifname=$WAN2_IFNAME |
021 | nvram set wan2_ipaddr=$WAN2_IPADDR |
022 | nvram set wan2_gateway=$WAN2_GATEWAY |
023 | nvram set wan2_netmask=$WAN2_NETMASK |
026 | ifconfig $(nvram get wan2_ifname) up $(nvram get wan2_ipaddr) netmask $(nvram get wan2_netmask) |
031 | ip rule add lookup main prio 32766 |
032 | ip rule add lookup default prio 32767 |
033 | ip rule add from $(nvram get wan_ipaddr) table 100 prio 100 |
034 | ip rule add fwmark 0x100 table 100 prio 101 |
035 | ip rule add from $(nvram get wan2_ipaddr) table 200 prio 200 |
036 | ip rule add fwmark 0x200 table 200 prio 201 |
037 | ip route flush table 100 |
038 | ip route flush table 200 |
041 | ip route | grep link | while read ROUTE |
043 | ip route add table $TABLE to $ROUTE |
046 | ip route add table 100 default via $(nvram get wan_gateway) |
047 | ip route add table 200 default via $(nvram get wan2_gateway) |
052 | ip route add default scope global nexthop via $(nvram get wan_gateway) dev $(nvram get wan_ifname) weight 1 \ |
053 | nexthop via $(nvram get wan2_gateway) dev $(nvram get wan2_ifname) weight 1 |
067 | NUM=0; WAN1= "" ; WAN2= "" ; SCORE=0 |
076 | if [ ! -e /tmp/SCORE ] |
081 | read OLDSCORE < /tmp/SCORE |
086 | while [ $i - le $ATTEMPT ] |
088 | if (/bin/ ping -s 16 -W $TIMEOUT -c 1 $Gateway > /dev/null 2>&1) |
090 | touch -f /tmp/WAN${ID}-GOOD |
099 | Gateway=$(nvram get wan_gateway) |
101 | if [ -e /tmp/WAN1-GOOD ] |
103 | LOGS= "WAN 1 is ON...." |
104 | WAN1= "nexthop via $(nvram get wan_gateway) dev $(nvram get wan_ifname) weight 1 " |
106 | SCORE=` expr $SCORE + 2` |
107 | $RM -f /tmp/WAN1-GOOD |
109 | LOGS= "WAN 1 is OFF..." |
114 | Gateway=$(nvram get wan2_gateway) |
116 | if [ -e /tmp/WAN2-GOOD ] |
118 | LOGS= "${LOGS}WAN 2 is ON...." |
119 | WAN2= "nexthop via $(nvram get wan2_gateway) dev $(nvram get wan2_ifname) weight 1 " |
121 | SCORE=` expr $SCORE + 4` |
122 | $RM -f /tmp/WAN2-GOOD |
124 | LOGS= "${LOGS}WAN 2 is OFF..." |
127 | echo $SCORE > /tmp/SCORE |
129 | if [ ! $SCORE - eq $OLDSCORE ] |
136 | $IPROUTE route add default scope global $WAN1 $WAN2 |
145 | chmod 755 /tmp/cekkoneksi |
Keterangan:
- Baris 015-026: Setup interface untuk wan 2.
- Baris 030-047: Setup routing table wan (wan 1) and wan2.
- Baris 051-054: Buat load balancing.
- Baris 058-144: Buat script cekkoneksi untuk dead gateway detection dan tulis ke /tmp/cekkoneksi.
- Baris 145: chmod 755 /tmp/cekkoneksi agar bisa dieksekusi.
Setelah selesai klik tombol Save Startup.
Script Firewall
Sekarang buat firewall untuk NAT dual-wan dan melindungi router dd-wrt dari trafik yang tidak diinginkan. Script firewall ini akan diletakkan di baris teratas firewall yang telah diciptakan oleh dd-wrt (default).
09 | iptables -A DENY_PORTS -p tcp --dport 137:139 -j DROP |
10 | iptables -A DENY_PORTS -p tcp --sport 137:139 -j DROP |
11 | iptables -A DENY_PORTS -p tcp --dport 445 -j DROP |
12 | iptables -A DENY_PORTS -p tcp --sport 445 -j DROP |
13 | iptables -A DENY_PORTS -p tcp --dport 1433 -j DROP |
14 | iptables -A DENY_PORTS -p tcp --sport 1433 -j DROP |
15 | iptables -A DENY_PORTS -p tcp --dport 2049 -j DROP |
16 | iptables -A DENY_PORTS -p tcp --sport 2049 -j DROP |
17 | iptables -A DENY_PORTS -p tcp --dport 5432 -j DROP |
18 | iptables -A DENY_PORTS -p tcp --sport 5432 -j DROP |
19 | iptables -A DENY_PORTS -p tcp --dport 5999:6063 -j DROP |
20 | iptables -A DENY_PORTS -p tcp --sport 5999:6063 -j DROP |
21 | iptables -A DENY_PORTS -p tcp --dport 5900:5910 -j ACCEPT |
22 | iptables -A DENY_PORTS -p tcp --sport 5900:5910 -j ACCEPT |
23 | iptables -A DENY_PORTS -p tcp --dport 9704 -j DROP |
24 | iptables -A DENY_PORTS -p tcp --sport 9704 -j DROP |
25 | iptables -A DENY_PORTS -p tcp --dport 20034 -j DROP |
26 | iptables -A DENY_PORTS -p tcp --dport 12345:12346 -j DROP |
27 | iptables -A DENY_PORTS -p tcp --sport 27665 -j DROP |
28 | iptables -A DENY_PORTS -p tcp --dport 27665 -j DROP |
29 | iptables -A DENY_PORTS -p udp --sport 27444 -j DROP |
30 | iptables -A DENY_PORTS -p udp --dport 27444 -j DROP |
31 | iptables -A DENY_PORTS -p udp --sport 31335 -j DROP |
32 | iptables -A DENY_PORTS -p udp --dport 31335 -j DROP |
33 | iptables -A DENY_PORTS -p tcp --dport 31337 -j DROP |
34 | iptables -A DENY_PORTS -p udp --dport 31337 -j DROP |
35 | iptables -A DENY_PORTS -p tcp --sport 31337 -j DROP |
36 | iptables -A DENY_PORTS -p udp --sport 31337 -j DROP |
43 | iptables -A DST_EGRESS -d 10.0.0.0/8 -j DROP |
45 | iptables -A DST_EGRESS -d 172.16.0.0/12 -j DROP |
47 | iptables -A DST_EGRESS -d 192.168.0.0/16 -j DROP |
49 | iptables -A DST_EGRESS -d 224.0.0.0/4 -j DROP |
51 | iptables -A DST_EGRESS -d 240.0.0.0/5 -j DROP |
53 | iptables -I FORWARD 1 -p tcp -j DENY_PORTS |
54 | iptables -I FORWARD 1 -p udp -j DENY_PORTS |
55 | iptables -I FORWARD 1 -p all -j DST_EGRESS |
60 | iptables -t nat -D POSTROUTING 1 |
61 | iptables -t nat -D POSTROUTING 1 |
62 | iptables -t nat -D POSTROUTING 1 |
63 | iptables -t nat -A POSTROUTING -o $(nvram get wan_ifname) -j SNAT --to- source $(nvram get wan_ipaddr) |
64 | iptables -t nat -A POSTROUTING -o $(nvram get wan2_ifname) -j SNAT --to- source $(nvram get wan2_ipaddr) |
Setelah selesai klik tombol Save Firewall.
Hasilnya seperti gambar di bawah:
Cron/Schedule untuk cek koneksi
Scrip cekkoneksi telah dibuat pada langkah di atas, selanjutnya buat schedule atau cron job yang akan eksekusi script tersebut setiap menit. Caranya masuk ke menu Administration > Managemenet dan isikan di kotak dialog Additional Cron Jobs:
* * * * * root /tmp/cekkoneksi
Klik tombol
Save dan selanjutnya langkah terakhir klik
Apply Settings.
Jangan lupa membakup konfigurasi yang telah dibuat:
Administration > BackupTambahan, untuk tes apakah script
cekkoneksi berjalan sesuai yang diharapkan, cabut 1 koneksi wan (wan 1 atau wan 2). Tes koneksi dengan ping atau browsing setelah 1 menit apakah masih ada gangguan atau tidak.
Link bisa diliat di http://awarmanf.wordpress.com/2010/01/06/dualwanddwrt/
Tidak ada komentar:
Posting Komentar