Philipp's Computing Blog

Success is about speed and efficiency

Upgrade ASUS wl-500g Premium v1 from DD-WRT to OpenWrt

I was using an Asus wl-500g Premium router (hardware revision #1) running DD-WRT (I think it was version v24 preSP2 [Beta] Build 14311 mini). I decided to switch over to OpenWrt. The installation was dead simple. I just downloaded the .trx firmware image for the brcm47xx target (linux 2.6) from, loaded it via the dd-wrt firmware update web interface and waited for ~ 5 minutes. The box automatically rebooted and when I reconnected the network cable I had an IP from the range From there, I just followed the OpenWrt setup similar to my blog post on OpenWrt on the TP-Link TL-WR1043ND router.

IPv6 Static 6in4 tunnel setup via Hurricane Electric (

First, install the following IPv6 related packages:

opkg update
opkg install kmod-ipv6 ip kmod-ip6tables ip6tables kmod-sit kmod-iptunnel6 radvd kmod-tun tcptraceroute6  radvd

Setup with an init script

This section describes the setup similar to

Now create the init script for the tunnel. To do so, save the following script as /etc/init.d/ipv6: (As proposed in this and this thread, you might create it as a hotplug script /etc/hotplug.d/iface/15-ipv6 instead.)

#!/bin/sh /etc/rc.common

#Information from the "Tunnel Details" page


# Uncomment if you have a /48
#ROUTED_48=Your /48 netblock's gateway address, e.g., 2001:a:b::1


start() {
    echo "Starting IPv6 tunnel: "
    ip tunnel add henet mode sit remote $SERVER_v4 local $CLIENT_v4 ttl 255
    ip link set henet up

    ip -6 addr add $CLIENT_v6/64 dev henet
    ip -6 ro add default via $SERVER_v6 dev henet

    ip -6 addr add $ROUTED_64/64 dev br-lan
    # Uncomment if you have a /48
    #ip -6 addr add $ROUTED_48/48 dev br-lan
    ip -f inet6 addr

    echo "Done."
stop() {
    echo -n "Stopping IPv6 tunnel: "
    ip link set henet down
    ip tunnel del henet

    ip -6 addr delete $ROUTED_64/64 dev br-lan
    # Uncomment if you have a /48
    #ip -6 addr delete $ROUTED_48/48 dev br-lan

    echo "Done."
restart() {

The init script is very similar to 6tunnel.init from the package 6scripts:

Make the the script executable using chmod +x /etc/init.d/ipv6 and test if it's working by executing /etc/init.d/ipv6 start. If it works and you have a working IPv6 (verify using ping6 then enable it as a startup script with /etc/init.d/ipv6 enable.

Update the radvd settings file /etc/config/radvd.

Alternative setup using the OpenWrt UCI as much as possible

This section follows closely the setup described on and

So we add the tunnel to the network setup by adding the following configuration section to /etc/config/network:

# For help see <>
config 'interface' 'sixxs'
    option 'proto' '6in4'
    # remote PoP tunnel endpoint IPv4 address:
    option 'peeraddr' ''
    # your IPv6 tunnel endpoint:
    option 'ip6addr' '2001:470:01fa:1d99::2/64'
    # the router's IPv4 WAN address:
    option 'ipaddr' '62.78.XXX.XXX'

The next step would be, to add the new henet interface to the wan zone of the firewall. Either use Luci (Network/Firewall/Zones) or edit /etc/config/network:

  config 'zone'
    option 'name' 'wan'
    option 'network' 'wan sixxs'

You need an iptables rule for enabling the IPv4 firewall to accept IPv6 connections (protocol 41) from the PoP tunnel endpoint even if they are not related to existing connections. So add the following line to '/etc/firewall.user':

iptables -I INPUT 1 -s [remote_ipv4_pop_endpoint_addr]  -p 41 -j ACCEPT

Or using UCI:

uci add firewall rule
uci set firewall.@rule[-1].src=wan
uci set firewall.@rule[-1].target=ACCEPT
uci set firewall.@rule[-1]._name=HE-IP6
uci set firewall.@rule[-1].proto=41
uci commit firewall

And also make sure that the following line in '/etc/sysctl.conf' is uncommented: