D-LINK DIR-300 Sebagai Router Wireless Multi WAN dengan OpenWrt

OpenWrt sebagai distribusi Linux untuk Sistem Embedded, dengan fleksibilitas dan banyaknya paket-paket aplikasi, dapat diterapkan pada D-LINK DIR-300 REV. A1, sehingga dapat dijadikan sebagai Router Wireless Multi WAN dengan Load Balancing.

Langkah-langkahnya secara garis besar adalah:

  1. Mengganti RedBoot.
  2. Flash OpenWrt.
  3. Konfigurasi OpenWrt untuk Multi WAN Load Balancing.
  4. Mengaktifkan WiFi Protected Setup (WPS).
  5. Konfigurasi LED dan Tombol WPS.

Bahan-bahan yang perlu dipersiapkan adalah:

  1. PC dengan OS Windows.
  2. TFTPD32.
  3. ap61.ram dan ap61.rom.
  4. Utility RedBoot.
  5. Firmware OpenWrt (vmlinux, rootfs).

Firmware OpenWrt di atas adalah OpenWrt trunk revisi 23620 35061 khusus untuk DIR-300 dengan beberapa fitur:

  1. Menggunakan Linux Kernel 2.6.35.7 3.3.8.
  2. LED GPIO dan GPIO Button yang sudah disesuaikan dan berfungsi baik.
  3. Skrip hostapd.sh pada paket wpad sudah dimodifikasi untuk mendukung WPS.
  4. Paket-paket yang terdapat dalam firmware: wpad (full), hostapd-utils, multiwan, ifstat, iperf, iptraf, tcpdump, ntpdate, macchanger.

Persiapan:

  1. Install TFTPD32 dan pastikan file-file ap61.ram, ap61.rom, openwrt-atheros-dir-300-a1-vmlinux-patched.lzma, openwrt-atheros-dir-300-a1-root.squashfs dapat dilayani oleh TFTPD32 Server.
  2. Ekstrak RedBoot.zip ke suatu folder, di dalamnya terdapat file-file Putty.exe, redboot.cmd, dan redboot2.cmd.

Mengganti RedBoot

Catatan:
Penggantian RedBoot ini cukup dilakukan sekali saja, jika ingin flash ulang OpenWrt tidak perlu dilakukan lagi.

RedBoot asli DIR-300 perlu diganti dikarenakan tidak memiliki fungsi-fungsi fis yang lengkap. Secara umum, penggantian RedBoot ini sama dengan flashing DD-WRT pada DIR-300.

  1. Matikan DIR-300, colokkan kabel lan pada port wan dan atur IP komputer pada 192.168.20.80/24.
  2. Jalankan TFTPD32 Server.
  3. Jalankan file redboot2.cmd, lalu nyalakan DIR-300 dan tunggu hingga jendela Putty tampil. Mungkin perlu mencoba beberapa kali untuk mendapatkan prompt RedBoot>.
  4. Pada prompt RedBoot> ketik perintah-perintah berikut:
    load ap61.ram
    go

    Setelah perintah go, jendela Putty akan tidak bereaksi. Hal ini normal, tutup jendela Putty dan lanjutkan langkah berikutnya.

  5. Cabut lalu colokkan kabel lan pada port lan 1-4, atur IP komputer pada 192.168.1.2/24, pastikan juga TFTPD32 Server siap melayani pada alamat IP baru tersebut. Jalankan file redboot.cmd hingga Prompt DD-WRT> ditampilkan.
  6. Ketik perintah-perintah berikut, dan pastikan jangan matikan atau mencabut kabel lan.
    DD-WRT> ip_address -l 192.168.1.1/24 -h 192.168.1.2
    IP: 192.168.1.1/255.255.255.0, Gateway: 0.0.0.0
    Default server: 192.168.1.2
    DD-WRT> fis init
    About to initialize [format] FLASH image system - continue (y/n)? y
    *** Initialize FLASH Image System
    ... Erase from 0xbffe0000-0xbfff0000: .
    ... Program from 0x807f0000-0x80800000 at 0xbffe0000: .
    DD-WRT> load -r -b %{FREEMEMLO} ap61.rom
    Using default protocol (TFTP)
    Raw file loaded 0x80080000-0x800a8717, assumed entry at 0x80080000
    DD-WRT> fis create -l 0x30000 -e 0xbfc00000 RedBoot
    An image named 'RedBoot' exists - continue (y/n)? y
    ... Erase from 0xbfc00000-0xbfc30000: ...
    ... Program from 0x80080000-0x800a8718 at 0xbfc00000: ...
    ... Erase from 0xbffe0000-0xbfff0000: .
    ... Program from 0x807f0000-0x80800000 at 0xbffe0000: .
    DD-WRT> reset

