Linksys WRT54G IPv6 Howto

Note: This requires you to flash your firmware to an unofficial firmware which voids your warranty. You’re on your own. But don’t worry, if you flash your router properly, everything should go ok.

What’s needed:

Firmware – You must have the sveasoft firmware installed on your router. I’m currently using WRT54G_Wolf_W42_Alchemy_6rc1 which can be found at
http://wrt54g.thermoman.de/ or here’s the ed2k link:
http://tinyurl.com/5vxkh


Note: You can also run the openwrt firmware. I’m running sveasoft and which is why I’ll focus on setting up IPv6 with this firmware. There already are other howtos for openwrt. There are a few firmware’s listed there and I chose the latest one with IPv6 enabled.

If you’re interested to read up on the GPL licensing issues and sveasoft, please read the website above or visit it’s forums.

IPv6 Tunnel Broker – Goto http://tunnelbroker.net/ and set yourself an account + a /64 allocation. You can also visit http://www.hs247.com for reading up more on IPv6. Once setup, your tunnel should be activated within 24 hours (Hint – If you give the right information at registration, it takes even less time).

Background on ports on the linksys router:

From the point view of CPU or OS:

1. the wireless interface acts as eth1
2. the VLAN0 acts as eth0.
3. bridge br0 slaves eth0 and eth1

From the point view of Switch Controller:

1. 4 LAN ports and the Internal port form VLAN0
2. WAN port form and the Internal port form VLAN1
3. VLAN0 and VLAN1 share the Internal interface

Therefor, the IPv6 tunnel to your tunnel broker should be setup for vlan1 and your radvd should advertise on br0 for your local network.

Setup:

Install the firmware. Once installed, your router should be reset and setup again. While you’re here, you can also change your Xmit Power to something like 54 – 61 (safe) to 82 (high, but safe enough). This should give you a considerable boost in signal. The through the Administration page, open either the telnet or the ssh port for the outer. This should allow you to telnet/ssh into your router respectively.

lucifer:~$ telnet 192.168.2.1
Trying 192.168.2.1…

Connected to 192.168.2.1.
Escape character is ‘^]’.

VPN login: root
Password:
——————————————

Welcome to the Sveasoft WRT54G/GS Firmware

Alchemy-6.0-RC1.w42 contributor build
version v2.04.4.8sv

USE OF THIS FIRMWARE IS AT YOUR OWN RISK

http://www.sveasoft.com

——————————————

BusyBox v1.00-rc3 (2004.09.17-13:23+0000) Built-in shell (ash)
Enter ‘help’ for a list of built-in commands.

~ # uname -a
Linux VPN 2.4.20 #56 Sun Nov 7 05:34:08 EST 2004 mips unknown

Now enable IPv6 and radvd:

~# nvram set ipv6_enable=1
~# nvram set radvd_enable=1
~# nvram set radvd_conf=/tmp/radvd.conf

Now commit your changes and reboot

~# nvram commit
nvram_commit(): start
nvram_commit(): end

Once rebooted, you should have the sit0 interface in your ifconfig and ipv6 loaded in lsmod:

br0 Link encap:Ethernet HWaddr 00:0F:66:44:22:26
inet addr:192.168.2.1 Bcast:192.168.2.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

eth0 Link encap:Ethernet HWaddr 00:0F:66:44:22:26
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Interrupt:5 Base address:0×2000

eth1 Link encap:Ethernet HWaddr 00:0F:66:44:22:28
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Interrupt:4 Base address:0×1000

imq0 Link encap:UNSPEC HWaddr
00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
NOARP MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:30
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

imq1 Link encap:UNSPEC HWaddr
00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
NOARP MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:30
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MULTICAST MTU:16436 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

sit0 Link encap:UNSPEC HWaddr
00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
UP RUNNING MULTICAST MTU:1480 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

sixbone Link encap:UNSPEC HWaddr
18-55-BF-E1-00-00-00-00-00-00-00-00-00-00-00-00
UP POINTOPOINT RUNNING MULTICAST MTU:1480 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

teql0 Link encap:UNSPEC HWaddr
00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
NOARP MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

vlan0 Link encap:Ethernet HWaddr 00:0F:66:44:22:26
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

vlan1 Link encap:Ethernet HWaddr 00:0F:66:44:22:27
inet addr:24.85.191.225 Bcast:24.85.191.255 Mask:255.255.252.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)

