'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