'Upgrading' NAT64 to 464XLAT?
Bjørn Mork
bjorn at mork.no
Wed Nov 27 13:20:37 CET 2013
Tore Anderson <tore at fud.no> writes:
> * Bjørn Mork
>> Tore Anderson <tore at fud.no> writes:
>>
>>> This is implemented in Android - its wireless hotspot feature works just
>>> fine using IPv6-only + 464XLAT as the upstream mobile connectivity. The
>>> hotspot zone remains IPv4-only though,
>>
>> Really? I have only tested on Android 4.2 (without the CLAT), but USB
>> tethering with IPv6 seems to work fine. The phone sends RAs with it's
>> allocated prefix. It's also sharing the DNS64 enabled DNS servers via
>> DHCPv6, so DNS64/NAT64 works fine from the clients (of the phone).
>
> Didn't try USB tethering, but there's no IPv6 on the wireless one as
> far as I can tell. Here's how it looks under the hood with wireless
> tethering enabled, using IPv6 for upstream connectivity:
>
> shell at maguro:/ $ ip -4 address list scope global
> 10: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
> inet 192.168.43.1/24 brd 192.168.43.255 scope global wlan0
> 760: clat4: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1480 qdisc pfifo_fast state UNKNOWN qlen 500
> inet 192.0.0.4/32 brd 192.0.0.4 scope global clat4
> shell at maguro:/ $ ip -6 address list scope global
> 6: rmnet0: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1500 qlen 1000
> inet6 2a00:e18:8000:474::f0d9:7a01/128 scope global
> valid_lft forever preferred_lft forever
> shell at maguro:/ $ ip -6 route show dev wlan0
Bluetooth, usb and wifi tethering should all work the same:
shell at android:/ $ ip -6 address list scope global
3: rmnet0: <ALLMULTI,PROMISC,UP,LOWER_UP> mtu 1500 qlen 1000
inet6 2a02:2121:0:20:1af7:9832:d35b:7244/64 scope global dynamic
valid_lft forever preferred_lft forever
shell at android:/ $ ip -4 address list scope global
23: rndis0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bridge0 state UP qlen 1000
inet 192.168.42.129/24 brd 192.168.42.255 scope global rndis0
29: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master bridge0 state UP qlen 100
inet 192.168.43.1/24 brd 192.168.43.255 scope global wlan0
31: bnep0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bridge0 state UNKNOWN qlen 1000
inet 192.168.44.1/24 brd 192.168.44.255 scope global bnep0
But what I believe you missed above is that these devices are added to a
common bridge device, and *this* is the device with the global /64 route:
shell at android:/ $ brctl show
bridge name bridge id STP enabled interfaces
bridge0 8000.1c7b214d06a4 no bnep0
rndis0
wlan0
shell at android:/ $ ip -6 route
2001:4600:4:fff::54 via 2a02:2121:0:20:5c56:a476:6058:769b dev rmnet0 metric 1024
2001:4600:4:1fff::54 via 2a02:2121:0:20:5c56:a476:6058:769b dev rmnet0 metric 1024
2a02:2121:0:20:5c56:a476:6058:769b dev rmnet0 metric 1024
2a02:2121:0:20::/64 dev bridge0 metric 1024
fe80::/64 dev bridge0 proto kernel metric 256
fe80::/64 dev rndis0 proto kernel metric 256
fe80::/64 dev rmnet0 proto kernel metric 256
fe80::/64 dev wlan0 proto kernel metric 256
fe80::/64 dev bnep0 proto kernel metric 256
default via 2a02:2121:0:20:5c56:a476:6058:769b dev rmnet0 metric 1024
If you run logcat you'll see that the "radish" process uses ebtables to
set up bridge0 as a brouter, switching the shared global IPv6 prefix
between USB, WiFi and Bluetooth while routing the RFC1918 IPv4 addresss.
You'll also see how the RS and NS messages are processed.
> shell at maguro:/ $ getprop ro.product.model
> Galaxy Nexus
> shell at maguro:/ $ getprop ro.build.description
> yakju-user 4.3 JWR66Y 776638 release-keys
FWIW I an using a Sony Xperia Z1 for my tests:
shell at android:/ $ getprop ro.product.model
C6903
shell at android:/ $ getprop ro.build.description
C6903-user 4.2.2 14.1.G.2.257 _nZ-jw test-keys
Bjørn
More information about the ipv6-ops
mailing list