【置顶】通过校园网IPv6网络实现不限网络流量/网络加速的方法

  • 2018-03-11
  • 8,284
  • 14
  • 0

20181007 UPDATE:

似乎使用Openwrt/PandoraBox固件的、硬件配置还比较好的路由器都可以实现IPv6。
其他路由器机型首先要自己找合适的固件,然后要注意如下几点:

  1. 在修改软件源的那一步,如果默认源本来就能用,那就不用修改。如果不能用,修改时要(找到并)填入对应自己的路由器的CPU的源地址。 p.s. 斐讯K2的CPU是mt7620
  2. 不确定/etc/init.d/nat6文件内容适用于所有路由器,如有需要,请自行修改

p.s. 现在斐讯已经基本凉了,想买K2/K2P的抓紧去闲鱼买吧。买卖路由器完全属个人行为,与本人无关。本人不承担任何法律责任。


 

文章前半段内容参考于这里(根据CC BY-NC-SA 3.0 中国大陆 协议)。本人对其进行了少量修改(修改使用新的PandoraBox源,默认源已失效)。同时,感谢hlc的热情帮助

硬件要求


  • 开通并缴费的校园网
  • 能刷 OpenWrt/LEDE 的路由器(使用斐讯 K2 演示)
  • 支持 IPv6 的电脑或手机(最好是电脑)

路由器设置


刷路由器


路由器刷机方法较多,具体方法可以去 恩山论坛KoolShare 社区 等查找。

本人使用的方法是,对于K2路由器原版固件(硬件A5,固件号22.5.11.14)先刷入带有breed的官改固件(点此下载,然后在breed中刷入PandoraBox固件(点此下载(PandoraBox是OpenWrt的一种)

连接互联网


  1. 登录路由器管理页面
  2. 打开网络-接口选项卡
  3. 点 WAN 的修改
  4. 按照自己网络的实际情况配置
  5. 保存&应用

启用路由器的 IPv6 转发


此部分可能需要基本 Linux 操作知识

打开路由器 SSH,SCP 访问权限

  1. 打开系统-管理权选项卡
  2. SSH 访问部分,接口选择 LAN,端口 22,勾选密码验证允许 Root 用户凭密码登录,点击保存&应用

使用 SSH 连接路由器

只说 Windows 系统的连接方法,MacOS 我没有用过 用Linux的怎么连自己心里没点儿 B 数吗

下载(并安装) Xshell 或 PuTTY

下面使用 Xshell 演示,PuTTY 操作类似

  1. 打开 Xshell,点击新建
  2. 名称随意,主机输入路由器管理页面地址(一般是 192.168.1.1
  3. 点击用户身份验证用户名输入 root密码输入路由器管理页面登录密码,点击确定
  4. 点击选择刚添加的会话,点击连接

启用路由器的IPv6转发

1. 输入vi /etc/opkg.conf,将光标移到最后一行,按键盘i进入编辑模式,输入下段文字,按ESC,输入:wq回车
(此方法仅限对vi/vim有一定了解的人使用,如果对vi一窍不通,也可以使用第3步中WinSCP进入/etc/目录,打开opkg.conf文件进行输入)

src/gz 17.05_core http://mirrors.moekr.com/pandorabox/targets/ralink/mt7620/packages
src/gz 17.05_base http://mirrors.moekr.com/pandorabox/packages/mipsel_24kec_dsp/base
src/gz 17.05_lafite http://mirrors.moekr.com/pandorabox/packages/mipsel_24kec_dsp/lafite
src/gz 17.05_luci http://mirrors.moekr.com/pandorabox/packages/mipsel_24kec_dsp/luci
src/gz 17.05_mtkdrv http://mirrors.moekr.com/pandorabox/packages/mipsel_24kec_dsp/mtkdrv
src/gz 17.05_packages http://mirrors.moekr.com/pandorabox/packages/mipsel_24kec_dsp/packages

2. 依次输入命令

 opkg update && opkg install kmod-ipt-nat6
 uci set network.globals.ula_prefix="$(uci get network.globals.ula_prefix | sed 's/^./d/')"
 uci commit network
 uci set dhcp.lan.ra_default='1'
 uci commit dhcp
 touch /etc/init.d/nat6

3. 下载并安装 WinSCP

    1. 打开 WinSCP
    2. 文件协议选择 SCP主机输入路由器管理页面地址(一般是 192.168.1.1),用户名输入 root密码输入路由器管理页面登录密码,点击登录
    3. 双击蓝框空白部分
    4. 打开目录输入 /etc/init.d/,点击确定
    5. 双击打开 nat6 文件
    6. 将下面的内容复制到编辑器输入框中,点击左上角的保存图标
 #!/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
 }

4. 回到 Xshell, 继续依次输入

 chmod +x /etc/init.d/nat6 
 /etc/init.d/nat6 enable
 uci set firewall.@rule["$(uci show firewall | grep 'Allow-ICMPv6-Forward' | cut -d'[' -f2 | cut -d']' -f1)"].enabled='0' 
 uci commit firewall

5. 回到 WinSCP,按照上面的方法打开 /etc/ 目录下的 sysctl.conf,加入(或将net.ipv6.conf.*这部分修改为)以下内容,并保存

 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

6. 按照上面的方法打开 /etc/ 目录下的 firewall.user,加入以下内容,并保存

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

7. 重启路由器

搭梯子


1. 选用一个支持IPv6地址的vps,DigitalOcean(点此打开)或者Vultr,搭建vps过程略,自行百度

2. vps搭好后,通过ssh连接到vps(ssh使用方法略),终端中输入开启bbr加速(此脚本来源于https://teddysun.com/

wget --no-check-certificate https://github.com/teddysun/across/raw/master/bbr.sh && chmod +x bbr.sh && ./bbr.sh

3. vps安装S-S-R服务端

wget --no-check-certificate https://freed.ga/github/shadowsocksR.sh
chmod +x shadowsocksR.sh
./shadowsocksR.sh 2>&1 | tee shadowsocksR.log

4. 电脑安装S-S-R客户端(下载地址自行百度,防和谐),打开,参数按照上一步中输入的来写

5. 电脑安装Proxifier汉化版(下载地址自行百度),代理服务器和代理规则如图设置

评论

  • 管理员admin回复

    注:本教程仅限计算机相关专业学生使用。如果您不会使用相关软件,导致把路由器弄坏,本人不负任何责任。P.S. 我可以提供安装设置服务(有需求者直接回复本条评论,邮箱尽量填qq邮箱)。

  • Smilencer回复

    求提供

    • 管理员admin回复

      tyz为什么是你。。。让我白高兴一场.= =

    • 管理员admin回复

      OK

    • zjw1111回复

      啊…对,刚才我点开你留的网址看了一下,hlc给我发的让我参考的一篇文章就是你的这个。(假设你留的这个邮箱能收到回复邮件)

      • XYenon回复

        这个邮箱当然能收到了,不然我留它干什么
        其实按照「CC BY-NC-SA 3.0 中国大陆」共享/演绎应该署名的
        还有,加个友联?

        • XYenon回复

          我的 emoji 呢?我放这儿这么大一个 emoji 呢?

          • zjw1111

            emoji在啊

        • zjw1111回复

          😀 好的

  • lwg0452回复

    有线连接可以v6,无线连接选项里一勾wan6就直接断网,怎么破?

    • zjw1111回复

      初始化以后按照教程再来一遍,没准就好了/滑稽。
      我当时弄了好几回,然后最后莫名其妙的就连上了

      • lwg0452回复

        折腾了一个下午,放弃了 😆

发表评论

冀ICP备19026961号