记忆一隅

校园网IPV6免流方案(国内直连免流)

2019-09-22 · 11 min read
网络

School internet environment ipv6 free solution

校园网的网费一般都较高,高达几元每G,但是校园网的IPV6都是免费的(可能需要认证后才能使用),将IPV4流量导入到IPV6中即可实现校园网免流。通过IPV6连接国内服务器,即可以实现国内直连,低延迟,高速度,还可以实现透明代理等操作。

现在常见的方案

网上现存的免流方案一般是采用国外VPS(时间:2019年9月),所有的流量都要从国外绕一圈,延迟很高,而且国内部分视频,音乐网站是不允许国外IP使用的,国外的版权也很严格,如果不小心进行了BT下载,还可能导致VPS被封,这样的免流体验大打折扣。

根据当下提出的新方案

随着国内IPV6的迅速普及,在全国大部分地区,家庭宽带已经可以获取到IPV6地址了,而且一般为公网IPV6地址,这为我们免流提供了新的手段,我们不再需要国外的VPS,只需要在家中放置一个可以搭建代理的微型服务器设备就可以实现相同的效果。这样延迟低了,降低了使用成本,也避免了数据在境外遭到盗取的风险。

在家中放置一个安装好代理服务器端的设备,在校园内通过IPV6代理访问家中的服务器,就可以实现免流了,在电脑上配合使用proxifier,或配合如OPENWRT这样的路由设备使用,实现全局免流。这里我使用的树莓派作为服务器(最近的一些矿难设备性价比更高,比如斐讯N1,贝壳云P1,在安装armbian系统后也可使用)。

搭建IPV6免流代理的前提条件

  1. 首先,确认家中的宽带能否获取到IPV6地址,如果连IPV6地址都获取不到,那么这篇文章就可以关闭了。这里可以使用test-ipv6进行测试,测试是否支持IPV6,部分地区的运行商宽带其实已经可以分配IPV6地址,但是光猫上要进行设置,这就要具体询问运营商了。
    一般IPV6分配的都是公网地址,但是也有部分地区丧心病狂的分配了内网IPV6地址,这也是不行的,公网IPV6地址是2401,2001,2404等开头的一般都为公网地址,才能够搭建我们的免流代理。
  2. 拥有一台服务器设备,这里树莓派或者我上面提到的矿难产物都是可以的,树莓派搭建起来比较方便,不需要额外的折腾,如果有热爱折腾的精神,那么矿难设备其实是更实惠和稳定的方案。

