代码之家  ›  专栏  ›  技术社区  ›  Constantine Jakushevskij

Radvd向android发送错误的RA

  •  -1
  • Constantine Jakushevskij  · 技术社区  · 6 年前

    我有带根的Android 8.1.0 AospExtended-v5.3-OFFICIAL的小米Redmi 4X(但它也不适用于库存的小米Redmi 4X-在没有根的Android 7上)。

    我在Raspberry Pi(启用转发)和IPv6飓风隧道上设置了RADVD。 使用Archlinux的我的台式机和笔记本电脑可以完美地使用IPv6(仅限DualStack和IPv6),但2小米(有root和没有root)无法使用,尽管使用EUI-64可以获得两个IPv6地址(临时)和SLAAC。

    这些地址来自my/64前缀。 我可以用fe80::从桌面ping它,也可以从android ping桌面。

    但是我 无法ping Goolge DNS (2001:4860:4860::8888)和其他IPv6地址。

    Adnroid从RADVD获取IPv6:

    ip-6地址

    26: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
    link/ether 11:22:33:44:55:66 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.111/24 brd 192.168.0.255 scope global wlan0
       valid_lft forever preferred_lft forever
    inet6 2001:470:****:****:1234:1234:1234:1234/64 scope global temporary dynamic 
       valid_lft 86382sec preferred_lft 14382sec
    inet6 2001:470:****:****:1122:33ff:fe44:5566/64 scope global mngtmpaddr dynamic 
       valid_lft 86382sec preferred_lft 14382sec
    inet6 fe80::1122:33ff:fe44:5566/64 scope link 
       valid_lft forever preferred_lft forever
    

    输出人 ip-6路线 为空。

    我尝试不同 flags 像AdvOtherConfigFlag、AdvManagedFlag、AdvHomeAgentFlag等,但都是错误的-Android获取IPv6,可以ping fe80::,但不能ping IPv6 Internet。

    当我在本地网络上禁用RADVD并在根Android上设置IPv6地址时 手动操作 :

    ip link set dev wlan0 down
    ip -6 addr add 2001:470:****:****:1234:1234:4321:4321/64 dev wlan0
    ip -6 addr add 2001:470:****:****:1122:33ff:fe44:5566/64 dev wlan0
    ip link set dev wlan0 up
    

    ip-6地址

    28: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qlen 1000
    inet6 2001:470:****:****:1234:1234:4321:4321/64 scope global 
       valid_lft forever preferred_lft forever
    inet6 2001:470:****:****:1122:33ff:fe44:5566/64 scope global 
       valid_lft forever preferred_lft forever
    inet6 fe80::1122:33ff:fe44:5566/64 scope link 
       valid_lft forever preferred_lft forever
    

    将默认路由添加到Raspberry Pi后:

    ip -6 route add default via fe80::****:**ff:fe**:**** dev wlan0 proto 
    ra metric 100 pref medium
    

    然后ping开始工作!我可以在Android上ping和打开IPv6站点!

    如果我启用RADVD(Android获得两个IPv6)并将路由手动添加到Raspberry Pi,我将无法ping互联网上的IPv6地址。

    我的radvd。树莓皮上的形态

    interface eth0 {
      AdvSendAdvert on;
      MinRtrAdvInterval 300;
      MaxRtrAdvInterval 600;
      AdvHomeAgentFlag off;
      AdvManagedFlag off;
      AdvOtherConfigFlag off;
      prefix 2001:470:****:****::/64 {
        AdvOnLink on;
        AdvAutonomous on;
        AdvRouterAddr on;
      };
    

    您认为: 为什么android手动使用IPv6而不使用RADVD?

    感谢您的回答!

    1 回复  |  直到 6 年前
        1
  •  0
  •   Constantine Jakushevskij    6 年前

    三周后,我找到了解决方案!问题出现在我的路由器TPLink H-Ver=WR841N v8 00000000中:S-Ver=3.16.9 Build 170210 Rel。42078n(最新固件)。

    IPv6不适用于Wi-Fi设备Androids和使用不同Linux的笔记本电脑。但是笔记本电脑可以使用以太网连接!

    当我用另一台路由器更换我的路由器时,Androids和其他Wi-Fi设备就可以使用IPv6,打开IPv6站点并获利!

    我认为我的TPlink不支持IPv6,因为它很旧。