美文网首页IPV6
Openwrt校园网原生ipv6设置_同济大学版(新手导向)

Openwrt校园网原生ipv6设置_同济大学版(新手导向)

作者: 木子识时务 | 来源:发表于2017-07-23 20:59 被阅读931次

    写在前面:之前配置学校的Ipv6尝试过很多种方法,走过很多弯路,花了比较多的时间与精力。虽然这种实现方法不是最优的,但还是把自己配置成功的方法的贴出来,供大家参考吧。理论上,所有高校的原生Ipv6都可以使用此方法。

    教程中刷入的固件不含有SS,屏蔽广告等功能,只因K2 Flash太小,刷入一个Ipv6的hosts文件就基本满了,当然也可以根据需要自己精简这个Hosts,本人比较懒,就设置成自动从github上更新了。

    Ipv6能干吗?

    Ipv6是什么我就不科普了,请参照百度百科:百度百科-Ipv6。Ipv6已经配置好了的可以参照维基百科:维基百科-Ipv6

    支持SS翻墙说不定是很多人刷Openwrt或其它固件(诸如华硕固件)的原因,但是其实Ipv6是没有墙的。因为GFW只是针对ipv4的,所以只要被墙的那些网站是支持IPV6的,那么用ipv6访问是没有任何问题的。目前来看,Google,Youtube,维基百科,Facebook这些常用的网站都是有Ipv6站点支持的(Twitter暂时没有)。具体有哪些网站支持Ipv6,可以通过这个网站查看:Ipv6-hosts(有些是Ipv4的hosts,只看Ipv6的即可)

    有了Ipv6,就可以上六维空间等各大PT站了,这对于啥也没有的同济内网来说,无疑是一大福利。

    六维空间

    经过测试,同济的实验室和寝室也是会自动分配Ipv6地址的(具体测试地点是嘉定校区的寝室,以及宁远馆和迩楼)。寝室的Ipv6速度被电信限速在8M左右,宁远馆和迩楼好像没被限速(K2渣渣,Wan口只有100M,测试网速是能到100M的。所以,速度上限到底多少,未知)

    一般我们把电脑直接插到网口上是可以获取到Ipv6地址的,并使用Ipv6的。但是把路由器搬到网口,再把上网设备连接到路由器上,就不能再用Ipv6了。主要原因是现在Ipv6普及度还比较低,市面上的许多路由器在软件程面上都不支持ipv6。我们要做的就是刷掉路由器本身有的固件,让我们的设备能通过路由器使用Ipv6。最终达到的效果是,让支持Ipv6的网站(大部分是ipv4被墙的网站)走Ipv6线路,其它的走常规的Ipv4线路,所有设置在路由器中完成,上网终端只要支持Ipv6协议即可,不需任何额外的设置。

    寝室里面的Ipv6是直接插上电信的口就可以用的,不需要宽带账号,这也算是同济为数不多的福利吧。

    下面来几张最终的结果图。测试地点:迩楼

    Youtebe_1080P

    1080P寝室8M的限速也是可以流畅的看的,当然,多设备的话估计就比较卡了。

    1.设备信息

    路由器型号:斐讯K2(Wndr 4300经测试也可用Nat6种方法,理论上任何可刷基本Openwrt固件的路由器均可使用此种方法设置Ipv6)

    需要下载的工具:

    1.1 固件:PandoraBox-ralink-mt7620-phicomm-k2-2017-01-03-git-6c24a7a-squashfs-sysupgrade(此固件只适用斐讯K2,其它类型的路由器请自行百度下载固件)

    1.2 刷Bootloader工具:路由器刷breed Web助手通用版v3.1

    1.3 下载安装 Xsehll软件,可从此链接下载。下载后,安装此软件。

    1.4 Nat6文件

    刷机时一定要有一台带有线网卡的电脑。

    2.刷入Breed Web 恢复控制台(以K2路由器为例)

    所谓刷机,就是把原厂自带的软件给刷掉,为此需要先刷入类似于Bootloader之类的东西。此处需要下载1.2中的工具,关于个工具的具体介绍,有兴趣的可移步此处看原作者介绍:【2017-06-13】AR/QCA/MTK Breed,功能强大的多线程 Bootloader。这个软件也支持其它路由器的刷机,不过没试过。下载好软件后,将压缩包完全解压到一个文件夹下。

    • 用网线,将路由器的Lan口(有一个特殊色的,是Wan口,其于都是Lan口)接到电脑上
    • 刷机前,先关掉电脑上一切杀毒软件(Windows Defender实测可不用关),防火墙不关实测也可成功(但不保证100%没问题)。刷机过程中会弹出一些窗口,需要点确认。
    • 右键以管理员的身份运行“路由器刷breed Web助手通用版v3.1.exe”,如果是刚收到的路由器,没有经过任何设置,确保参数与中一致后,可直接点“开始刷机”。如果自己定义过路由器,则需要将用户名,密码,路由器IP地址改为相应的值,其它值要确保跟中一致,然后再点“开始刷机”
    • 未设置密码的情况下,软件会将密码设为默认值 : huzibbs-it 。此时需要将密码修改为:huzibbs-it。然后再点开始刷机。如果之前设置过密码,应该点过开始刷机后,就可一路刷到底(未测试过,猜想。)
    • 刷机完成后,会出现如中的状态提示,按照提示操作即可。记住,一定要先拨掉路由器电源,然后按住按钮,最后再通电。至此Breed Web 恢复控制台刷入完成。

    3. 刷入PandoraBox固件

    • 完成刷入Breed的最后一步后,在浏览器中输入 192.168.1.1,就可进入Breed Web 恢复控制台。如果进入失败,可以在 ”控制面板\网络和 Internet\网络连接“ 中先禁用,再启用有线网卡。
    • 首先点击固件备份,备份”EEPROM“ 和 ”编程器固件“
    • 然后点”恢复出厂设置“,选择 "Config区(公版)",点“执行”
    • 点“固件更新”,在固件的右边点”选择文件“,选择1.1下载的路由器固件。闪存布局默认的”公版(0x50000),勾选”自动重启“,然后点击 ”上传“
    • 确认界面中,选择”更新“,之后等待操作完成即可。

    路由器设置

    下面主要是路由器中Ipv6的设置,至于管理员密码,无线密码、名称之类的怎么设置都很简单,就不再贴了。

    • 首先,要确保路由器能连上ipv4的外网,为此需要对路由器Wan口进行设置。浏览器中输入192.168.1.1,默认的管理员密码是 admin
      • 登录成功后,点“网络 ->接口 -> Wan" ,然后选择相应的协议。如果是在实验室,选DHCP客户端即可,一般默认即是 "DHCP客户端";如果是在寝室,需要将协议切换为”PPPOE“

        • 实验室配置如下:
        • 寝室配置时,选中 PPPOE,然后点切换协议:
          • 输入自己宽带的帐户和密码,然后点”保存&应用“即可

    确保路由器能上网后,再进行下面的操作


    对于其它的Openwrt固件来说,只要Wan6口能获得Ipv6地址并且Ipv6组件未被精简的话,就可以使用下面的方法本配置Nat6,不过经过测试,Wan6口必须设置如下,才能被分配到Ipv6地址。

    Wan6口设置

    正常Ipv6地址的开头是2001,我这个图片是二级路由器,所以地址开头有些奇怪。

    注意,在 网络->接口中,一定要确保全局网络选项中的那个IPv6 ULA前缀不能为空,如果你的没有,就把图片中的照抄下来吧。如果是二级路由器,要确保不能跟一级路由器的相同。

    image.png

    下面的设置需要使用Xshell软件,如果有一定的Linux基础,使用起来会比较方便,如果没有,也没关系,都是比较简单的操作,对着教程操作就好。

    • SSH登录到路由器:打开Xsehll软件,选择”文件-新建“,在弹出的对话框中的”主机“输入 192.168.1.1,然后点击“确定”。在之后弹出的界面中选择“连接”
      • 之后,会弹出安全警告,选择“接受并保存”即可
      • 然后需要输入用户名和密码,密码与路由器登录密码相同,默认是 admin

    下面主要是要配置Nat6,Ipv6按道理应该是不需要Nat的,可是不知道是自己设置有问题,还是学校的Ipv6比较奇怪,其它设置一直没能成功。如果有其它方法成功的,欢迎跟贴指出。Nat6配置主要参考此教程:【转载】 通过openwrt的NAT6转发,使后端设备获得ipv6网络。在此,对原作者表示感谢。
    以下涉及代码的,均需要在Xshell中输入。

    • 安装kmod-ipt-nat6
    opkg update
    opkg install kmod-ipt-nat6
    

    运行示例(之后不再给出Xshell界面)

    -
    • 将"IPv6 ULA Prefix" 的前缀由 f 改为 d
    uci set network.globals.ula_prefix="$(uci get network.globals.ula_prefix | sed 's/^./d/')"
    uci commit network
    
    • 将DHCP服务器设置为”总是广播默认路由“
    uci set dhcp.lan.ra_default='1'
    uci commit dhcp
    
    • 生成nat6脚本
    touch /etc/init.d/nat6
    vi /etc/init.d/nat6
    
    • 之后,需要用到VI编辑器,这个东西比较复杂,不过我们只需用到比较简单的功能。确保输入命令时都处于英文输入法状态。而且不要在VI编辑器中使用鼠标,要用键盘上的四个方向键控制方向。
      • 首先,按 a 键进入编辑状态
      • 然后,将1.4中的Nat6文件打开,复制(或者直接复制下面的),粘贴进去( Shift+insert 是粘贴的快捷键 ,不要右键再选粘贴,可能会出错)
      • 然后按 Esc 键,再输入 :wq (冒号也要输的),即可保存并退出Vi编辑器状态。
      • 技巧提示:如果输入错误,想删除整行,可以先按 ESC键,然后连按两次d键即可删除整行。再次按a键,即可再次进入编辑状态

    为了方便,还是把Nat6 文件中的内容贴出来吧,具体如下

    #!/bin/sh /etc/rc.common
    # NAT6 init script for OpenWrt // Depends on package: kmod-ipt-nat6
    
    START=55
    
    # Options
    # -------
    
    # Use temporary addresses (IPv6 privacy extensions) for outgoing connections? Yes: 1 / No: 0
    PRIVACY=1
    
    # Maximum number of attempts before this script will stop in case no IPv6 route is available
    # This limits the execution time of the IPv6 route lookup to (MAX_TRIES+1)*(MAX_TRIES/2) seconds. The default (15) equals 120 seconds.
    MAX_TRIES=15
    
    # An initial delay (in seconds) helps to avoid looking for the IPv6 network too early. Ideally, the first probe is successful.
    # This would be the case if the time passed between the system log messages "Probing IPv6 route" and "Setting up NAT6" is 1 second.
    DELAY=5
    
    # Logical interface name of outbound IPv6 connection
    # There should be no need to modify this, unless you changed the default network interface names
    # Edit by Vincent: I never changed my default network interface names, but still I have to change the WAN6_NAME to "wan" instead of "wan6"
    WAN6_NAME="wan6"
    
    # ---------------------------------------------------
    # Options end here - no need to change anything below
    
    boot() {
            [ $DELAY -gt 0 ] && sleep $DELAY
            logger -t NAT6 "Probing IPv6 route"
            PROBE=0
            COUNT=1
            while [ $PROBE -eq 0 ]
            do
                    if [ $COUNT -gt $MAX_TRIES ]
                    then
                            logger -t NAT6 "Fatal error: No IPv6 route found (reached retry limit)" && exit 1
                    fi
                    sleep $COUNT
                    COUNT=$((COUNT+1))
                    PROBE=$(route -A inet6 | grep -c '::/0')
            done
     
            logger -t NAT6 "Setting up NAT6"
     
            WAN6_INTERFACE=$(uci get "network.$WAN6_NAME.ifname")
            if [ -z "$WAN6_INTERFACE" ] || [ ! -e "/sys/class/net/$WAN6_INTERFACE/" ] ; then
                    logger -t NAT6 "Fatal error: Lookup of $WAN6_NAME interface failed. Were the default interface names changed?" && exit 1
            fi
            WAN6_GATEWAY=$(route -A inet6 -e | grep "$WAN6_INTERFACE" | awk '/::\/0/{print $2; exit}')
            if [ -z "$WAN6_GATEWAY" ] ; then
                    logger -t NAT6 "Fatal error: No IPv6 gateway for $WAN6_INTERFACE found" && exit 1
            fi
            LAN_ULA_PREFIX=$(uci get network.globals.ula_prefix)
            if [ $(echo "$LAN_ULA_PREFIX" | grep -c -E "^([0-9a-fA-F]{4}):([0-9a-fA-F]{0,4}):") -ne 1 ] ; then
                    logger -t NAT6 "Fatal error: IPv6 ULA prefix $LAN_ULA_PREFIX seems invalid. Please verify that a prefix is set and valid." && exit 1
            fi
     
            ip6tables -t nat -I POSTROUTING -s "$LAN_ULA_PREFIX" -o "$WAN6_INTERFACE" -j MASQUERADE
            if [ $? -eq 0 ] ; then
                    logger -t NAT6 "Added IPv6 masquerading rule to the firewall (Src: $LAN_ULA_PREFIX - Dst: $WAN6_INTERFACE)"
            else
                    logger -t NAT6 "Fatal error: Failed to add IPv6 masquerading rule to the firewall (Src: $LAN_ULA_PREFIX - Dst: $WAN6_INTERFACE)" && exit 1
            fi
     
            route -A inet6 add 2000::/3 gw "$WAN6_GATEWAY" dev "$WAN6_INTERFACE"
            if [ $? -eq 0 ] ; then
                    logger -t NAT6 "Added $WAN6_GATEWAY to routing table as gateway on $WAN6_INTERFACE for outgoing connections"
            else
                    logger -t NAT6 "Error: Failed to add $WAN6_GATEWAY to routing table as gateway on $WAN6_INTERFACE for outgoing connections"
            fi
     
            if [ $PRIVACY -eq 1 ] ; then
                    echo 2 > "/proc/sys/net/ipv6/conf/$WAN6_INTERFACE/accept_ra"
                    if [ $? -eq 0 ] ; then
                            logger -t NAT6 "Accepting router advertisements on $WAN6_INTERFACE even if forwarding is enabled (required for temporary addresses)"
                    else
                            logger -t NAT6 "Error: Failed to change router advertisements accept policy on $WAN6_INTERFACE (required for temporary addresses)"
                    fi
                    echo 2 > "/proc/sys/net/ipv6/conf/$WAN6_INTERFACE/use_tempaddr"
                    if [ $? -eq 0 ] ; then
                            logger -t NAT6 "Using temporary addresses for outgoing connections on interface $WAN6_INTERFACE"
                    else
                            logger -t NAT6 "Error: Failed to enable temporary addresses for outgoing connections on interface $WAN6_INTERFACE"
                    fi
            fi
     
            exit 0
    }
    
    • 修改权限,并使脚本生效
    chmod +x /etc/init.d/nat6
    /etc/init.d/nat6 enable
    
    • 禁止防火墙设置: "Allow-ICMPv6-Forward"
    uci set firewall.@rule["$(uci show firewall | grep 'Allow-ICMPv6-Forward' | cut -d'[' -f2 | cut -d']' -f1)"].enabled='0'
    uci commit firewall
    
    • 修改/etc/sysctl.conf
    vi /etc/sysctl.conf
    

    然后按a键进入编辑状态,按键盘上的上,下,左,右四个箭头键进行移动(不要使用鼠标)
    把文件中相关内容改为以下内容,没有的话就添加,大概说接收广播并开启ipv6转发

    net.ipv6.conf.default.forwarding=2
    net.ipv6.conf.all.forwarding=2
    net.ipv6.conf.default.accept_ra=2
    net.ipv6.conf.all.accept_ra=2
    

    修改完成后,按 Esc 键,再输入 :wq (冒号也要输的),即可保存并退出Vi编辑器状态。

    • 加入转发规则,编辑/etc/firewall.user
    vi /etc/firewall.user
    

    然后按 a 键进入编辑状态
    移动光标到文件未尾,按回车后,添加以下语句

    ip6tables -t nat -I POSTROUTING -s $(uci get network.globals.ula_prefix) -j MASQUERADE
    

    修改完成后,按 Esc 键,再输入 :wq ,即可保存并退出Vi编辑器状态。


    下面配置Ipv6 hosts,使相关的网站(Google,Wiki,Youtube,Facebook等)走Ipv6通道

    • 安装wget
    opkg update && opkg install wget
    
    • 从网络上下载Ipv6 hosts文件
    wget --no-check-certificate https://raw.githubusercontent.com/lennylxx/ipv6-hosts/master/hosts  -O /etc/host_ipv6
    
    • 回到路由器设置界面,选择”网络 -> DHCP/DNS -> HOSTS和解析文件”,在额外的HOSTS文件中填入 /etc/host_ipv6 然后点击“保存应用”
    • 设置启动项,实现定时重启,以及自动更新Ipv6 hosts等功能
      • 选择”系统->计划任务",将以下代码复制进去
    0,1,11,21,31,41,51 * * * * /usr/bin/set_kernel_timezone >/dev/null 2>&1
    */20 * * * * echo 3 > /proc/sys/vm/drop_caches
    30 4 * * * sleep 1m && touch /etc/banner && reboot -f 2>/dev/null  ###定时重启 
    */30 * * * * ping -c 4 www.baidu.com 2>/dev/null  ###Ping_baidu 
    00 3 * * * wget --no-check-certificate https://raw.githubusercontent.com/lennylxx/ipv6-hosts/master/hosts  -O /etc/host_ipv6 2>/dev/null  ###更新Ipv6 Hosts 
    
    

    注意,要在最后一行处按回车键,加入空行。

    • 修改Wan6口,点“网络 ->接口 -> Wan6",将相关设置改为中的设置,然后点 “保存&应用”
    • 然后,选择“系统 ->重启“,点”执行重启“,以重新启动路由器。路由器重启后,Ipv4和Ipv6应该就都能正常使用了。

    成功后的结果图:

    网络状态 Ping测试

    当然,手机也是可以使用的。 手机贴图比较麻烦,就不上图了。

    更新日志

    2017年7月23日:完成第一版

    另外,最近嘉定校区教学区的Ipv6好像不能用了,主要问题是Wan6口能获得Ipv6地址,但是却Ping不通ipv6网关(不知道是不是只有我有个问题,目前在汽车学院和E楼,ipv6都没法正常使用,寝室能正常使用),跟网管打了多次电话,但是感觉是被忽视了,毕竟Ipv6用的人少。。。有需求的同学,可以打电话问问,估计打的人多了,网管那边就会查问题了吧。

    2017年7月25日:完成第二版

    今天下午,迩楼的Ipv6突然通了,于是就加了一些关于Ipv6使用的介绍。

    2017年9月:更新第三版

    更新一下排版,添加了一些注意事项。

    2017年11月9日:更正宁远馆Ipv6速度问题

    相关文章

      网友评论

      • cded16d4e588:请问一下,VI编辑器是什么,怎么打开?
        木子识时务: @陈夏栋 直接按照教程里面输入命令就可以了,打开后是一个窗口,不是常见的文本编辑器。
      • 壹壹爱吃肉肉::cry:直接连的教研室网线,没有路由器,要怎么设置啊?
        壹壹爱吃肉肉:@木子识时务 成功了!多谢!!!
        木子识时务:电脑直接用网线连的吗??
        如果是的话,在确认电脑能拿到Ipv6地址的前提下,修改一下Hosts文件就可以了。
        Hosts文件参照这个网址就行:https://raw.githubusercontent.com/lennylxx/ipv6-hosts/master/hosts
      • 男的糊涂:耗费半天,终于搞定了,小白伤不起啊。还是非常感谢!
        木子识时务:写得有点混乱-=-

      本文标题:Openwrt校园网原生ipv6设置_同济大学版(新手导向)

      本文链接:https://www.haomeiwen.com/subject/scamkxtx.html