IPv6 startup script

From DD-WRT Wiki

(Difference between revisions)
Jump to: navigation, search
Revision as of 18:38, 9 July 2006 (edit)
BrainSlayer (Talk | contribs)
m (Reverted edit of 219.240.12.173, changed back to last version by Gerrys)
← Previous diff
Current revision (18:45, 18 March 2018) (edit) (undo)
Ian5142 (Talk | contribs)
(Added Scripts Category.)
 
(10 intermediate revisions not shown.)
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.
- #!/bin/sh+See [http://www.sixxs.net/main/ http://www.sixxs.net/main/] for info on how to request tunnels and subnets.
- #+
- # SIXXS ipv6 startup script for WRT54G+
- #+
- +
- # external IP+
- EXTIP=`/sbin/ifconfig vlan1 | grep 'inet addr' | awk '{print $2}' | sed -e 's/.*://'`+
- # My tunnel endpoint+
- MYTUNNELIP="2001:abc:abc:abc::2"+
- # Sixxs tunnel endpoint+
- SIXXSTUNNELIP="2001:abc:abc:abc::1"+
- # Sixxs POP IPv4+
- SIXXS4="193.109.122.244"+
- +
- # create tunnel+
- echo "- Creating SIXXS tunnel... ${EXTIP} <--> ${SIXXS4}"+
- /usr/sbin/ip tunnel add sixxs mode sit local ${EXTIP} remote ${SIXXS4}+
- +
- # bring tunnel interface up explicitly+
- echo "- Bringing sixxs device up..."+
- /usr/sbin/ip link set sixxs up+
- +
- # fix MTU and TTL+
- echo "- Fixing MTU and TTL of sixxs device..."+
- /usr/sbin/ip link set mtu 1280 dev sixxs+
- /usr/sbin/ip tunnel change sixxs ttl 64+
- +
- # Add virthost IPs before adding tunnel IP+
- # ...+
- +
- # configure IPv6 endpoint on the tunnel+
- echo "- Configuring my IPv6 tunnel endpoint..."+
- /usr/sbin/ip -6 addr add ${MYTUNNELIP}/64 dev sixxs+
- +
- # default route+
- echo "- Adding default route through SIXXS..."+
- /usr/sbin/ip -6 ro add default via ${SIXXSTUNNELIP} dev sixxs+
- +
- # add a /64 network from the /60 prefix to br0+
- echo "- Setting up br0: 2001:abc:def:1::1/64 ..."+
- /usr/sbin/ip -6 addr add 2001:abc:def:1::1/64 dev br0+
- +
- # start router advertisement daemon+
- echo "- Starting radvd..."+
- /sbin/radvd -C /tmp/smbshare/etc/radvd.conf+
- +
- echo "---- end IPv6 setup ----"+
-An example radvd.conf:+Any feedback on the script welcome in [http://www.dd-wrt.com/phpBB2/viewtopic.php?t=27817 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: 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 3 times or until we succeed)
 + RETRIES=3
 + while [ -z ${EXTIP} ]; do
 + # PPPoE devices are on ppp0, all others are on vlan1 or eth1; we try all
 + for DEV in "ppp0" "vlan1" "eth1"; do
 + EXTIP=`/usr/sbin/ip -4 addr show dev ${DEV} | grep inet | awk '{print $2}' | cut -d/ -f1`
 + if [ -n "$EXTIP" ]; then
 + logger -st sixxs -- "- External IP ${EXTIP} found on device ${DEV}"
 + break 2
 + fi
 + done
 + let RETRIES-=1
 + if [ "$RETRIES" -gt 0 ]; then
 + logger -st sixxs -- "- No external IP found; trying again in 10 secs..."
 + sleep 10
 + else
 + logger -st sixxs -- "- No external IP found after 30 seconds; quitting"
 + exit 1
 + fi
 + done
 +
 + # 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..."
 + ## /usr/sbin/radvd -C /tmp/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 { interface br0 {
- AdvSendAdvert on;+ AdvSendAdvert on;
- prefix 2001:abc:def:1::1/64 {+ AdvHomeAgentFlag on;
- AdvOnLink on;+ AdvLinkMTU 1280;
- AdvAutonomous on;+ MinRtrAdvInterval 3;
- };+ MaxRtrAdvInterval 10;
 + prefix [REPLACE WITH SUBNET]/64 {
 + AdvOnLink on;
 + AdvAutonomous on;
 + AdvRouterAddr on;
 + };
}; };
- +[[Category:IPv6]]
-[[Category:English documentation]]+[[Category:Scripts]]

Current revision

[edit] 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: 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 3 times or until we succeed)
RETRIES=3
while [ -z ${EXTIP} ]; do
    # PPPoE devices are on ppp0, all others are on vlan1 or eth1; we try all
    for DEV in "ppp0" "vlan1" "eth1"; do
        EXTIP=`/usr/sbin/ip -4 addr show dev ${DEV} | grep inet | awk '{print $2}' | cut -d/ -f1`
        if [ -n "$EXTIP" ]; then
            logger -st sixxs -- "- External IP ${EXTIP} found on device ${DEV}"
            break 2
        fi
    done
    let RETRIES-=1
    if [ "$RETRIES" -gt 0 ]; then
      logger -st sixxs -- "- No external IP found; trying again in 10 secs..."
      sleep 10
    else
      logger -st sixxs -- "- No external IP found after 30 seconds; quitting"
      exit 1
    fi
done

# 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..."
    ## /usr/sbin/radvd -C /tmp/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"

[edit] 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;
     };
 };