~ # lsmod
Module Size Used by Tainted: P
ip_nat_proto_gre 1920 0 (unused)
ip_nat_pptp 2620 0 (unused)
ip_conntrack_pptp 3420 1
ip_conntrack_proto_gre 2712 0 [ip_nat_pptp ip_conntrack_pptp]
ipv6 181648 -1
adm6996 30304 0 (unused)
wl 401592 0 (unused)
et 22336 0 (unused)

Now setting it all up:

- Using the example configs option in the tunnelbroker site, choose Linux-route2 and click show config. This should give you an ouput something like this:


modprobe ipv6
ip tunnel add sixbone mode sit remote 64.71.128.82 local 24.85.191.225
ttl 255
ip link set sixbone up
ip addr add 2001:470:1F00:FFFF::45B/127 dev sixbone
ip route add ::/0 dev sixbone
ip -f inet6 addr

IGNORE the first and the last line and create a simple file such as
PLEASE note the changes needed for your local IP

———————cut-here——————————–
# File to setup Linksys WRT54GS router with ipv6
# by Bruno Saverio Delbono
# Adapted from Martin Hicks mort at bork.org’s script
# made specifically for openwrt
# License – BSD.
#!/bin/sh

echo “1″ > /proc/sys/net/ipv6/conf/all/forwarding

extif=vlan1
intif=br0
tundev=sixbone

# This doesn’t work the busytools implementation of
# sveasoft firmware. So please ignore.
#ipv4=`ifconfig $extif | grep inet | grep -v inet6 | # awk ‘{print $2}’ | sed -e ‘s/addr://g’`
#ipv6=`printf “%02x%02x:%02x%02x” \`echo $ipv4 | tr . ‘ ‘\“

echo “bringing up sixbone tunnel”

# NOTE, NOTE, NOTE: PLEASE CHANGE YOUR IP to local
ip tunnel add sixbone mode sit remote 64.71.128.82 local 24.85.191.225
ttl 255
ip link set sixbone up
ip addr add 2001:470:1F00:FFFF::45B/127 dev sixbone
ip route add ::/0 dev sixbone
ip route add default dev sixbone

echo ip -6 route add 2001:470:1F00:657::/64 dev $intif
ip -6 route add 2001:470:1F00:657::/64 dev $intif
echo ip -6 addr add 2001:470:1F00:657::1 dev $intif
ip -6 addr add 2001:470:1F00:657::1 dev $intif

echo “bringing up router advertisment daemon”
/sbin/radvd -C /tmp/radvd.conf
———————cut-here——————————–

Also create a a file radvd_conf such as:

# conffile is from radvd package found on:
# http://openwrt.org/ipkg/
# For more examples, see the radvd documentation.

interface br0
{
AdvSendAdvert on;

#
# These settings cause advertisements to be sent every 3-10
seconds. This
# range is good for 6to4 with a dynamic IPv4 address, but can
be greatly
# increased when not using 6to4 prefixes.
#

MinRtrAdvInterval 3;
MaxRtrAdvInterval 10;

#
# Disable Mobile IPv6 support
#
AdvHomeAgentFlag off;

#
# example of a standard prefix
#
prefix 2001:470:1F00:657::/64
{
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr on;
};

};

~# cp radvd_conf > /tmp/radvd.conf

Run the script above “AFTER” you’ve modified the settings to include your IP. Once done you can issue a command “ip show route” which produced output such as:

1: lo: mtu 16436 qdisc noqueue
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 brd 127.255.255.255 scope host lo
inet6 ::1/128 scope host
2: teql0: mtu 1500 qdisc noop qlen 100
link/void
3: imq0: mtu 1500 qdisc noop qlen 30
link/void
4: imq1: mtu 1500 qdisc noop qlen 30
link/void
5: eth0: mtu 1500 qdisc pfifo_fast qlen 100
link/ether 00:0f:66:44:22:26 brd ff:ff:ff:ff:ff:ff
inet6 fe80::20f:66ff:fe44:2226/10 scope link
6: eth1: mtu 1500 qdisc pfifo_fast qlen 100
link/ether 00:0f:66:44:22:28 brd ff:ff:ff:ff:ff:ff
inet6 fe80::20f:66ff:fe44:2228/10 scope link
7: vlan0: mtu 1500 qdisc noqueue
link/ether 00:0f:66:44:22:26 brd ff:ff:ff:ff:ff:ff
inet6 fe80::20f:66ff:fe44:2226/10 scope link
8: vlan1: mtu 1500 qdisc noqueue
link/ether 00:0f:66:44:22:27 brd ff:ff:ff:ff:ff:ff
inet 24.85.191.225/22 brd 24.85.191.255 scope global vlan1
inet6 fe80::20f:66ff:fe44:2227/10 scope link
9: sit0@NONE: mtu 1480 qdisc noqueue
link/sit 0.0.0.0 brd 0.0.0.0
15: br0: mtu 1500 qdisc noqueue
link/ether 00:0f:66:44:22:26 brd ff:ff:ff:ff:ff:ff
inet 192.168.2.1/24 brd 192.168.2.255 scope global br0
inet6 fe80::200:ff:fe00:0/10 scope link
inet6 2001:470:1f00:657::1/128 scope global
16: sixbone@NONE: mtu 1480 qdisc noqueue
link/sit 24.85.191.225 peer 64.71.128.82
inet6 fe80::1855:bfe1/128 scope link
inet6 2001:470:1f00:ffff::45b/127 scope global