Flashing OpenWrt

Setelah RedBoot di-upgrade, firmware OpenWrt siap diflash ke DIR-300.

  1. Matikan DIR-300, colokkan kabel lan pada port lan 1-4 dan atur IP komputer pada 192.168.1.2/24.
  2. Jalankan TFTPD32 Server.
  3. Jalankan file redboot.cmd, lalu nyalakan DIR-300 dan tunggu hingga jendela Putty tampil.
  4. Pada prompt DD-WRT> ketik perintah-perintah berikut:
    == Executing boot script in 0.740 seconds - enter ^C to abort
    ^C
    DD-WRT> ip_address -l 192.168.1.1/24 -h 192.168.1.2
    IP: 192.168.1.1/255.255.255.0, Gateway: 0.0.0.0
    Default server: 192.168.1.2
    DD-WRT> load -r -b %{FREEMEMLO} openwrt-atheros-dir-300-a1-vmlinux-patched.lzma
    Using default protocol (TFTP)
    Raw file loaded 0x80040800-0x801107ff, assumed entry at 0x80040800
    DD-WRT> fis init
    About to initialize [format] FLASH image system - continue (y/n)? y
    *** Initialize FLASH Image System
    ... Erase from 0xbffe0000-0xbfff0000: .
    ... Program from 0x80ff0000-0x81000000 at 0xbffe0000: .
    DD-WRT> fis create -e 0x80041000 -r 0x80041000 vmlinux.bin.l7
    ... Erase from 0xbfc30000-0xbfd00000: .............
    ... Program from 0x80040800-0x80110800 at 0xbfc30000: .............
    ... Erase from 0xbffe0000-0xbfff0000: .
    ... Program from 0x80ff0000-0x81000000 at 0xbffe0000: .
    DD-WRT> load -r -b %{FREEMEMLO} openwrt-atheros-dir-300-a1-root.squashfs
    Using default protocol (TFTP)
    Raw file loaded 0x80040800-0x802807ff, assumed entry at 0x80040800
    DD-WRT> fis create -e 0 -r 0x80041000 -l 0x2e0000 rootfs
    ... Erase from 0xbfd00000-0xbffe0000: ..............................................
    ... Program from 0x80040800-0x80280800 at 0xbfd00000: ....................................
    ... Erase from 0xbffe0000-0xbfff0000: .
    ... Program from 0x80ff0000-0x81000000 at 0xbffe0000: .
    DD-WRT> fconfig -d
    Run script at boot: true ? true
    Boot script:
    Enter script, terminate with empty line
    >> fis load -l vmlinux.bin.l7
    >> exec
    >>
    Boot script timeout (1000ms resolution): 1 ? 1
    Use BOOTP for network configuration: false ? false
    Gateway IP address:  ?
    Local IP address: 192.168.1.1 ?
    Local IP address mask: 255.255.255.0 ?
    Default server IP address:  ?
    Console baud rate: 9600 ?
    GDB connection port: 9000 ?
    Force console for special debug messages: false ?
    Network debug at boot time: false ?
    Update RedBoot non-volatile configuration - continue (y/n)? y
    ... Erase from 0xbffe0000-0xbfff0000: .
    ... Program from 0x80ff0000-0x81000000 at 0xbffe0000: .
    DD-WRT> reset

Konfigurasi OpenWrt untuk Multi WAN Load Balancing

Pada contoh berikut, LAN berada pada network 192.168.1.0/24, WAN 1 berada ada pada network 192.168.10.0/24, dan WAN 2 berada pada network 192.168.11.0/24.

Konek ke router dengan telnet menggunakan Putty ke ip 192.168.1.1, pada shell berikan perintah passwd untuk mengganti password root. Pemberian password root otomatis akan menonaktifkan telnet dan mengaktifkan SSH. Untuk selanjutnya koneksi ke router dapat menggunakan SSH.

/etc/config/network

Konfigurasi loopback dan LAN:

config 'interface' 'loopback'
        option 'ifname' 'lo'
        option 'proto' 'static'
        option 'ipaddr' '127.0.0.1'
        option 'netmask' '255.0.0.0'

config 'interface' 'lan'
        option 'type' 'bridge'
        option 'proto' 'static'
        option 'ipaddr' '192.168.1.1'
        option 'netmask' '255.255.255.0'
        option 'ifname' 'eth0.1'

