研一和研二因为有张无限流量的校园联通卡,所以一直没在意上网的事情。研三最后半个学期没有流量真是难受的要死。东北大学校园网ipv6出口免流量,家里移动的网络有ipv6,有几次放假回家都想着配好了能在学校用,之前没动力,也就没怎么仔细研究,到毕业了都没搞出来。最后一个学期用着vps的ipv6代理,由于海外ip,视频网站还不能看,网速还不确定,憋屈。

这次毕业了在家没事干,倒是把ipv6配出来了。。。记录一下自己踩的坑吧,其实就一层窗户纸,哎。

0.验证网络是否有ipv6

我家的网络环境,光纤入户,破解了光猫,由路由器进行pppoe拨号。由于路由器一般都没有配置ipv6,所以无法获取ipv6地址。

建议测试时,直接将光猫连接电脑,然后配置pppoe拨号。打开http://test-ipv6.com/测试是否可以访问ipv6。确定可以访问之后,下一步配置路由器。

1.配置padavan路由器访问ipv6

参考内容很多,放一个最近配置时看到的。

H大Padavan固件中NAPT66模块的使用方法【适用于教育网原生IPv6】(20190131更新)

这里我再转述一遍。

这里是使用NAPT66模块,我家的newifi mini的固件自带这个插件,OpenWrt可能需要安装,安装可以参考这个链接 Padavan/Openwrt/LEDE下实现ipv6 nat/napt66

在确定拥有NAPT66模块的Padavan固件下:

1)修改外部网络(WAN)中的Ipv6设置

配置例子如下,配置成功后,在网络地图->外部网络状态的”Ipv6地址 WAN”中就可以看到ipv6地址,这个时候路由器已经可以访问ipv6了,但是局域网还没有分配ipv6地址

2)在“在防火墙规则 (Emong's Qos) 启动后执行”脚本中添加如下脚本:

### NAPT66 所需要的防火墙政策
ip6tables -F
ip6tables -P INPUT ACCEPT
ip6tables -P FORWARD ACCEPT
ip6tables -P OUTPUT ACCEPT

3)进入“自定义设置 - 脚本”中“路由器启动后执行”脚本中添加如下脚本:

### 启动 NAPT66 模块
insmod /lib/modules/$(uname -r)/kernel/net/napt66/napt66.ko wan_if=ppp0

注意!上面的wan_if后面的参数,原帖子给的是eth0.2,就是因为这个我被坑了这么久,没配置正确。这里需要自己确定具体的参数。确定的方式很简单,登录ssh,输入ifconfig,看是哪个网络获取了ipv6地址。

例如我这里,可以看出是ppp0获取到的ipv6地址,所以设置为ppp0:

ppp0      Link encap:Point-to-Point Protocol  
          inet addr:10.***.****.180  P-t-P:10.253.64.1  Mask:255.255.255.255
          inet6 addr: 2409:8a44:****:3b:****:8ebc:****:a7f8/64 Scope:Global
          inet6 addr: fe80::****:****:****:a7f8/10 Scope:Link
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1492  Metric:1
          RX packets:3808279 errors:0 dropped:0 overruns:0 frame:0
          TX packets:4144880 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3 
          RX bytes:3205203030 (2.9 GiB)  TX bytes:757281553 (722.1 MiB)

4)重启路由器,重启计算机网络

2.配置小米r2d获取ipv6网络

回家之后在拼多多又淘了个小米路由器r2d,自带1t硬盘,cpu双核A9+256RAM+512ROM,性能可以,才272块。虽然最后确认是官翻,而且硬盘通电3000+小时,还行吧,这么便宜要啥自行车,带1年保修。

小米的路由器本身无法配置ipv6,所以继续研究。

2.1 开启ssh

配置ipv6需要开启ssh,而小米官方渠道开启ssh会失去保修,这里提供小米r2d非官方开启ssh的方法。

参考:升级小米路由器3 SSH

需要旧版的开发版固件,brcm4709_r2d_all_2.8.14.bin

1)手动升级,选择旧版固件。

2)进入192.168.31.1,并登录,登录后在地址栏会有stok,记录,用来替换下面网址中的stok,替换stok后陆续在地址栏执行以下4条(注意每次执行要等待指令执行完成后,即页面打开状态的小圆圈转完)。

