extending at the edge - Yes!
Thomas Schäfer
thomas at cis.uni-muenchen.de
Sun Oct 21 14:40:11 CEST 2012
Am 12.10.2012 21:12, schrieb Thomas Schäfer:
> Am 11.10.2012 01:40, schrieb Cameron Byrne:
>> Yes, IETF is looking into this case. Please feel free to comment on
> > it here or v6ops http://tools.ietf.org/html/draft-byrne-v6ops-64share
So here is my first automated solution.
Devices: surfstick, notebook one, notebook two
Notebook two needs no changes except DNS.
All the important things happen on notebook one.
I did not change the IP-addresses to 2001:db8::
Script and log are real, only the apn was cleared.
Improvements are welcome. I am a bad programmer. "sleep" is a bad
command, also greping the IP-addresses is not very reliable, in the way
I did.
Regards,
Thomas
-------------- next part --------------
#!/bin/bash
#
# Internet connection sharing
#
# wwan0 with /64 learned via SLAAC to eth0
#
# tools:
# #ndppd
# npd6
# radvd
#
# some variables
#ndpd_conf="/etc/ndppd.conf"
radvd_conf="/etc/radvd.conf"
npd6_conf="/etc/npd6.conf"
iface_ext="wwan0"
iface_int="eth0"
# forwarding/routing conflicts with SLAAC/RA therefore we start in none-router-mode
####/sbin/sysctl net.ipv6.conf.all.forwarding=0
# connecting wwan
/usr/local/bin/mmcli -m 0 --simple-connect="allowed-modes=3g,apn=xxxxxxxxxxxxxx,ip-type=ipv6" --verbose --timeout=500
/usr/bin/sleep 1
/usr/sbin/ip link set ${iface_ext} up
/usr/bin/sleep 2
/usr/bin/ping6 -c 2 2600::
/usr/bin/sleep 1
# status
/usr/sbin/ip -6 addr show
/usr/bin/echo "-----------------------------------------------------------------------------------"
/usr/sbin/ip -6 route show
/usr/bin/echo "-----------------------------------------------------------------------------------"
# read IP-adresses
ip1_ext=`/usr/sbin/ip -6 addr show ${iface_ext} |\
/usr/bin/grep "scope global dynamic" |\
/usr/bin/cut -f6 -d " " |\
/usr/bin/cut -f1-8 -d ":"|\
/usr/bin/cut -f1 -d "/" |\
/usr/bin/grep "^[2|3]"`
ip2_ext=`/usr/sbin/ip -6 addr show ${iface_ext} |\
/usr/bin/grep "scope global temporary dynamic"|\
/usr/bin/cut -f6 -d " "|\
/usr/bin/cut -f1-8 -d ":"|\
/usr/bin/cut -f1 -d "/"|\
/usr/bin/grep "^[2|3]"`
prefix=`/usr/sbin/ip -6 addr show ${iface_ext} |\
/usr/bin/grep "scope global dynamic" |\
/usr/bin/cut -f6 -d " " |\
/usr/bin/cut -f1-4 -d ":" |\
/usr/bin/grep "^[2|3]"`
# read defaultroute
# example output : default via fe80::8029:b2bd:ce33:6f1f dev wwan0 proto ra metric 1024 expires 65534sec
defaultroute=`/usr/sbin/ip -6 route show |\
/usr/bin/grep default |\
/usr/bin/cut -d " " -f 3`
/usr/bin/echo "IP-address 1 "${ip1_ext}
/usr/bin/echo "IP-address 2 "${ip2_ext}
/usr/bin/echo "prefix "${prefix}
/usr/bin/echo "default route "${defaultroute}
/usr/sbin/ip -6 addr delete ${ip1_ext}/64 dev ${iface_ext}
/usr/sbin/ip -6 addr delete ${ip2_ext}/64 dev ${iface_ext}
/usr/sbin/ip -6 route delete ${prefix}::/64 dev ${iface_ext}
# make external net small, set the internal network
/usr/sbin/ip -6 addr add ${ip1_ext}/128 dev ${iface_ext}
/usr/sbin/ip -6 addr add ${ip1_ext}/64 dev ${iface_int}
# replace ra-set-route by manually set route
/usr/sbin/ip -6 route delete default via ${defaultroute} dev ${iface_ext}
/usr/sbin/ip -6 route add default via ${defaultroute} dev ${iface_ext}
/sbin/sysctl net.ipv6.conf.all.forwarding=1
/sbin/sysctl net.ipv6.conf.${iface_ext}.proxy_ndp=1
#### create /etc/radvd.conf
/usr/bin/echo "interface eth0" > ${radvd_conf}
/usr/bin/echo "{" >> ${radvd_conf}
/usr/bin/echo " AdvSendAdvert on;" >> ${radvd_conf}
/usr/bin/echo "" >> ${radvd_conf}
/usr/bin/echo " # life time zero means we don't actually advertise a" >> ${radvd_conf}
/usr/bin/echo " # router but only our ULA address. Remove if you want this">> ${radvd_conf}
/usr/bin/echo " # host to be advertised as router." >> ${radvd_conf}
/usr/bin/echo " ##AdvDefaultLifetime 0;" >> ${radvd_conf}
/usr/bin/echo "" >> ${radvd_conf}
/usr/bin/echo "" >> ${radvd_conf}
/usr/bin/echo " prefix "${prefix}"::/64" >> ${radvd_conf}
/usr/bin/echo " {" >> ${radvd_conf}
/usr/bin/echo " AdvOnLink on;" >> ${radvd_conf}
/usr/bin/echo " AdvAutonomous on;" >> ${radvd_conf}
/usr/bin/echo " AdvRouterAddr on;" >> ${radvd_conf}
/usr/bin/echo " };" >> ${radvd_conf}
/usr/bin/echo "};" >> ${radvd_conf}
/usr/bin/echo "" >> ${radvd_conf}
#### create /etc/npd6.conf
/usr/bin/echo "// npd6 config file" >${npd6_conf}
/usr/bin/echo "" >>${npd6_conf}
/usr/bin/echo "// The prefix portion that we will match on" >>${npd6_conf}
/usr/bin/echo "//prefix=2a01:0123:4567:89aa:" >>${npd6_conf}
/usr/bin/echo "prefix="${prefix}":" >>${npd6_conf}
/usr/bin/echo "" >>${npd6_conf}
/usr/bin/echo "" >>${npd6_conf}
/usr/bin/echo "// Which interface are we monitoring and using?" >>${npd6_conf}
/usr/bin/echo "interface = "${iface_ext} >>${npd6_conf}
/usr/bin/echo "" >>${npd6_conf}
/usr/bin/echo "listtype = none" >>${npd6_conf}
/usr/bin/echo "listlogging = off" >>${npd6_conf}
/usr/bin/echo "collectTargets = 100" >>${npd6_conf}
/usr/bin/echo "linkOption = false" >>${npd6_conf}
/usr/bin/echo "ignoreLocal = true" >>${npd6_conf}
/usr/bin/echo "routerNA = true" >>${npd6_conf}
/usr/bin/echo "maxHops = 255" >>${npd6_conf}
/usr/bin/echo "" >>${npd6_conf}
# starting npd6
# /etc/init.d/npd6 start # does not work for me
/usr/local/bin/npd6
# starting radvd via systemd
/bin/systemctl start radvd.service
-------------- next part --------------
bash ics.sh
[21 Okt 2012, 13:39:34] [Debug] Forcing request to be run asynchronously
[21 Okt 2012, 13:39:34] [Debug] Assuming '0' is the modem index
[21 Okt 2012, 13:39:34] [Debug] ModemManager process found at ':1.41'
[21 Okt 2012, 13:39:34] [Debug] Modem found at '/org/freedesktop/ModemManager1/Modem/0'
[21 Okt 2012, 13:39:34] [Debug] Asynchronously connecting the modem...
successfully connected the modem
PING 2600::(2600::) 56 data bytes
64 bytes from 2600::: icmp_seq=2 ttl=51 time=211 ms
--- 2600:: ping statistics ---
2 packets transmitted, 1 received, 50% packet loss, time 1007ms
rtt min/avg/max/mdev = 211.634/211.634/211.634/0.000 ms
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
inet6 fe80::3ed9:2bff:fe1a:c99a/64 scope link
valid_lft forever preferred_lft forever
5: wwan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
inet6 2a01:198:24c:c110:e085:fa9f:ba93:a950/64 scope global temporary dynamic
valid_lft 604788sec preferred_lft 85788sec
inet6 2a01:198:24c:c110:ac38:c7ff:fe77:bb0/64 scope global dynamic
valid_lft forever preferred_lft forever
inet6 fe80::ac38:c7ff:fe77:bb0/64 scope link
valid_lft forever preferred_lft forever
-----------------------------------------------------------------------------------
2a01:198:24c:c110::/64 dev wwan0 proto kernel metric 256
fe80::/64 dev eth0 proto kernel metric 256
fe80::/64 dev wwan0 proto kernel metric 256
default via fe80::1c64:4ceb:bc9e:9135 dev wwan0 proto ra metric 1024 expires 65524sec
-----------------------------------------------------------------------------------
IP-address 1 2a01:198:24c:c110:ac38:c7ff:fe77:bb0
IP-address 2 2a01:198:24c:c110:e085:fa9f:ba93:a950
prefix 2a01:198:24c:c110
default route fe80::1c64:4ceb:bc9e:9135
net.ipv6.conf.all.forwarding = 1
net.ipv6.conf.wwan0.proxy_ndp = 1
ifconfig
eth0 Link encap:Ethernet Hardware Adresse 3C:D9:2B:1A:C9:9A
inet6 Adresse: fe80::3ed9:2bff:fe1a:c99a/64 Gültigkeitsbereich:Verbindung
inet6 Adresse: 2a01:198:24c:c110:ac38:c7ff:fe77:bb0/64 Gültigkeitsbereich:Global
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:10 errors:0 dropped:0 overruns:0 frame:0
TX packets:112 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 Sendewarteschlangenlänge:1000
RX bytes:1754 (1.7 Kb) TX bytes:31342 (30.6 Kb)
lo Link encap:Lokale Schleife
inet Adresse:127.0.0.1 Maske:255.0.0.0
inet6 Adresse: ::1/128 Gültigkeitsbereich:Maschine
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:76 errors:0 dropped:0 overruns:0 frame:0
TX packets:76 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 Sendewarteschlangenlänge:0
RX bytes:26981 (26.3 Kb) TX bytes:26981 (26.3 Kb)
wwan0 Link encap:Ethernet Hardware Adresse AE:38:C7:77:0B:B0
inet6 Adresse: fe80::ac38:c7ff:fe77:bb0/64 Gültigkeitsbereich:Verbindung
inet6 Adresse: 2a01:198:24c:c110:ac38:c7ff:fe77:bb0/128 Gültigkeitsbereich:Global
UP BROADCAST RUNNING ALLMULTI MULTICAST MTU:1500 Metric:1
RX packets:19 errors:0 dropped:0 overruns:0 frame:0
TX packets:77 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 Sendewarteschlangenlänge:1000
RX bytes:1838 (1.7 Kb) TX bytes:13618 (13.2 Kb)
More information about the ipv6-ops
mailing list