- Check to make sure that radvd is running:

~ # ps -ef | grep rad
17178 root 352 S radvd -C /tmp/radvd.conf

That’s it folks. Setup your local clients to include IPv6 support. In windows XP/2003 this means going to your network neighbourhood icon, selecting properties, choosing your link and adding Protocol -> Microsoft IPv6 and hitting ok. Once done, you should simply check to see if you have ipv6 running by starting the command prompt and running ipv6 if. This should give you an output such as:

Interface 10: Ethernet: InBuilt-Wifi
Guid {AC2D697B-3753-42C4-BC0F-F2954DD7BB26}
uses Neighbor Discovery
uses Router Discovery
link-layer address: 00-0e-9b-55-00-e4
preferred global 2001:470:1f00:657:49a5:42db:7bb3:344e, life
6d23h27m8s/23h2
3m28s (temporary)
preferred global 2001:470:1f00:657:20e:9bff:fe55:e4, life
29d23h59m58s/6d23h
59m58s (public)
preferred link-local fe80::20e:9bff:fe55:e4, life infinite
multicast interface-local ff01::1, 1 refs, not reportable
multicast link-local ff02::1, 1 refs, not reportable
multicast link-local ff02::1:ff55:e4, 2 refs, last reporter
multicast link-local ff02::1:ffb3:344e, 1 refs, last reporter
link MTU 1500 (true link MTU 1500)
current hop limit 64
reachable time 41000ms (base 30000ms)
retransmission interval 1000ms
DAD transmits 1
default site prefix length 48

Let’s ping some IPv6 enabled host to see if it’s all working:

C:\>ping6 ftp.netbsd.org

Pinging ftp.netbsd.org [2001:4f8:4:7:2e0:81ff:fe21:6563]
from 2001:470:1f00:657:49a5:42db:7bb3:344e with 32 bytes of data:

Reply from 2001:4f8:4:7:2e0:81ff:fe21:6563: bytes=32 time=63ms
Reply from 2001:4f8:4:7:2e0:81ff:fe21:6563: bytes=32 time=59ms
Reply from 2001:4f8:4:7:2e0:81ff:fe21:6563: bytes=32 time=63ms
Reply from 2001:4f8:4:7:2e0:81ff:fe21:6563: bytes=32 time=85ms

Ping statistics for 2001:4f8:4:7:2e0:81ff:fe21:6563:
Packets: Sent = 4, Received = 4, Lost = 0 (0% loss),
Approximate round trip times in milli-seconds:
Minimum = 59ms, Maximum = 85ms, Average = 67ms

To setup IPv6 in solaris:

touch /etc/hostname6.hme0 (or your NIC interface) and reboot. Alternatively you can also setup IPv6 by running sys-unconfig. Solaris should just work easily.

On Linux:

modprobe ipv6 and nic should just the ipv6 address from the router advertising daemon.

On BSD:

Aw..come on, do I have to explain to all this :)..If you’re running *BSD, you should simply check the excellent man pages :P

I hope I’ve explained on how all of this works and setup. If you have any problems, re-read this and check google to see if your question has been answered. Alternatively, if you’re going to bug me..please understand that I may or may not respond back in time.

Have fun.


Bruno Saverio Delbono
Systems Engineer – Open-Systems Group
http://www.mail.ac/ http://www.open-systems.org
Personal Homepage: http://www.mail.ac/users/bruno/

About these ads

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Follow

Get every new post delivered to your Inbox.

%d bloggers like this: