IPv6 (tutorial)

From DD-WRT Wiki

(Difference between revisions)
Jump to: navigation, search
Revision as of 01:52, 15 February 2007 (edit)
Whiteboy (Talk | contribs)

← Previous diff
Revision as of 01:52, 15 February 2007 (edit) (undo)
Whiteboy (Talk | contribs)
(External Links)
Next diff →
Line 236: Line 236:
[[Category:English documentation]] [[Category:English documentation]]
-[[Category:Advanced tutorial]]+[[Category:Advanced tutorials]]

Revision as of 01:52, 15 February 2007

Internet Protocol version 6 (IPv6) is a network layer IP standard used by electronic devices to exchange data across a packet-switched internetwork. It follows IPv4 as the second version of the Internet Protocol to be formally adopted for general use.

There are too many devices in the world for 32-bit (232, or 4,294,967,296) IP addresses to be sufficient.
The next version of the TCP/IP protocol, IPv6 offers 128-bit address space, or 2128 (≈ 3.4 x 1038) IP addresses; this is approximately 5×1028 addresses for each of the roughly 6.5 billion people alive today, or about 57 billion addresses for each gram of matter in the Earth.



  • DD-WRT compatible router
  • Knowledge about the Command Line
  • Knowledge about the ip command
  • DD-WRT version 22 prefinal 5 minimum with distribution voip or standard only
  • 24/7 Internet Connection (dynamic dialup is ok)
  • Enable IPv6 thru the GUI section Administration/Management/Router Management/Ipv6
  • Enable jffs would be help (optional)

6to4 Setup


6to4 is a mechanism which assigns a large block of IPv6 addresses to every IPv4 address on the Internet. You can use 6to4 with DD-WRT to give every computer on your network a globally-accessible IPv6 address without the need to configure explicit tunneling.

Important Reminders :

  • In order to use ipv6, you need the Standard or VoIP version of DD-WRT, as these are currently the only ones which support both IPv6 and radvd.
  • The detailled configuration steps are targeted toward users with a basic DHCP connection for the WAN part. So, if using PPPoE will require replacing vlan1 with ppp0 in each instance. Other connection types will vary.
  • When using DD-WRT standard on a router with 4MB Flash, there is no space available for jffs.
  • This guide only rely on nvram variables, so that jffs is not needed.

Enabling IPv6 Support

On the Administration>Management page, enable IPv6 and radvd.

Configuring Radvd

Radvd is similar to a DHCP server. It advertises your IPv6 prefix to the local network, so that a new client can generate its own IP address. This config tells radvd to get a 6to4 prefix from the WAN side (vlan1) and announce it to the LAN (br0)

Copy the following into your radvd settings box:

interface br0 {
   MinRtrAdvInterval 3;
   MaxRtrAdvInterval 10;
   AdvLinkMTU 1280;
   AdvSendAdvert on;
   prefix 0:0:0:1::/64 {
    AdvOnLink on;
    AdvAutonomous on;
    AdvValidLifetime 86400;
    AdvPreferredLifetime 86400;
    Base6to4Interface vlan1;

Startup Script

This startup script acquires your current IPv4 address and uses it to calculate a 6to4 IPv6 address. It then creates the tunnel interface, configures a route, and assigns the address. Afterwards, it sends radvd a SIGHUP so that it will become aware that the prefix has changed.

Go to Administration>Diagnostics, copy the following into the big box, and hit "Save Startup".

sleep 5
WANIP=$(ip -4 addr show dev vlan1 | grep 'inet ' | awk '{print $2}' | cut -d/ -f1)
if [ -n "$WANIP" ]
 V6PREFIX=$(printf '2002:%02x%02x:%02x%02x' $(echo $WANIP | tr . ' '))
 ip tunnel add tun6to4 mode sit ttl 255 remote any local $WANIP
 ip link set tun6to4 mtu 1280
 ip link set tun6to4 up
 ip addr add $V6PREFIX:0::1/16 dev tun6to4
 ip addr add $V6PREFIX:1::1/64 dev br0
 ip -6 route add 2000::/3 via :: dev tun6to4
 kill -HUP $(cat /var/run/radvd.pid)

Performance Concerns

When you send a packet from a 6to4 address to a native IPv6 address, it has to pass through a 6to4 gateway. RFC3068 established the special anycast address which is supposed to lead you to the nearest gateway. However, some ISPs don't handle this properly, so you may find that all of your packets are crossing an ocean or two.

If this affects you, then you may need to do some detective work to locate a closer gateway. One possible approach is to use IPv4 Looking Glass tools to traceroute to from various locations on the Internet and see where you end up.

Or you could bug your ISP about it, but they'll probably be like "IPvWHAT?"

IPv6 as default protocol

As per RFC3484 §2.1 default policy table, having a 6to4 enabled LAN (using a 6to4 anycast tunel on a DD-WRT enabled box, say) will mean that IPv6 will only be used to communicate to a server if the server is having a 6to4 adress too (ie: 2002: prefix on its address) or if there is no IPv4 address assigned to the server name (ie: no A but an AAAA).

Making this stuff a short story, this means that Windows make IPv4 default on IPv6 enabled boxes using 6to4 prefixes.

To enable IPv6 preference on Microsoft Windows, launch a cmd and netsh and type :

set prefix ::1/128 50 0
set prefix ::/0 40 1
set prefix 2002::/16 30 1
set prefix ::/96 20 3
set prefix ::ffff:0/96 10 4
set prefix 2001::/32 5 5

Only the 2002::/16 line (6to4 prefix policy) is changed.

To make things goes back to original mode (IPv4 preference), you should type :

set prefix ::1/128 50 0
set prefix ::/0 40 1
set prefix 2002::/16 30 2
set prefix ::/96 20 3
set prefix ::ffff:0/96 10 4
set prefix 2001::/32 5 5

And Voilà ;-)

SixXS Tunnel Broker

Requesting a Tunnel/Subnet

1. Create a 6bone handle at http://www.sixxs.net/signup/6bone/. (Skip this if you already have a NIC handle.)
2. Sign up at http://www.sixxs.net/signup/ with your create handle. (Or use your existing one.)
3. After your login at http://www.sixxs.net/home/ you can request a tunnel and later a subnet.

Static Tunnel

The sconk.se guide offers some pretty nice instructions on how enable this feature starting out with obtaining an IPv6 address.

There are instructions at Remoteroot.net with example scripts.

This wiki also offers an example IPv6 startup script

-- Is it possible to copy'n'paste this guide into this wiki? --

Dynamic Tunnel

Install AICCU

1. Install AICCU using ipkg.