Konfigurasi berikut ini membagi swith menjadi 3 vlan, yaitu LAN (eth0.1) port dengan label 2 - 4, WAN 1 (eth0.2) dengan label 1, dan WAN 2 (eth0.3) dengan label wan:

config 'switch' 'eth0'
        option 'name' 'eth0'
        option 'reset' '1'
        option 'enable_vlan' '1'

config 'switch_vlan' 'eth0_1'
        option 'device' 'eth0'
        option 'vlan' '1'
        option 'ports' '0 1 2 5t'

config 'switch_vlan' 'eth0_2'
        option 'device' 'eth0'
        option 'vlan' '2'
        option 'ports' '3 5t'

config 'switch_vlan' 'eth0_3'
        option 'device' 'eth0'
        option 'vlan' '3'
        option 'ports' '4 5t'

Konfigurasi WAN 1 dan WAN 2:

config 'interface' 'wan1'
        option 'ifname' 'eth0.2'
        option 'proto' 'static'
        option 'ipaddr' '192.168.10.100'
        option 'netmask' '255.255.255.0'
        option 'gateway' '192.168.10.1'
        option 'dns' '180.131.144.144 180.131.145.145'

config 'interface' 'wan2'
        option 'ifname' 'eth0.3'
        option 'proto' 'static'
        option 'ipaddr' '192.168.11.100'
        option 'netmask' '255.255.255.0'
        option 'gateway' '192.168.11.1'
        option 'dns' '208.67.222.222 208.67.220.220'

/etc/config/firewall

Secara default zona wan dalam konfigurasi firewall adalah interface wan, sedangkan konfigurasi di atas menggunakan interface wan1 dan wan2.

config zone
        option name             wan
        option input    REJECT
        option output   ACCEPT
        option forward  REJECT
        option masq             1
        option mtu_fix  1
        option network  'wan1 wan2'

/etc/config/multiwan

Ini adalah konfigurasi load balancing dan failover untuk multi wan.

config 'multiwan' 'config'
        option 'default_route' 'balancer'
        # health_monitor below is defaulted to parallel, and can be set to
        # serial to save system resources.
        option 'health_monitor' 'serial'
        # option 'debug' '1'

config 'interface' 'wan1'
        option 'weight' '10'
        option 'health_interval' '10'
        option 'icmp_hosts' 'gateway'
        # icmp_count is defaulted to 1, and can be increased to reduce
        # false positives.
        option 'icmp_count' '3'
        option 'timeout' '3'
        option 'health_fail_retries' '3'
        option 'health_recovery_retries' '5'
        option 'failover_to' 'wan2'
        option 'dns' 'auto'

config 'interface' 'wan2'
        option 'weight' '10'
        option 'health_interval' '10'
        option 'icmp_hosts' 'gateway'
        option 'icmp_count' '3'
        option 'timeout' '3'
        option 'health_fail_retries' '3'
        option 'health_recovery_retries' '5'
        option 'failover_to' 'wan1'
        option 'dns' 'auto'

config 'mwanfw'
       option 'src' '192.168.1.0/24'
       option 'dst' 'ftp.netlab7.com'
       option 'proto' 'tcp'
       option 'ports' '21'
       option 'wanrule' 'wan2'

# VoIP traffic goes through wan
# config 'mwanfw'
        # option 'src' '192.168.1.0/24'
        # option 'proto' 'udp'
        # option 'port_type' 'source-ports'
        # option 'ports' '5060,16384:16482'
        # option 'wanrule' 'wan'

config 'mwanfw'
       option 'src' '192.168.0.3'
       option 'proto' 'icmp'
       option 'wanrule' 'balancer'

config 'mwanfw'
       option 'dst' 'www.whatismyip.com'
       option 'wanrule' 'fastbalancer'

/etc/config/dhcp

Konfigurasi berikut perlu ditambahkan untuk mengabaikan permintaan DHCP pada WAN 1 dan WAN 2.

config dhcp wan1
        option interface        wan1
        option ignore   1

config dhcp wan2
        option interface        wan2
        option ignore   1

Reboot router dengan memberikan perintah reboot pada shell.

Mengaktifkan WiFi Protected Setup (WPS)

/etc/config/wireless

Konfigurasi wireless berikut menggunakan WPA2-Personal. Sesuaikan SSID dan passphrase (key) dengan konfigurasi wireless anda. Sedangkan wps_pin dapat diisi dengan PIN yang terdapat pada label di bawah DIR-300.

config 'wifi-device' 'wifi0'
        option 'type' 'atheros'
        option 'channel' '3'
        option 'disabled' '0'
        option 'country' '360'

config 'wifi-iface'
        option 'device' 'wifi0'
        option 'network' 'lan'
        option 'mode' 'ap'
        option 'ssid' 'SSID'
        option 'encryption' 'psk2'
        option 'key' 'mysecret'
        option 'wps_pushbutton' '1'
        option 'wps_pin' '12345678'

Update 09-Januari-2013:

config 'wifi-device' 'wlan0'
	option 'type' 'mac80211'
	option 'channel' '11'
	option 'macaddr' '00:11:22:33:44:55'
	option 'hwmode' '11g'
	option 'country' 'ID'

	# REMOVE THIS LINE TO ENABLE WIFI:
	option 'disabled' '0'

config 'wifi-iface'
	option 'device' 'wlan0'
	option 'network' 'lan'
	option 'mode' 'ap'
	option 'ssid' 'OpenWRT'
	option 'encryption' 'psk2'
	option 'key' 'secretkey'
	option 'wps_pushbutton' '1'
	option 'wps_pin' '12345678'

Konfigurasi LED dan Tombol WPS

LED wireless pada DIR-300 menggunakan nomor pin 2, untuk itu perlu ditambahkan baris berikut ke /etc/sysctl.conf:

dev.wifi0.ledpin=2

Untuk membuat LED system menyala dan mati dengan jeda tertentu, gunakan konfigurasi /etc/config/system dan tambahkan baris-baris berikut:

config 'led'
        option 'sysfs' 'dir300:green:system'
        option 'trigger' 'timer'
        option 'delayon' '1000'
        option 'delayoff' '1000'

Tombol WPS ketika ditekan akan mengaktikan LED wps biru, /etc/hotplug.d/button/50-wps (dari paket hostapd-utils):

local wps_led_blue wps_led_red wps_led_red_state
wps_led_blue=/sys/class/leds/dir300:blue:wps/brightness
wps_led_red=/sys/class/leds/dir300:red:wps/brightness

if [ "$ACTION" = "pressed" -a "$BUTTON" = "wps" ]; then
	for dir in /var/run/hostapd-*; do
		[ -d "$dir" ] || continue
		wps_led_red_state=`cat $wps_led_red`
		echo 0 > $wps_led_red
		echo 1 > $wps_led_blue
		hostapd_cli -p "$dir" wps_pbc
		sleep 10
		echo 0 > $wps_led_blue
		echo $wps_led_red_state > $wps_led_red
	done
fi

Update 09-Januari-2013:

local wps_led_blue wps_led_red wps_led_red_state
wps_led_blue=/sys/class/leds/dir300:blue:wps/brightness
wps_led_red=/sys/class/leds/dir300:red:wps/brightness

if [ "$ACTION" = "pressed" -a "$BUTTON" = "wps" ]; then
	for dir in /var/run/hostapd-*; do
		[ -d "$dir" ] || continue
		wps_led_red_state=`cat $wps_led_red`
		echo 0 > $wps_led_red
		echo 1 > $wps_led_blue
		wpa_cli -p "$dir" wps_pbc
		sleep 10
		echo 0 > $wps_led_blue
		echo $wps_led_red_state > $wps_led_red
	done
fi

Reboot router untuk mengaplikasikan perubahan.

Jika anda ingin mengkompilasi sendiri firmware OpenWrt, lalukan patch pada build root OpenWrt. File konfigurasi OpenWrt lebih lengkap dapat dilihat di Wiki OpenWrt./li

4 Comments

  1. Pingback:DLINK DIR-300 A1 OpenWRT Multi WAN Router Versi 2 « Toha’s Blog

  2. Hi mas Toha,
    Sy selama ini menggunakan D-Link model Dir-300 dgn isi standard, dan mengkonfigurnya menggunakan tool webbasenya.
    Koneksi ke internetnya menggunakan port WAN (dhcp client), tp skr sepertinya port tsb tidak berfungsi/rusak (tidak bisa dapat ip dhcp). Ini sy buktikan jika rj45nya sy konek lgs ke PC, bisa dapat ip dhcp.
    Kalau memang portnya WAN nya rusak, bisakah salah satu port LAN-nya saya fungsikan sebagai port WAN?

    Terima kasih.

  3. kl D-LINK DIR-300 dijadikan penerima sinyal wifi, trus clientnya pake port LAN gt bisa gak gan

Leave a Reply