搭建免流的具体过程

  1. 按服务器设备上安装系统,这里推荐安装Debian或者Ubuntu(或者树莓派官方系统),安装完系统后建议更换国内源,安装软件速度会快一些。这里推荐中科大源,具体配置方法见中科大源官网:http://mirrors.ustc.edu.cn/ 有各个系统详细的配置方法。
  2. 将服务器设备连接到宽带的路由器或者光猫下,检查设备是否获取到IPV6地址。连接好设备后,在命令窗口中输入sudo ifconfig,在命令回应中如果找到如下的公网IPV6即为成功。
  3. 使用域名解析IPV6地址,IPV6地址虽然是公网地址,但是仍然可能会变动,这里使用域名进行DDNS解析,保证一直能够通过域名访问到设备。域名推荐使用Freenom的免费域名,可以每次可以申请一年,一年到期后可以续期。然后再注册一个CloudFlare账户,具体DDNS操作过程见我的另一篇文章RaspberryPi/Phicomm N1... IPV6 DDNS Solution 树莓派IPV6 DDNS解决方案
  4. 安装代理软件,这里我使用的是V2RAY,因为这个代理软件支持路由功能,为我们拓展透明代理,广告屏蔽等功能留下了可能。首先更新一下软件源,输入sudo apt-get update,完成后在命令窗口中输入:
    bash <(curl -L -s https://install.direct/go.sh)
    若不成功则分两步输入:
    wget https://install.direct/go.sh,sudo bash go.sh
    等待软件安装完成。
  5. 进行软件json脚本配置,这是代理配置的核心。配置文件分为以下几个部分:在我们的配置中,我们一般只需要用到其中的inboundsoutboundsdnsrouting,其他根据具体情况再添加。我们在命令窗口中输入:sudo nano /etc/v2ray/config.jsonsudo vi /etc/v2ray/config.json进行脚本配置。
    首先是inbounds,这是我我们代理服务器的入口,是配置代理信息的地方,在这里我们要设置代理协议,代理端口,详细配置等信息。
  "inbounds": [{
       "port": xxxxxxx,
        "protocol": "shadowsocks",
	    "network":"tcp,udp"
        "settings": {
        "method": "aes-128-gcm",
        "password": "xxxxxxx"
      }
    },
    {
      "port": xxxxxxxxx,
      "protocol": "vmess",
      "settings": {
        "clients": [{
          "id": "xxxxxxxxxxxxxxxxxxxxxxxxxx",
          "alterId": 32
        }]
      },
      "streamSettings": {
        "network": "tcp",
        "security": "none",
        "tcpSettings": {}
      }
    }
  ]
  • 代理端口范围可选0-65535,一般建议使用10000-65535,避免和一些特殊端口冲突。协议我们选择vmess或者shadowsocks均可。shadowsocks的加密协议建议选择aes-128-gcm,vmess中的id一般使用随机生成的数据,建议使用生成工具生成,alterid适当选择,建议不要太大。上方代码中实际为配置了shadowsocks和vmess两个代理入口,实现既可以使用shadowsocks连接,也可以使用V2ray连接,当然也可以根据情况只配置一个入口。

  • 然后是outbounds,这是代理服务器的出口,从入口进入的流量经过转发从出口发出。脚本可以配置多个出口,在这里,我们配置一个直连出口,将所有流量直接转发至树莓派所在网络即可。

"outbounds":
[{
      "protocol": "freedom",
      "settings": {},
      "tag": "direct"
}]
  • 在配置文件中配置好inbound和outbound后,再简单设置一下dns和routing路由策略,json脚本就基本配置完成了,保存退出编辑器,使用sudo /usr/bin/v2ray/v2ray -test -config /etc/v2ray/config.json检查json脚本语法是否正确,若返回Configuration OK则说明配置正确,然后使用sudo systemctl restart v2ray重启V2ray即可。
    这里可以先使用json脚本生成工具生成,再根据自己的实际情况做修改(json脚本生成).我也提供一个json配置模板,可以作为参考,这个模板入站和出站均使用shadowsocks协议。
{
  "log": {
    "error": "error.log",
    "loglevel": "warning"
  },
  "outbounds":[
      {
      "protocol": "freedom",
      "settings": {},
      "tag": "direct"
    },
   {
      "protocol": "shadowsocks",
      "tag":proxy,
      "settings": {
      "servers": [
       {
            "address": "**********",
            "port": 14129,
            "method": "aes-128-gcm",
            "password": "*********",
            "network":"tcp,udp"
      }]
      }
  }
],
  "inbounds":[{
      "port": 14129,
      "protocol": "shadowsocks",
      "settings": {
      "method": "aes-128-gcm",
      "password": "*********",
      "network":"tcp,udp"
      }
   },
    {
      "port": 1080,
      "listen": "127.0.0.1",
      "protocol": "socks",
      "settings": {
        "auth": "noauth",
        "udp": true,
        "ip": "127.0.0.1"
      }
    }],
  "dns": {
    "servers": ["119.29.29.29","223.5.5.5","8.8.8.8", "8.8.4.4", "localhost"]
  },
  "routing": {
    "domainStrategy": "IPIfNonMatch",
    "rules": [
    ]
  }
}
  1. 为电脑\手机安装代理软件,windows客户端下载:v2rayN,v2ray-core下载:v2ray-core.下载完成后,解压V2rayN后将v2ray-core解压到相同文件夹后即可使用。手机Android请到GooglePlay下载:V2rayNG 安装完成后启用代理即可。PC端若希望实现全局免流则需要配合proxifier或者sstap,或者使用openwrt等系统的路由器实现。

为免流添加透明代理自动分流

得益于v2ray内置了一个routing路由,我们可以通过路由来实现透明代理,自动分流国内外网站,就可以愉快的上谷歌学术等学习了🙄。通过routing策略,我们可以对访问不同域名或者不同的地址的流量根据我们的需要打上tag标签,这些流量在outbound和出口tag标签进行匹配后,分别从不同出口发出,实现流量分流。

routing的路由策略有三种,分别是:Asls, IPIfNonMatch, IPOnDemand

  • "AsIs": 只使用域名进行路由选择;
  • "IPIfNonMatch": 当域名没有匹配任何规则时,将域名解析成 IP(A 记录或 AAAA 记录)再次进行匹配;
  • "IPOnDemand": 当匹配时碰到任何基于 IP 的规则,将域名立即解析为 IP 进行匹配;
    outboundTag 即出站标签,这里我将国内地址和国内ip,以及测速网站域名打上direct直连标签,国外网站打上proxy标签,然后在outbound出口增加一个有proxy标签的出口,这样国内流量匹配direct标签出口,直连国内,而被打上proxy标签的流量就会从proxy出口走代理,实现流量的自动分流,下面是我的配置。
"routing": {
    "domainStrategy": "IPIfNonMatch",
    "rules": [
        {
        "type": "field",
        "outboundTag": "direct",
        "domain":["geosite:speedtest"]
        },
        {
        "type": "field",
        "outboundTag": "blocked",
        "ip": ["geoip:private"]
        },
       {
        "type":"field",
        "outboundTag":"proxy",
        "domain":["geosite:geolocation-!cn"]
        },
        {
        "type":"field",
        "outboundTag":"blocked",
        "domain":["geosite:category-ads"]
        },
       {
        "type": "field",
        "ip": ["geoip:cn"],
        "domain": ["geosite:cn"],
        "outboundTag": "direct"
      },
      {
        "type": "chinasites",
        "outboundTag": "direct"
      },
      {
        "type": "chinaip",
        "outboundTag": "direct"
      }
    ]
  }
}