 # ipkg install http://downloads.openwrt.org/backports/rc6/aiccu_2006.07.25-1_mipsel.ipk

New Version of aiccu is needed, pop is blocking old client! --Fadenb 19:39, 11 Jan 2007 (CET)

2. Configure AICCU.

 # vi /jffs/etc/aiccu.conf
 # AICCU Configuration
 # Login information
 username <your nichandle/username>
 password <your password>
 # Interface names to use
 ipv4_interface vlan1
 ipv6_interface sixxs
 # The tunnel_id to use
 # (only required when there are multiple tunnels in the list)
 tunnel_id <your tunnel id>
 # Be verbose?
 verbose false
 # Daemonize?
 daemonize true
 # Automatic?
 automatic true

Automatic start your Tunnel

1. Create a .startup file and make it executable.

 # vi /jffs/etc/config/aiccu.startup
 /jffs/etc/init.d/S51aiccu start
 ip -6 addr add 2001:xxxx:xxx::/64 dev br0 # Edit to your assigned subnet settings. (You have to use /64 here)
 # chmod +x /jffs/etc/config/aiccu.startup

2. Adjust the AICCU init script.

 # vi /jffs/etc/init.d/S51aiccu
 case "$1" in
         ( while [ `date +%Y` -eq 1970 ]; do
             sleep 1
             done && /jffs/usr/sbin/aiccu start /jffs/etc/aiccu.conf ) &
         aiccu stop /jffs/etc/aiccu.conf
         aiccu stop /jffs/etc/aiccu.conf
         $0 stop
         $0 start
         echo "Usage: $0 {start|stop|restart}"
         exit 1

Announce your Subnet with radvd

1. Enable radvd at the webinterface of your router (Administration->Management->IPv6 Support)
2. Insert your radvd.conf into the form and save your settings.(You have use the /64 prefix even if you got a /48 subnet)

interface br0
AdvSendAdvert on;
prefix 2001:xxxx:xxxx::/64
AdvOnLink on;
AdvAutonomous on;
AdvRouterAddr on;

Hurricane Electric's Tunnel Broker

If you want to use Hurricane Electric's IPv6 Tunnel broker you can check out this guide. It has detailed instructions and is upto date. Sixx.net takes alot of work and requires you to sign up to alot more stuff then Hurricane Electric. This guide also requires no extra software and is great for people with limited memory on there router. (If someone wishes to paste the guide on this page they may)


Anonymous IPv6 at Microsoft Windows

By default on WinXP, Win2003 or WinVista, IPv6 addresses built from IPv6 prefix (stateless configuration for instance) are using the EUI-64 (cf MAC address) of your network card as a suffix. This can lead to some privacy issues, hence another IPv6 adress is dynamicaly computed and used by default. Such an anonymous address change (according to computation algorithm) each time the IPv6 stack starts. This can cause some trouble under certain condition where the server need a unique and static IPv6 (containing the EUI-64). The solution is to deactivate the creation of those "pricacy addresses". But becarefull, this will then lead too leaking the EUI-64 and also enable people to track you (logs, google, etc). So, it's a balance choice.

If you want to disable temporary IPv6 addresses at your try the command :

netsh interface ipv6 set privacy state=disable


ipv6 -p gpu UseTemporaryAddresses no

ping6 at dd-wrt v23

Try to install busybox from OpenWRT: http://downloads.openwrt.org/people/nico/testing/mipsel/packages/busybox_1.01-1_mipsel.content

 ~ # ipkg install http://downloads.openwrt.org/people/nico/testing/mipsel/packages/busybox_1.01-1_mipsel.ipk

The previous link is dead (404 not found), please correct the page if you know any alternative link.

Okay now you have to install uclibc (with -force-depends): http://downloads.openwrt.org/people/nico/testing/mipsel/packages/uclibc_0.9.27-6_mipsel.content

 ~ # ipkg -force-depends install http://downloads.openwrt.org/people/nico/testing/mipsel/packages/uclibc_0.9.27-6_mipsel.ipk

After installing these packages you have to change the priority of the /lib path in your shell environment:

 ~ # export LD_LIBRARY_PATH=/usr/lib:/jffs/lib:/jffs/usr/lib:/jffs/usr/local/lib:/lib

For the last step you have to change the ping6 symlink:

 ~ # rm /jffs/bin/ping6
 ~ # cd /jffs/bin
 ~ # ln -s /jffs/bin/busybox ping6

Now ping6 should work for the current xterm session.

External Links