Topologi (dengan ascii art )
Source: http://lartc.org/lartc.html#LARTC.RPDB.MULTIPLE-LINKS
Penulis mengambil bahan referensi dari link di bawah ini:
Then let’s rock ‘n roll .
Topologi Network
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:
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:
Keterangan:
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).
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:
Klik tombol Save dan selanjutnya langkah terakhir klik Apply Settings.
Jangan lupa membakup konfigurasi yang telah dibuat: Administration > Backup
Tambahan, 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.
________ +------------+ / | | | +-------------+ Provider 1 +------- __ | | (WAN 1) | / ___/ \_ +------+-------+ +------------+ | _/ \__ | if1 | / / \ |if0 | | | Local network -----+ DD-WRT | | Internet \_ __/ | | | \__ __/ | if2 | \ \___/ +------+-------+ +------------+ | | | | \ +-------------+ Provider 2 +------- | (WAN 2) | | +------------+ \________
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.
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:
001 | # File Startup |
002 | # |
003 | # Descriptions: |
004 | # 1. setup interface name for wan2 |
005 | # 2. setup routing table wan and wan2 |
006 | # 3. create load balancing |
007 | # 4. write script cekkoneksi for dead gateway detection which will be run by cron. |
008 | # |
009 | # Created by Arief Yudhawarman (2009) |
010 | # Email: awarmanff at yahoo.com |
011 | # |
012 |
013 | # setup interface name for wan2 |
014 | # |
015 | WAN2_IFNAME=vlan2 |
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 |
024 | nvram commit |
025 | fi |
026 | ifconfig $(nvram get wan2_ifname) up $(nvram get wan2_ipaddr) netmask $(nvram get wan2_netmask) |
027 | # |
028 | # setup routing table wan and wan2 |
029 | # |
030 | ip rule flush |
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 |
039 | for TABLE in 100 200 |
040 | do |
041 | ip route | grep link | while read ROUTE |
042 | do |
043 | ip route add table $TABLE to $ROUTE |
044 | done |
045 | done |
046 | ip route add table 100 default via $(nvram get wan_gateway) |
047 | ip route add table 200 default via $(nvram get wan2_gateway) |
048 | # |
049 | # load balancing |
050 | # |
051 | route del default |
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 |
054 | ip route flush cache |
055 | # |
056 | # write script cekkoneksi for dead gateway detection which will be run by cron. |
057 | # |
058 | echo ' #!/bin/sh |
059 |
060 | # PARAM |
061 | TIMEOUT=1 |
062 | ATTEMPT=5 |
063 | IPROUTE=/usr/sbin/ip |
064 | ROUTE=/sbin/route |
065 | SLEEP=/bin/ sleep |
066 | RM=/bin/ rm |
067 | NUM=0; WAN1= "" ; WAN2= "" ; SCORE=0 |
068 |
069 | # SCORING |
070 | # 0: All off |
071 | # 2: WAN1 on |
072 | # 4: WAN2 on |
073 | # 6: WAN1 WAN2 on |
074 |
075 | # if not found /tmp/SCORE then created |
076 | if [ ! -e /tmp/SCORE ] |
077 | then |
078 | echo 6 > /tmp/SCORE |
079 | fi |
080 |
081 | read OLDSCORE < /tmp/SCORE |
082 |
083 | # Fungsi |
084 | PingGW() { |
085 | i=1 |
086 | while [ $i - le $ATTEMPT ] |
087 | do |
088 | if (/bin/ ping -s 16 -W $TIMEOUT -c 1 $Gateway > /dev/null 2>&1) |
089 | then |
090 | touch -f /tmp/WAN${ID}-GOOD |
091 | break 1 |
092 | fi |
093 | i=$(($i+1)) |
094 | done |
095 | } |
096 |
097 | # cek koneksi WAN 1 |
098 | ID=1 |
099 | Gateway=$(nvram get wan_gateway) |
100 | PingGW |
101 | if [ -e /tmp/WAN1-GOOD ] |
102 | then |
103 | LOGS= "WAN 1 is ON...." |
104 | WAN1= "nexthop via $(nvram get wan_gateway) dev $(nvram get wan_ifname) weight 1 " |
105 | NUM=` expr $NUM + 1` |
106 | SCORE=` expr $SCORE + 2` |
107 | $RM -f /tmp/WAN1-GOOD |
108 | else |
109 | LOGS= "WAN 1 is OFF..." |
110 | fi |
111 |
112 | # cek koneksi modem WAN 2 |
113 | ID=2 |
114 | Gateway=$(nvram get wan2_gateway) |
115 | PingGW |
116 | if [ -e /tmp/WAN2-GOOD ] |
117 | then |
118 | LOGS= "${LOGS}WAN 2 is ON...." |
119 | WAN2= "nexthop via $(nvram get wan2_gateway) dev $(nvram get wan2_ifname) weight 1 " |
120 | NUM=` expr $NUM + 1` |
121 | SCORE=` expr $SCORE + 4` |
122 | $RM -f /tmp/WAN2-GOOD |
123 | else |
124 | LOGS= "${LOGS}WAN 2 is OFF..." |
125 | fi |
126 |
127 | echo $SCORE > /tmp/SCORE |
128 |
129 | if [ ! $SCORE - eq $OLDSCORE ] |
130 | then |
131 | ##echo -e $LOGS >> /tmp/koneksi.log |
132 | # eksekusi loadbalancing baru |
133 | if [ $NUM - ge 1 ] |
134 | then |
135 | $ROUTE del default |
136 | $IPROUTE route add default scope global $WAN1 $WAN2 |
137 | $SLEEP 1 |
138 | $IPROUTE ro fl cache |
139 | else |
140 | $ROUTE del default |
141 | $SLEEP 1 |
142 | $IPROUTE ro fl cache |
143 | fi |
144 | fi ' > /tmp/cekkoneksi |
145 | chmod 755 /tmp/cekkoneksi |
- 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.
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).
01 | # |
02 | # Use Firewall rule already provided by dd-wrt and make a new one |
03 | # |
04 | # |
05 | # DENY_PORTS |
06 | # |
07 | iptables -N DENY_PORTS |
08 | iptables -F DENY_PORTS |
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 |
37 | # |
38 | # DST_EGRESS |
39 | # |
40 | iptables -N DST_EGRESS |
41 | iptables -F DST_EGRESS |
42 | ## Class A Reserved |
43 | iptables -A DST_EGRESS -d 10.0.0.0/8 -j DROP |
44 | ## Class B Reserved |
45 | iptables -A DST_EGRESS -d 172.16.0.0/12 -j DROP |
46 | ## Class C Reserved |
47 | iptables -A DST_EGRESS -d 192.168.0.0/16 -j DROP |
48 | ## Class D Reserved |
49 | iptables -A DST_EGRESS -d 224.0.0.0/4 -j DROP |
50 | ## Class E Reserved |
51 | iptables -A DST_EGRESS -d 240.0.0.0/5 -j DROP |
52 | # |
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 |
56 |
57 | # |
58 | # SNAT |
59 | # |
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) |
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 > Backup
Tambahan, 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.
Tidak ada komentar:
Posting Komentar