小米路由的IPv6支持教程(纯转保存)
2017年11月26日,**办公厅、国务院办公厅印发了《推进互联网协议第六版(IPv6)规模部署行动计划》。截至目前,全国已经有很多地区的宽带运营商提供了IPv6。此前为了支持“教育网IPv6插件”,小米路由器其实已经内置了适用于IPv6的相关模块,但未提供打开的方式。在官方正式支持之前,以下教程给出一种打开小米路由对宽带IPv6支持的方案。
请注意:
IPv6需要宽带运营商的支持。
以下内容以R2D(系统版本:2.25.209)为例,截止发帖时可用。不清楚其他路由型号是否适用。
本案例支持的是小米路由以PPPoE方式获得宽带光猫(桥接模式)下发的IPv6配置。不是指“教育网IPv6插件”。
需要root和开启SSH。这两个操作存在风险,如还未开启请谨慎决定。
本方法开启后的IPv6可能会偶然存在不稳定情况,可能会与某些插件产生冲突。
本教程供爱好者个人研究,请勿在生产环境等可能会因网络问题造成损失的场景使用。
默认使用PuTTY和WinSCP进行相关操作。
方法:
目的是在“教育网IPv6插件”不开启的情况下,也要打开路由器的IPv6总开关。
找到路由器内部文件 /etc/config/ipv6 ,替换为:
config ipv6 'settings'
list if_on 'wan'
option enabled '1'
list if_on 'ipv6'
option enabled '1'
复制代码
(如需预留恢复原状的可能,请备份原来的文件内容)
之后重启路由器,通过 http://ipv6-test.com/、http://www.test-ipv6.com/ 等网站验证是否配置成功。
讨论:
其实还存在其他的改法,但需要提醒的是,某些写法重启后会被系统自动改回去。
有资料显示要改/etc/config/network、/etc/config/dhcp,不过小米路由似乎不需要修改。
对于上海电信用户需要配置4K IPTV的,可以参见:http://www.miui.com/thread-6990020-1-1.html
如果有同样成功的请回帖说一下,以免我遗漏了一些内容。
2019/3/2更新:对于宽带光猫路由模式支持
本段教程在作者电信光猫(光猫拨号、路由模式,小米路由 DHCP)下的小米路由器R2D中试验成功,无法保证在其它设备上能够正常运作。
本段教程涉及操作较多,如操作不当,存在使路由器崩溃的风险,应做好相关准备。
确保光猫配置界面“IPv6 连接信息”能够获得 IPv6 地址且前缀小于\64。检查“LAN侧地址配置-IPv6配置”中“RADVD”已经起用。
对于光猫路由模式的支持基于前面的教程。请先阅读前述教程注意事项、完成所有步骤。
此时,通过网站验证 IPv6 会面临失败。然而,在局域网中电脑的cmd中运行:
ipconfig -all
复制代码
可以看到已经正常获得了公网“IPv6 地址”。(“本地链接 IPv6 地址”为“fe80”开头,如果仅有这项代表不成功)
另一个重要的判断依据需要登陆SSH进到路由器,然后在SSH中运行:
ping6 ipv6.tsinghua.edu.cn
复制代码
此时应该能够得到IPv6地址(2402:f000:1:881::8:205)和 ping 反馈。
还可以运行:
ifconfig
复制代码
检查 eth0.2 的 inet6 addr 是否正常获得地址和小于等于/64的前缀。
如果都检查通过,说明路由器本体可以连上 IPv6 ,且具备向下属设备进一步 SLAAC 的能力。
方法:
小米路由事实上已经实现了大多数的 IPv6 支持,然而由于固件版本太低,唯独 NDP 在光猫路由情形下无法正常工作,需要额外可执行文件来帮忙。
6relayd 可以作为合适的 NDP 中继。其实 6relayd 功能还有很多,更有 odhcpd 作为更丰富的继承者。然而这两个组件官方均未提供使用,于是运用小米提供的 SDK 自行编译了 6relayd :
将 6relayd 文件放入/sbin/并使其可执行。由于该文件夹默认只读,先在 SSH 中输入以下命令解锁:
mount -o remount rw /
之后,用之前推荐的软件通过 SCP 把文件放入上述文件夹。并授予其可执行权限:
chmod +x /sbin/6relayd
此时,在SSH中执行“6relayd”应该会显示程序的帮助信息。
在本案例中,输入如下命令:
6relayd -N eth0.2 br-lan
重启局域网中的计算机后,再通过网站验证 IPv6,应当会通过验证。
走到这一步,说明全部的技术路线已经打通。为了让 6relayd 能够在路由器重启后自动执行,将其附加在开机自动执行的脚本上。以 /etc/init.d/plugin_start_.sh 为例,加入的方式如下:
netmode=$(uci get xiaoqiang.common.NETMODE)
if [ "$netmode"x != "lanapmode"x ] && [ "$netmode"x != "wifiapmode"x ]
then
copy_plugin_chroot_file
sync
# decrese current priority and throw myself to mem cgroup
# so all plugins inherit those attributes
renice -n+10 -p $
echo $ > /dev/cgroup/mem/group1/tasks
/usr/sbin/plugin_start_impl.sh &
6relayd -d -N eth0.2 br-lan
fi
重启路由器后,路由器下属设备应当自动获得正常的 IPv6 连接,这样的话就大功告成了。
开机启动中 6relayd 加入了 -d 参数以免阻塞脚本运行。
6relayd 源代码来源:https://github.com/sbyx/6relayd
小米路由交叉编译技术参考:http://www.book41.net/?p=832
推荐阅读