IPv6 startup script

From DD-WRT Wiki

(Difference between revisions)
Jump to: navigation, search
Revision as of 08:40, 26 July 2007 (edit)
213.139.183.178 (Talk)
(Instructions)
← Previous diff
Revision as of 18:53, 20 February 2008 (edit) (undo)
GloomyTrousers (Talk | contribs)
(Instructions)
Next diff →
Line 1: Line 1:
==Instructions== ==Instructions==
-The script below is targetted at users that have already obtained a SixXS tunnel and subnet. See also http://sixxs.net and http://sconk.se/dd-wrt_ipv6_guide/ for info.+Use this script once you have been assigned a SixXS tunnel to connect that tunnel. Once your tunnel has been up for a week, you earn enough credits to request a subnet (/48 IPv6 allocation) which you can then use for hosts on your network. See the instructions in the SETUP VALUES section for more info.
 + 
 +See [http://www.sixxs.net/main/ http://www.sixxs.net/main/] for info on how to request tunnels and subnets.
 + 
 +Any feedback on the script welcome in [http://www.dd-wrt.com/phpBB2/viewtopic.php?t=27817 this forum topic].
#!/bin/sh #!/bin/sh
# #
- # SIXXS ipv6 startup script for WRT54G+ # SIXXS IPv6 startup script for WRT54G
- #+ # From http://www.dd-wrt.com/wiki/index.php/IPv6_startup_script
- # external IP (Your IPv4)+ ##################################
- EXTIP=`/sbin/ifconfig vlan1 | grep 'inet addr' | awk '{print $2}' | sed -e 's/.*://'`+ ### SETUP VALUES ###
- # My tunnel endpoint (Your IPv6)+ ### Change these before running ##
- MYTUNNELIP="2001:abc:abc:abc::2"+ ##################################
- #My subnet prefix (Subnet Prefix)+
- SUBNET="2001:abc:abc:cba::"+ # The IPv6 prefix (/64) of the tunnel initially assigned to you by SixXS (including the ::).
- # Sixxs tunnel endpoint (PoP IPv6)+ # Only the ::1 and ::2 are used from this range, for the PoP and your router, respectively.
- SIXXSTUNNELIP="2001:abc:abc:abc::1"+ # You need to keep the tunnel up for a week in order earn enough credits to request a /48 subnet (see below) which can then be used by hosts on your network.
- # Sixxs POP IPv4 (PoP IPv4)+ TUNNELPREFIX="2001:db8:1111:1111::"
- SIXXS4="193.109.122.244" +
- + # The IPv4 address of the SixXS PoP you're using
- # create tunnel+ SIXXS4="1.1.1.1"
- echo "- Creating SIXXS tunnel... ${EXTIP} <--> ${SIXXS4}"+
 + # MTU - must match your SixXS tunnel settings and radvd's "AdvLinkMTU" value; 1280 is the default but it can be increased.
 + # This script will give you a recommendation when you run it, but it should be 20 less than your IPv4 MTU.
 + MTU=1280
 +
 + # A /64 from your /48 subnet prefix assigned by SixXS, INCLUDING the /64
 + ## This should match what you announce to the network with radvd (set in Administration -> Management in the web interface)
 + # If you have not yet been assigned this (you need to keep the tunnel up for a week to earn enough credits), leave blank/commented out
 + ###SUBNET="2001:db8:2222::/64"
 +
 + # Space-separated list of extra IPs you want for your router, such as:
 + # * Local (RFC 4193, currently draft) address e.g. fdxx:xxxx:xxxx:yyyy::1/64; or
 + # * site-local (as per RFC 1918, but obseleted by RFC 3879) address e.g. fec0::1/64
 + # * Any other local or global fixed address you want (note that we already assign the above SUBNET address)
 + # This is optional, leave blank/commented out if not wanted.
 + ###ADDITIONALIP6="fec0::1/64"
 +
 + ##################################
 + ### END OF SETUP VALUES ##
 + ##################################
 +
 + logger -st sixxs -- "Starting IPv6 setup"
 +
 + # Get the tunnel endpoint addresses
 + MYTUNNELIP="${TUNNELPREFIX}2"
 + SIXXSTUNNELIP="${TUNNELPREFIX}1"
 +
 + # Get our external IPv4 (in case the IP isn't available, because we don't have a connection yet, retry until we succeed)
 + while [ -z ${EXTIP} ]; do
 + # PPPoE devices are on ppp0, all others are on vlan1; we try both
 + DEV=ppp0
 + EXTIP=`/usr/sbin/ip -4 addr show dev ${DEV} | grep inet | awk '{print $2}' | cut -d/ -f1`
 + if [ -z ${EXTIP} ]; then
 + # Not on ppp0 - try vlan1
 + DEV=vlan1
 + EXTIP=`/usr/sbin/ip -4 addr show dev ${DEV} | grep inet | awk '{print $2}' | cut -d/ -f1`
 + fi
 + if [ -z ${EXTIP} ]; then
 + logger -st sixxs -- "- No external IP found; trying again in 10 secs..."
 + sleep 10
 + fi
 + done
 + logger -st sixxs -- "- External IP ${EXTIP} found on device ${DEV}"
 +
 + # Create tunnel
 + logger -st sixxs -- "- Creating SixXS tunnel ${EXTIP} <--> ${SIXXS4}"
/usr/sbin/ip tunnel add sixxs mode sit local ${EXTIP} remote ${SIXXS4} /usr/sbin/ip tunnel add sixxs mode sit local ${EXTIP} remote ${SIXXS4}
- # bring tunnel interface up explicitly+ # Bring tunnel interface up explicitly
- echo "- Bringing sixxs device up..."+ logger -st sixxs -- "- Bringing sixxs device up"
/usr/sbin/ip link set sixxs up /usr/sbin/ip link set sixxs up
- # fix MTU and TTL+ # Fix MTU and TTL
- echo "- Fixing MTU and TTL of sixxs device..."+ logger -st sixxs -- "- Fixing MTU and TTL of sixxs device"
- /usr/sbin/ip link set mtu 1280 dev sixxs+ /usr/sbin/ip link set mtu ${MTU} dev sixxs
/usr/sbin/ip tunnel change sixxs ttl 64 /usr/sbin/ip tunnel change sixxs ttl 64
- # Add virthost IPs before adding tunnel IP+ # Check for optimal MTU
- # ...+ # Max MTU is device's MTU minus 20 (IPv6 headers are 20 bytes bigger than IPv4)
 + RECMTU=`ip addr show dev $DEV | grep mtu | awk '{print $5}'`
 + RECMTU=`expr ${RECMTU} - 20`
 + if [ ${MTU} -lt ${RECMTU} ]; then
 + logger -st sixxs -- "- Note: You could increase your MTU setting from ${MTU} to ${RECMTU} for improved performance. Change it in ${0}, radvd.conf and in the SixXS tunnel config."
 + elif [ ${MTU} -gt ${RECMTU} ]; then
 + ### TODO: What happens if MTU is too high?
 + logger -st sixxs -- "- WARNING: Your MTU ${MTU} is too high - it should be ${RECMTU}. Change it in ${0}, radvd.conf and in the SixXS tunnel config."
 + fi
- # configure IPv6 endpoint on the tunnel+ # Add extra IPs if any
- echo "- Configuring my IPv6 tunnel endpoint..."+ if [ ! -z ${ADDITIONALIP6} ]; then
 + for IP in ${ADDITIONALIP6}; do
 + logger -st sixxs -- "- Adding fixed IP ${IP}"
 + /usr/sbin/ip -6 addr add ${IP} dev br0
 + done
 + fi
 +
 + # Configure IPv6 endpoint on the tunnel
 + logger -st sixxs -- "- Configuring local IPv6 tunnel endpoint ${MYTUNNELIP}"
/usr/sbin/ip -6 addr add ${MYTUNNELIP}/64 dev sixxs /usr/sbin/ip -6 addr add ${MYTUNNELIP}/64 dev sixxs
- # default route+ # Add default route
- echo "- Adding default route through SIXXS..."+ logger -st sixxs -- "- Adding default route through SixXS ${SIXXSTUNNELIP}"
/usr/sbin/ip -6 ro add default via ${SIXXSTUNNELIP} dev sixxs /usr/sbin/ip -6 ro add default via ${SIXXSTUNNELIP} dev sixxs
- # add a /64 network from the /60 prefix to br0+ if [ ! -z ${SUBNET} ]; then
- echo "- Setting up Subnet ..."+ # Add a network from the /48 subnet to br0
- /usr/sbin/ip -6 addr add ${SUBNET}/64 dev br0+ logger -st sixxs -- "- Setting up subnet ${SUBNET}"
 + /usr/sbin/ip -6 addr add ${SUBNET} dev br0
- # start router advertisement daemon+ ## # Start router advertisement daemon
- echo "- Starting radvd..."+ ## # No need to do this here; just use the setup in the web interface
- /sbin/radvd -C /tmp/smbshare/etc/radvd.conf+ ## logger -st sixxs -- "- Starting radvd..."
 + ## /sbin/radvd -C /tmp/smbshare/etc/radvd.conf
 + else
 + logger -st sixxs -- "- Note: No subnet configured yet - apply for one when you've kept the tunnel up for a week and earned enough credits"
 + fi
- echo "---- end IPv6 setup ----"+ logger -st sixxs -- "SixXS IPv6 setup done"
-An example radvd.conf:+== radvd configuration ==
 +An example radvd.conf, to be used once you have been assigned a /48 subnet (see Administration -> Management in your router's web interface):
interface br0 { interface br0 {
- AdvSendAdvert on;+ AdvSendAdvert on;
- AdvHomeAgentFlag on;+ AdvHomeAgentFlag on;
- AdvLinkMTU 1280;+ AdvLinkMTU 1280;
- MinRtrAdvInterval 3;+ MinRtrAdvInterval 3;
- MaxRtrAdvInterval 10;+ MaxRtrAdvInterval 10;
- prefix [REPLACE WITH SUBNET]/64 {+ prefix [REPLACE WITH SUBNET]/64 {
- AdvOnLink on;+ AdvOnLink on;
- AdvAutonomous on;+ AdvAutonomous on;
- AdvRouterAddr on;+ AdvRouterAddr on;
- };+ };
}; };
- 
[[Category:English documentation]] [[Category:English documentation]]

Revision as of 18:53, 20 February 2008

Instructions

Use this script once you have been assigned a SixXS tunnel to connect that tunnel. Once your tunnel has been up for a week, you earn enough credits to request a subnet (/48 IPv6 allocation) which you can then use for hosts on your network. See the instructions in the SETUP VALUES section for more info.

See http://www.sixxs.net/main/ for info on how to request tunnels and subnets.

Any feedback on the script welcome in this forum topic.

 #!/bin/sh
 #
 # SIXXS IPv6 startup script for WRT54G
 # From http://www.dd-wrt.com/wiki/index.php/IPv6_startup_script
 
 ##################################
 ###        SETUP VALUES        ###
 ### Change these before running ##
 ##################################
 
 # The IPv6 prefix (/64) of the tunnel initially assigned to you by SixXS (including the ::).
 # Only the ::1 and ::2 are used from this range, for the PoP and your router, respectively.
 # You need to keep the tunnel up for a week in order earn enough credits to request a /48 subnet (see below) which can then be used by hosts on your network.
 TUNNELPREFIX="2001:db8:1111:1111::"
 
 # The IPv4 address of the SixXS PoP you're using
 SIXXS4="1.1.1.1"
 
 # MTU - must match your SixXS tunnel settings and radvd's "AdvLinkMTU" value; 1280 is the default but it can be increased.
 # This script will give you a recommendation when you run it, but it should be 20 less than your IPv4 MTU.
 MTU=1280
 
 # A /64 from your /48 subnet prefix assigned by SixXS, INCLUDING the /64
 ## This should match what you announce to the network with radvd (set in Administration -> Management in the web interface)
 # If you have not yet been assigned this (you need to keep the tunnel up for a week to earn enough credits), leave blank/commented out
 ###SUBNET="2001:db8:2222::/64"
 
 # Space-separated list of extra IPs you want for your router, such as:
 # * Local (RFC 4193, currently draft) address e.g. fdxx:xxxx:xxxx:yyyy::1/64; or
 # * site-local (as per RFC 1918, but obseleted by RFC 3879) address e.g. fec0::1/64
 # * Any other local or global fixed address you want (note that we already assign the above SUBNET address)
 # This is optional, leave blank/commented out if not wanted.
 ###ADDITIONALIP6="fec0::1/64"
 
 ##################################
 ###     END OF SETUP VALUES     ##
 ##################################
 
 logger -st sixxs -- "Starting IPv6 setup"
 
 # Get the tunnel endpoint addresses
 MYTUNNELIP="${TUNNELPREFIX}2"
 SIXXSTUNNELIP="${TUNNELPREFIX}1"
 
 # Get our external IPv4 (in case the IP isn't available, because we don't have a connection yet, retry until we succeed)
 while [ -z ${EXTIP} ]; do
     # PPPoE devices are on ppp0, all others are on vlan1; we try both
     DEV=ppp0
     EXTIP=`/usr/sbin/ip -4 addr show dev ${DEV} | grep inet | awk '{print $2}' | cut -d/ -f1`
     if [ -z ${EXTIP} ]; then
    # Not on ppp0 - try vlan1
    DEV=vlan1
    EXTIP=`/usr/sbin/ip -4 addr show dev ${DEV} | grep inet | awk '{print $2}' | cut -d/ -f1`
     fi
     if [ -z ${EXTIP} ]; then
    logger -st sixxs -- "- No external IP found; trying again in 10 secs..."
    sleep 10
     fi
 done
 logger -st sixxs -- "- External IP ${EXTIP} found on device ${DEV}"
 
 # Create tunnel
 logger -st sixxs -- "- Creating SixXS tunnel ${EXTIP} <--> ${SIXXS4}"
 /usr/sbin/ip tunnel add sixxs mode sit local ${EXTIP} remote ${SIXXS4}
 
 # Bring tunnel interface up explicitly
 logger -st sixxs -- "- Bringing sixxs device up"
 /usr/sbin/ip link set sixxs up
 
 # Fix MTU and TTL
 logger -st sixxs -- "- Fixing MTU and TTL of sixxs device"
 /usr/sbin/ip link set mtu ${MTU} dev sixxs
 /usr/sbin/ip tunnel change sixxs ttl 64
 
 # Check for optimal MTU
 # Max MTU is device's MTU minus 20 (IPv6 headers are 20 bytes bigger than IPv4)
 RECMTU=`ip addr show dev $DEV | grep mtu | awk '{print $5}'`
 RECMTU=`expr ${RECMTU} - 20`
 if [ ${MTU} -lt ${RECMTU} ]; then
     logger -st sixxs -- "- Note: You could increase your MTU setting from ${MTU} to ${RECMTU} for improved performance. Change it in ${0}, radvd.conf and in the SixXS tunnel config."
 elif [ ${MTU} -gt ${RECMTU} ]; then
     ### TODO: What happens if MTU is too high?
     logger -st sixxs -- "- WARNING: Your MTU ${MTU} is too high - it should be ${RECMTU}. Change it in ${0}, radvd.conf and in the SixXS tunnel config."
 fi
 
 # Add extra IPs if any
 if [ ! -z ${ADDITIONALIP6} ]; then
     for IP in ${ADDITIONALIP6}; do
    logger -st sixxs -- "- Adding fixed IP ${IP}"
    /usr/sbin/ip -6 addr add ${IP} dev br0
     done
 fi
 
 # Configure IPv6 endpoint on the tunnel
 logger -st sixxs -- "- Configuring local IPv6 tunnel endpoint ${MYTUNNELIP}"
 /usr/sbin/ip -6 addr add ${MYTUNNELIP}/64 dev sixxs
 
 # Add default route
 logger -st sixxs -- "- Adding default route through SixXS ${SIXXSTUNNELIP}"
 /usr/sbin/ip -6 ro add default via ${SIXXSTUNNELIP} dev sixxs
 
 if [ ! -z  ${SUBNET} ]; then
     # Add a network from the /48 subnet to br0
     logger -st sixxs -- "- Setting up subnet ${SUBNET}"
     /usr/sbin/ip -6 addr add ${SUBNET} dev br0
 
     ## # Start router advertisement daemon
     ## # No need to do this here; just use the setup in the web interface
     ## logger -st sixxs -- "- Starting radvd..."
     ## /sbin/radvd -C /tmp/smbshare/etc/radvd.conf
 else
     logger -st sixxs -- "- Note: No subnet configured yet - apply for one when you've kept the tunnel up for a week and earned enough credits"
 fi
 
 logger -st sixxs -- "SixXS IPv6 setup done" 

radvd configuration

An example radvd.conf, to be used once you have been assigned a /48 subnet (see Administration -> Management in your router's web interface):

 interface br0 {
     AdvSendAdvert on;
     AdvHomeAgentFlag on;
     AdvLinkMTU 1280;
     MinRtrAdvInterval 3;
     MaxRtrAdvInterval 10;
     prefix [REPLACE WITH SUBNET]/64 {
         AdvOnLink on;
         AdvAutonomous on;
         AdvRouterAddr on;
     };
 };