IPv6 setup Hurricane Electric Tunnel Broker
From DD-WRT Wiki
Revision as of 00:42, 17 June 2011 (edit) Ac1115 (Talk | contribs) (→Script - changed to latest version of script) ← Previous diff |
Revision as of 15:05, 17 June 2011 (edit) (undo) Ac1115 (Talk | contribs) (→Script - changed to latest version of script) Next diff → |
||
Line 18: | Line 18: | ||
==Script== | ==Script== | ||
<nowiki> | <nowiki> | ||
- | #v1. | + | #v1.2 June 17, 2011 |
#*************************** | #*************************** | ||
#Settings start here | #Settings start here | ||
#*************************** | #*************************** | ||
- | + | ||
#basic connection settings | #basic connection settings | ||
SERVER_IP4_ADDR="enter ip here" | SERVER_IP4_ADDR="enter ip here" | ||
CLIENT_IPV6_ADDR="enter ip here" | CLIENT_IPV6_ADDR="enter ip here" | ||
ROUTED_64_ADDR="enter ip here" | ROUTED_64_ADDR="enter ip here" | ||
- | + | ||
#account info to auto update endpoint | #account info to auto update endpoint | ||
USERID="enter the long hex code - NOT text username" | USERID="enter the long hex code - NOT text username" | ||
PASSWD="plain text password" | PASSWD="plain text password" | ||
TUNNELID="your numeric tunnel id" | TUNNELID="your numeric tunnel id" | ||
- | + | ||
#####Optional/Advanced Settings###### | #####Optional/Advanced Settings###### | ||
- | + | ||
+ | #IPv6 OpenDNS IPv6 Resolver | ||
+ | ENABLE_OPENDNS_IPV6_DNS=1 | ||
+ | |||
#WAN IP Source settings | #WAN IP Source settings | ||
#Set below to 1 to use internal NVRAM wan address instead of fetching it from a site | #Set below to 1 to use internal NVRAM wan address instead of fetching it from a site | ||
USE_NVRAM_WAN_ADDR_INSTEAD=0 | USE_NVRAM_WAN_ADDR_INSTEAD=0 | ||
WAN_IP_SOURCE_ADDR="http://automation.whatismyip.com/n09230945.asp" | WAN_IP_SOURCE_ADDR="http://automation.whatismyip.com/n09230945.asp" | ||
- | + | ||
#logging settings (set to /dev/null for no logging) | #logging settings (set to /dev/null for no logging) | ||
STARTUP_SCRIPT_LOG_FILE="/tmp/ipv6.log" | STARTUP_SCRIPT_LOG_FILE="/tmp/ipv6.log" | ||
CRON_STATUS_LOG_FILE="/tmp/lastHEUpdate.log" | CRON_STATUS_LOG_FILE="/tmp/lastHEUpdate.log" | ||
- | + | ||
#Generated files paths | #Generated files paths | ||
CRON_JOB_FILE="/tmp/report.sh" | CRON_JOB_FILE="/tmp/report.sh" | ||
RADVD_CONFIG="/tmp/radvd.conf" | RADVD_CONFIG="/tmp/radvd.conf" | ||
- | + | ||
#*************************** | #*************************** | ||
#Settings end here | #Settings end here | ||
#*************************** | #*************************** | ||
- | + | ||
echo "HE IPv6 Script started" >> $STARTUP_SCRIPT_LOG_FILE | echo "HE IPv6 Script started" >> $STARTUP_SCRIPT_LOG_FILE | ||
- | + | ||
insmod ipv6 | insmod ipv6 | ||
sleep 10 | sleep 10 | ||
- | + | ||
#get a hash of the plaintext password | #get a hash of the plaintext password | ||
MD5PASSWD=`echo -n $PASSWD | md5sum | sed -e 's/ -//g'` | MD5PASSWD=`echo -n $PASSWD | md5sum | sed -e 's/ -//g'` | ||
echo "" >> $STARTUP_SCRIPT_LOG_FILE | echo "" >> $STARTUP_SCRIPT_LOG_FILE | ||
- | + | ||
#cut out the "/64" if user typed it in | #cut out the "/64" if user typed it in | ||
ROUTED_64_ADDR=`echo $ROUTED_64_ADDR|cut -f1 -d/` | ROUTED_64_ADDR=`echo $ROUTED_64_ADDR|cut -f1 -d/` | ||
Line 66: | Line 69: | ||
CLIENT_IPV6_ADDR=`echo $CLIENT_IPV6_ADDR|cut -f1 -d/` | CLIENT_IPV6_ADDR=`echo $CLIENT_IPV6_ADDR|cut -f1 -d/` | ||
echo "User added addresses cleaned/checked" >> $STARTUP_SCRIPT_LOG_FILE | echo "User added addresses cleaned/checked" >> $STARTUP_SCRIPT_LOG_FILE | ||
- | + | ||
#update HE endpoint | #update HE endpoint | ||
echo -e wget -q "\042http://ipv4.tunnelbroker.net/ipv4_end.php?ipv4b=AUTO&pass=$MD5PASSWD&user_id=$USERID&tunnel_id=$TUNNELID\042" -O $CRON_STATUS_LOG_FILE >$CRON_JOB_FILE | echo -e wget -q "\042http://ipv4.tunnelbroker.net/ipv4_end.php?ipv4b=AUTO&pass=$MD5PASSWD&user_id=$USERID&tunnel_id=$TUNNELID\042" -O $CRON_STATUS_LOG_FILE >$CRON_JOB_FILE | ||
Line 72: | Line 75: | ||
echo "Cron script created, sending endpoint update request to HE" >> $STARTUP_SCRIPT_LOG_FILE | echo "Cron script created, sending endpoint update request to HE" >> $STARTUP_SCRIPT_LOG_FILE | ||
wget -q "http://ipv4.tunnelbroker.net/ipv4_end.php?ipv4b=AUTO&pass=$MD5PASSWD&user_id=$USERID&tunnel_id=$TUNNELID" -O $STARTUP_SCRIPT_LOG_FILE | wget -q "http://ipv4.tunnelbroker.net/ipv4_end.php?ipv4b=AUTO&pass=$MD5PASSWD&user_id=$USERID&tunnel_id=$TUNNELID" -O $STARTUP_SCRIPT_LOG_FILE | ||
- | + | ||
#get wan ip for our own use | #get wan ip for our own use | ||
if [ $USE_NVRAM_WAN_ADDR_INSTEAD -eq 1 ] | if [ $USE_NVRAM_WAN_ADDR_INSTEAD -eq 1 ] | ||
Line 82: | Line 85: | ||
WANIP=`wget $WAN_IP_SOURCE_ADDR -O - 2>/dev/null` | WANIP=`wget $WAN_IP_SOURCE_ADDR -O - 2>/dev/null` | ||
fi | fi | ||
- | + | ||
echo "External IP detected as:" $WANIP >> $STARTUP_SCRIPT_LOG_FILE | echo "External IP detected as:" $WANIP >> $STARTUP_SCRIPT_LOG_FILE | ||
if [ -n $WANIP ] | if [ -n $WANIP ] | ||
then | then | ||
echo "configuring tunnel" >> $STARTUP_SCRIPT_LOG_FILE | echo "configuring tunnel" >> $STARTUP_SCRIPT_LOG_FILE | ||
- | + | ||
# The following commands are straight from HE's website | # The following commands are straight from HE's website | ||
modprobe ipv6 | modprobe ipv6 | ||
Line 96: | Line 99: | ||
ip -f inet6 addr | ip -f inet6 addr | ||
TEMP_ADDR=`echo $ROUTED_64_ADDR'1'` | TEMP_ADDR=`echo $ROUTED_64_ADDR'1'` | ||
- | + | ||
# These commands aren't on HE's website, but they're necessary for the tunnel to work | # These commands aren't on HE's website, but they're necessary for the tunnel to work | ||
ip -6 addr add $TEMP_ADDR/64 dev br0 | ip -6 addr add $TEMP_ADDR/64 dev br0 | ||
ip route add 2000::/3 dev he-ipv6 | ip route add 2000::/3 dev he-ipv6 | ||
- | + | ||
#Enable IPv6 forwarding | #Enable IPv6 forwarding | ||
echo 1 > /proc/sys/net/ipv6/conf/all/forwarding | echo 1 > /proc/sys/net/ipv6/conf/all/forwarding | ||
- | + | ||
# make sure to accept proto-41 | # make sure to accept proto-41 | ||
iptables -I INPUT 2 -p ipv6 -i vlan1 -j ACCEPT | iptables -I INPUT 2 -p ipv6 -i vlan1 -j ACCEPT | ||
- | + | ||
#make sure to not NAT proto-41 | #make sure to not NAT proto-41 | ||
iptables -t nat -A POSTROUTING --proto ! 41 -o eth0 -j MASQUERADE | iptables -t nat -A POSTROUTING --proto ! 41 -o eth0 -j MASQUERADE | ||
echo "creating radvd conf" >> $STARTUP_SCRIPT_LOG_FILE | echo "creating radvd conf" >> $STARTUP_SCRIPT_LOG_FILE | ||
- | + | ||
+ | if [ $ENABLE_OPENDNS_IPV6_DNS -eq 1 ] | ||
+ | then | ||
+ | echo "Open DNS ipv6 enabled" >> $STARTUP_SCRIPT_LOG_FILE | ||
+ | echo "nameserver 2620:0:ccc::2" >> /tmp/resolv.dnsmasq | ||
+ | echo "nameserver 2620:0:ccd::2" >> /tmp/resolv.dnsmasq | ||
+ | fi | ||
+ | |||
#creating radvd.conf | #creating radvd.conf | ||
echo "#generated by startup script" > $RADVD_CONFIG | echo "#generated by startup script" > $RADVD_CONFIG | ||
Line 121: | Line 131: | ||
echo "};" >> $RADVD_CONFIG | echo "};" >> $RADVD_CONFIG | ||
echo "};" >> $RADVD_CONFIG | echo "};" >> $RADVD_CONFIG | ||
- | + | ||
echo "starting radvd" >> $STARTUP_SCRIPT_LOG_FILE | echo "starting radvd" >> $STARTUP_SCRIPT_LOG_FILE | ||
radvd -C $RADVD_CONFIG & | radvd -C $RADVD_CONFIG & | ||
fi | fi | ||
+ | |||
</nowiki> | </nowiki> | ||
Revision as of 15:05, 17 June 2011
Contents |
About
This will...
Set up HE's tunnel broker service.
Automatically finds your wan ip at boot using whatismyip.com
Automatically updates HE's endpoint on boot
Generates a radvd.conf on boot, and applies it automatically
Generates a executable file that can be used with cron to keep HE's endpoint up-to-date if you have a dynamic IP
My setup for reference.
Optimum Online Cable ISP
WRT610Nv2
v24-sp2 (Aug 12, 2010)
build 14929
You should have an account and tunnel created on the website. This post will not cover that. Install steps are below the script. This script will only work with /64 tunnels/addresses. Don't use it if you're using /48
Script
#v1.2 June 17, 2011 #*************************** #Settings start here #*************************** #basic connection settings SERVER_IP4_ADDR="enter ip here" CLIENT_IPV6_ADDR="enter ip here" ROUTED_64_ADDR="enter ip here" #account info to auto update endpoint USERID="enter the long hex code - NOT text username" PASSWD="plain text password" TUNNELID="your numeric tunnel id" #####Optional/Advanced Settings###### #IPv6 OpenDNS IPv6 Resolver ENABLE_OPENDNS_IPV6_DNS=1 #WAN IP Source settings #Set below to 1 to use internal NVRAM wan address instead of fetching it from a site USE_NVRAM_WAN_ADDR_INSTEAD=0 WAN_IP_SOURCE_ADDR="http://automation.whatismyip.com/n09230945.asp" #logging settings (set to /dev/null for no logging) STARTUP_SCRIPT_LOG_FILE="/tmp/ipv6.log" CRON_STATUS_LOG_FILE="/tmp/lastHEUpdate.log" #Generated files paths CRON_JOB_FILE="/tmp/report.sh" RADVD_CONFIG="/tmp/radvd.conf" #*************************** #Settings end here #*************************** echo "HE IPv6 Script started" >> $STARTUP_SCRIPT_LOG_FILE insmod ipv6 sleep 10 #get a hash of the plaintext password MD5PASSWD=`echo -n $PASSWD | md5sum | sed -e 's/ -//g'` echo "" >> $STARTUP_SCRIPT_LOG_FILE #cut out the "/64" if user typed it in ROUTED_64_ADDR=`echo $ROUTED_64_ADDR|cut -f1 -d/` SERVER_IP4_ADDR=`echo $SERVER_IP4_ADDR|cut -f1 -d/` CLIENT_IPV6_ADDR=`echo $CLIENT_IPV6_ADDR|cut -f1 -d/` echo "User added addresses cleaned/checked" >> $STARTUP_SCRIPT_LOG_FILE #update HE endpoint echo -e wget -q "\042http://ipv4.tunnelbroker.net/ipv4_end.php?ipv4b=AUTO&pass=$MD5PASSWD&user_id=$USERID&tunnel_id=$TUNNELID\042" -O $CRON_STATUS_LOG_FILE >$CRON_JOB_FILE chmod +x $CRON_JOB_FILE echo "Cron script created, sending endpoint update request to HE" >> $STARTUP_SCRIPT_LOG_FILE wget -q "http://ipv4.tunnelbroker.net/ipv4_end.php?ipv4b=AUTO&pass=$MD5PASSWD&user_id=$USERID&tunnel_id=$TUNNELID" -O $STARTUP_SCRIPT_LOG_FILE #get wan ip for our own use if [ $USE_NVRAM_WAN_ADDR_INSTEAD -eq 1 ] then echo "Fetching WAN IP from NVRAM" >> $STARTUP_SCRIPT_LOG_FILE WANIP=$(nvram get wan_ipaddr); else echo "Fetching WAN IP from External Site: " $WAN_IP_SOURCE_ADDR >> $STARTUP_SCRIPT_LOG_FILE WANIP=`wget $WAN_IP_SOURCE_ADDR -O - 2>/dev/null` fi echo "External IP detected as:" $WANIP >> $STARTUP_SCRIPT_LOG_FILE if [ -n $WANIP ] then echo "configuring tunnel" >> $STARTUP_SCRIPT_LOG_FILE # The following commands are straight from HE's website modprobe ipv6 ip tunnel add he-ipv6 mode sit remote $SERVER_IP4_ADDR local $WANIP ttl 255 ip link set he-ipv6 up ip addr add $CLIENT_IPV6_ADDR/64 dev he-ipv6 ip route add ::/0 dev he-ipv6 ip -f inet6 addr TEMP_ADDR=`echo $ROUTED_64_ADDR'1'` # These commands aren't on HE's website, but they're necessary for the tunnel to work ip -6 addr add $TEMP_ADDR/64 dev br0 ip route add 2000::/3 dev he-ipv6 #Enable IPv6 forwarding echo 1 > /proc/sys/net/ipv6/conf/all/forwarding # make sure to accept proto-41 iptables -I INPUT 2 -p ipv6 -i vlan1 -j ACCEPT #make sure to not NAT proto-41 iptables -t nat -A POSTROUTING --proto ! 41 -o eth0 -j MASQUERADE echo "creating radvd conf" >> $STARTUP_SCRIPT_LOG_FILE if [ $ENABLE_OPENDNS_IPV6_DNS -eq 1 ] then echo "Open DNS ipv6 enabled" >> $STARTUP_SCRIPT_LOG_FILE echo "nameserver 2620:0:ccc::2" >> /tmp/resolv.dnsmasq echo "nameserver 2620:0:ccd::2" >> /tmp/resolv.dnsmasq fi #creating radvd.conf echo "#generated by startup script" > $RADVD_CONFIG echo "interface br0 {" >> $RADVD_CONFIG echo "AdvSendAdvert on;" >> $RADVD_CONFIG echo "prefix "$ROUTED_64_ADDR"/64 {" >> $RADVD_CONFIG echo "AdvOnLink on;" >> $RADVD_CONFIG echo "AdvAutonomous on;" >> $RADVD_CONFIG echo "AdvRouterAddr on;" >> $RADVD_CONFIG echo "};" >> $RADVD_CONFIG echo "};" >> $RADVD_CONFIG echo "starting radvd" >> $STARTUP_SCRIPT_LOG_FILE radvd -C $RADVD_CONFIG & fi
Install Steps
Installation steps:
- Change the settings in the beginning of the above script to your settings.
- Copy personalized script into Administration > Commands. Save as startup script
- Go into Administration > Management
- enable IPv6 and radvd. Leave the config box empty
- (Optional) enable cron and enter this into "Additional Cron Jobs"
Code:
* 4 * * * root /tmp/report.sh
The above line will auto update the endpoint daily at 4am. Change to personal taste
- Apply settings, wait for reboot
See Also
Test the setup with e.g.:
http://ipv6.google.com
http://aaaa.test-ipv6.com/
Forum link:
http://www.dd-wrt.com/phpBB2/viewtopic.php?t=81060
Example of Basic Connection settings syntax
SERVER_IP4_ADDR="0.0.0.0" CLIENT_IPV6_ADDR="0000:000:0000:000::0" ROUTED_64_ADDR="0000:000:0000:000::0"