Hjälp med 6to4 (IPv6) script i Bash
Postat: 30 maj 2010, 20:28
Håller på att meka lite med ett script för att få igång 6to4 på ett smidigt sätt på en dator med dynamisk IP.
Bakgrund: http://ubuntu-se.org/phpBB3/viewtopic.p ... 96&start=0
Just nu ser det ut så här:
Just nu finns 2 problem som lär lösas.
Det första är att följande körs:
Trots att $INTIF inte finns.
Det andra gäller "stop" funktionen på det lokala nätverket:
Här är det fel i ursprungsscriptet (tror jag?).
Misstänker att "OLDIP" ska bli antingen 5aef:72fa eller "5aef72fa"?
ip -6 addr list dev eth0 | grep intet6 ger:
Och hur funkar "$(printf "2002:%02x%02x:%02x%02x:1::1/64"" egentligen? Kör man det rakt ut i terminalen så får man ju bara "2002:0000:0000:1::1/64".
"%02x", är det nån sorts översättare från decimalt till hex?
Hur som helst så borde stop funktionen resultera i något liknande:
ip -6 addr del 2002:xxxx:xxxx:1::1 dev eth0
Någon "bash-master" här?
Bakgrund: http://ubuntu-se.org/phpBB3/viewtopic.p ... 96&start=0
Just nu ser det ut så här:
Kod: Markera allt
#! /bin/bash
#
# 6to4 Script to configure a 6to4 "tunnel" device
#
# Written by Emil Sandnabba <emil@sandnabba.se>
# Orginal by Daniel Lawson <daniel@meta.net.nz>
# Interface för tunneln:
TUNIF=tun6to4
# Externt interface (publik IP):
EXTIF=hso0
# Interface för interna nätverket:
INTIF=eth0
start_6to4_tunnel() {
# GET EXTIF IP Address
PPPIP=`ip -4 addr list $EXTIF | grep inet | awk '{ print $2'}`
# From IanKumlien:
# If you get a /netmask-bits suffix, then change the PPPIP line to:
PPPIP=`ip -4 addr list $EXTIF | grep inet | awk '{ print $2 }' | cut -d/ -f1`
echo $PPPIP
# Set up the tunnel
ip tunnel add ${TUNIF} mode sit remote any local $PPPIP ttl 255
ip link set dev ${TUNIF} mtu 1472 up
# Add IPv6 6to4 address to tuneldevice:
if [ -n ${TUNIF} ]; then
ip -6 addr add $(printf "2002:%02x%02x:%02x%02x::1/64" $(echo ${PPPIP} | tr '.' ' ')) dev ${TUNIF}
fi
echo Tunnel startad!
}
start_routes() {
ip -6 route add 2000::/3 via ::192.88.99.1 dev ${TUNIF} metric 1
echo Route tillagd!
}
start_local_network() {
# Sätt en IPv6 adress på det interna interfacet:
if [ -n $INTIF ]; then
# IPv6 forward?
sysctl -w net.ipv6.conf.all.forwarding=1
echo IPv6 forward påslaget!
ip -6 addr add $(printf "2002:%02x%02x:%02x%02x:1::1/64" $(echo ${PPPIP} | tr '.' ' ')) dev ${INTIF}
fi
echo Lokala nätet igång!
}
stop_local_network() {
if [ -n ${INTIF} ]; then
# GET the *old* internal ip
OLDIP=`ip -6 addr list dev ${INTIF} | grep inet6 | cut -d ":" -f 3 | cut -d '/' -f 1`
# Remove the 6to4 IP assigned to ${INTIF}
ip -6 addr del $(printf "2002:%02x%02x:%02x%02x:1::1/64" $(echo ${OLDIP} | tr '.' ' ')) dev ${INTIF}
fi
}
stop_routes() {
ip -6 route del 2000::/3 via ::192.88.99.1 dev ${TUNIF} metric 1
}
stop_6to4_tunnel() {
ip -6 route flush dev ${TUNIF}
ip link set dev ${TUNIF} down
ip tunnel del ${TUNIF}
echo
}
restart_6to4_ad () {
[ "yes" == "${RADVD}" ] &&
killall -1 radvd
}
case "$1" in
start)
echo -n "Setting up 6to4 IPv6 tunnel ($TUNIF): "
start_6to4_tunnel
start_routes
start_local_network
# restart_6to4_ad
;;
stop)
echo -n "Shutting down 6to4 IPv6 tunnel ($TUNIF): "
stop_routes
# stop_local_network
stop_6to4_tunnel
# restart_6to4_ad
;;
restart|force-reload)
echo -n "Resetting 6to4 IPv6 tunnel ($TUNIF): "
stop_local_network
stop_routes
stop_6to4_tunnel
start_6to4_tunnel
start_routes
start_local_network
restart_6to4_ad
;;
*)
echo "Usage: $0 {start|stop|restart|force-reload}" >&2
exit 1
;;
esac
exit 0
Det första är att följande körs:
Kod: Markera allt
if [ -n $INTIF ]; then
*häftig funktion*
fi
Det andra gäller "stop" funktionen på det lokala nätverket:
Kod: Markera allt
stop_local_network() {
if [ -n ${INTIF} ]; then
# GET the *old* internal ip
OLDIP=`ip -6 addr list dev ${INTIF} | grep inet6 | cut -d ":" -f 3 | cut -d '/' -f 1`
# Remove the 6to4 IP assigned to ${INTIF}
ip -6 addr del $(printf "2002:%02x%02x:%02x%02x:1::1/64" $(echo ${OLDIP} | tr '.' ' ')) dev ${INTIF}
fi
}
Misstänker att "OLDIP" ska bli antingen 5aef:72fa eller "5aef72fa"?
ip -6 addr list dev eth0 | grep intet6 ger:
Kod: Markera allt
root@MobileCommand: ~ #> ip -6 addr list dev eth0 | grep inet6
inet6 2002:5aef:72fa:1::1/64 scope global tentative
"%02x", är det nån sorts översättare från decimalt till hex?
Hur som helst så borde stop funktionen resultera i något liknande:
ip -6 addr del 2002:xxxx:xxxx:1::1 dev eth0
Någon "bash-master" här?