http://192.168.31.1/cgi-bin/luci/;stok=【你的stok,登录路由器管理界面在地址栏可以看到】/api/xqnetwork/set_wifi_ap?ssid=tianbao&encryption=NONE&enctype=NONE&channel=1%3Bnvram%20set%20ssh%5Fen%3D1%3B%20nvram%20commit
http://192.168.31.1/cgi-bin/luci/;stok=【你的stok,登录路由器管理界面在地址栏可以看到】/api/xqnetwork/set_wifi_ap?ssid=tianbao&encryption=NONE&enctype=NONE&channel=1%3Bsed%20%2Di%20%22%3Ax%3AN%3As%2Fif%20%5C%5B%2E%2A%5C%3B%20then%5Cn%2E%2Areturn%200%5Cn%2E%2Afi%2F%23tb%2F%3Bb%20x%22%20%2Fetc%2Finit.d%2Fdropbear
http://192.168.31.1/cgi-bin/luci/;stok=【你的stok,登录路由器管理界面在地址栏可以看到】/api/xqnetwork/set_wifi_ap?ssid=tianbao&encryption=NONE&enctype=NONE&channel=1%3B%2Fetc%2Finit.d%2Fdropbear%20start
http://192.168.31.1/cgi-bin/luci/;stok=【你的stok,登录路由器管理界面在地址栏可以看到】/api/xqsystem/set_name_password?oldPwd=路由器管理密码&newPwd=路由器管理密码 

前三个URL返回的相关错误代码是:

"msg": "未能连接到指定WiFi(Probe timeout)", "code": 1616

最后一个是root ssh登录小米路由器的密码设置,因此,只有返回如下,才能说明ssh破解正常:

"code": 0

3)测试ssh

成功开启ssh后,使用powershell、putty或者你熟悉的ssh客户端,输入下面指令,如果开启ssh成功,输入密码即可登录路由器。

ssh root@192.168.31.1

如果开启失败,会被拒绝访问,类似下面的提示

ssh: connect to host localhost port 22: Connection refused

开启ssh成功后,可以直接在线升级最新版的固件,ssh权限不会被关闭。

2.2 开启ipv6

这部分基本照搬下面的参考链接,我也没有遇到什么坑

参考:小米路由的IPv6支持教程(Update: 19/03/04)

1)外部网络(WAN)获取ipv6

替换路由器文件 /etc/config/ipv6 为

config ipv6 'settings'
        list if_on 'wan'
        option enabled '1'
        list if_on 'ipv6'
        option enabled '1'

重启路由器,通过两种方法判断路由器是否获取到ipv6地址。

  • ifconfig判断是否获取到ipv6网址
  • 通过下面的指令判断路由器是否获得ipv6地址
    ping6 ipv6.tsinghua.edu.cn
    

    2)局部网络(LAN)获取ipv6

    小米路由事实上已经实现了大多数的 IPv6 支持,然而由于固件版本太低,唯独 NDP 在光猫路由情形下无法正常工作,需要额外可执行文件来帮忙。

    6relayd 可以作为合适的 NDP 中继。其实 6relayd 功能还有很多,更有 odhcpd 作为更丰富的继承者。然而这两个组件官方均未提供使用,于是运用小米提供的 SDK 自行编译了 6relayd

    下载:6relayd

    百度网盘:链接: https://pan.baidu.com/s/1pmoeEJcGIB6tHeaJISWVqQ 提取码: u2df

    将 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 ]
                    copy_plugin_chroot_file
                    # 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
    

    重启路由器后,路由器下属设备应当自动获得正常的 IPv6 连接,这样的话就大功告成了。

    3)对外网暴露的支持

    如果本地计算机已经可以通过 IPv6 测试、可以访问 IPv6 网站,但外网通过 IPv6 无法访问本机,首先是因为 openwrt 默认阻挡所有外网主动发起 IPv6 连接。小米路由自带 IPv6 防火墙 ip6tables,为了确定问题,可以用以下命令使该防火墙放行所有数据:

    ip6tables -F
    ip6tables -P INPUT ACCEPT
    ip6tables -P FORWARD ACCEPT
    

    需要注意的是,这样会降低内网设备的安全性。建议自行研究和配置 ip6tables,对放行进行严格的约束。确定规则后,可以模仿之前思路将其设为开机启动。
    另外,不要忽略本地计算机操作系统的防火墙。例如 Windows 防火墙默认阻挡 ICMP。在此配置下,外网 ping 本机 IPv6 是没有答复的。

    至此,我的两个路由器都可以获取ipv6地址,由于移动的ipv4没有公网ip,bt下载很不方便,配置ipv6之后就拥有公网ip了。

    唯一踩的坑就是wan_if这个参数了,教训就是以后用别人教程的时候,如果不管用,可以先考虑参数是否和原作者有区别,尝试修改一下。

  •