Radvd向小米Redmi 4X发送错误RA导致IPv6无法正常使用的问题求助
解决小米Redmi 4X IPv6获取后无法正常使用的问题
我碰到过不少安卓设备尤其是小米系在拿到SLAAC/临时IPv6地址后却没法正常联网的情况,结合你的环境(树莓派RADVD+Hurricane隧道,其他设备正常),给你整理几个针对性的排查和解决步骤:
一、先确认基础连通性,排除链路层问题
- 先在手机终端里执行
ping6 [树莓派的本地IPv6地址](比如你/64前缀分配给树莓派的那个地址),如果能通,说明手机和树莓派的IPv6链路没问题;如果不通,先检查手机WiFi的IPv6开关——虽然你能拿到地址,但有些ROM可能在深层设置里限制了链路层IPv6,不妨去WiFi高级设置里确认“IPv6”是开启状态。 - 再试试
ping6 [Hurricane隧道的网关地址](比如隧道给你的那个入口IPv6地址),如果连这个都不通,大概率是手机没正确获取到默认IPv6路由。
二、检查RADVD配置的细节(小米对参数很敏感)
小米设备对RADVD的通告参数兼容性不算太好,重点检查这几个点:
- 确保配置里的
AdvDefaultPreference值足够高,比如设为60;,避免手机忽略这条路由通告。 - 如果你只用SLAAC分配地址,一定要把
AdvManagedFlag和AdvOtherConfigFlag设为off,不然手机会等待DHCPv6服务器,反而没法正常用SLAAC:AdvManagedFlag off; AdvOtherConfigFlag off; - 确认
AdvDefaultRoute设为on,强制推送默认路由给手机;同时AdvSendAdvert要设为on,前缀的生命周期参数(AdvValidLifetime和AdvPreferredLifetime)设为合理值,比如86400和14400。
三、查看手机的IPv6路由表
Root后的手机可以直接执行 ip -6 route show 查看路由表,正常情况下应该有一条类似这样的默认路由:
default via fe80::xxxx:xxxx:xxxx:xxxx dev wlan0 proto ra metric 1024 expires 1799sec
如果没有这条默认路由,说明RADVD的路由通告没被手机正确接收,回去调整RADVD的AdvDefaultRoute参数,然后重启RADVD服务(systemctl restart radvd)。
四、排查防火墙和MTU设置
- 树莓派的IPv6转发和防火墙要配置正确:先确认
sysctl net.ipv6.conf.all.forwarding返回值是1,再用ip6tables -L FORWARD查看,确保FORWARD链是允许IPv6流量通过的。 - MTU不匹配也是常见坑:Hurricane隧道的MTU一般是1480,而手机WiFi默认MTU是1500,大包会因为分片失败无法传输。可以在RADVD里添加
AdvLinkMTU 1480;,让手机自动调整WiFi的MTU值。
五、验证IPv6 DNS解析(很多人忽略这点)
很多时候“无法使用IPv6”其实是DNS的问题——手机有IPv6地址,但DNS只返回IPv4结果。
- 用手机终端执行
nslookup -type=AAAA google.com(如果没有nslookup,可以装个Termux用dig),看是否能拿到Google的IPv6地址。 - 如果拿不到,要么在RADVD里用
AdvDNS参数推送支持IPv6的DNS(比如Cloudflare的2606:4700:4700::1111),要么手动在手机WiFi高级设置里添加IPv6 DNS服务器。
六、ROM层面的特殊限制
不管是原生Android7还是AospExtended 8.1,小米设备可能有隐藏的IPv6限制:
- 去开发者选项里找“IPv6支持”相关的开关,确保是开启状态(有些ROM会把这个选项藏得比较深)。
- 试试重置手机的WiFi网络设置(路径一般是:设置→系统→重置→重置WiFi、移动数据和蓝牙),然后重新连接WiFi获取IPv6,有时候旧的网络配置会干扰新的IPv6获取。
- Root后的设备可以检查
/system/etc/sysctl.conf里的参数,确保net.ipv6.conf.wlan0.accept_ra和net.ipv6.conf.all.accept_ra都设为2(允许自动接收路由通告)。
内容的提问来源于stack exchange,提问作者Constantine Jakushevskij
相关产品推荐
相关产品推荐

