姜鹏辉的个人博客 GreyNius

配置校园网ipv6免流

2019-10-17

因为手中的设备实在是太多了(一台Windows电脑、一台MacBook、一台iPad、一台安卓平板、三个安卓手机、一个iPhone……还有小爱同学和Kindle),都有上网的需求,而自己的ChinaUnicom账号一次只能供一台设备上网,到了晚上还很卡。校园网虽然支持的设备多,但流量有限(一个月只有10个G),所以想就搞个校园网的ipv6免流。

先说一下免流的原理: 校园网在使用之前需要登录个人账号,但是实际上在不登录账号的情况下是可以访问ipv4的局域网以及ipv6的公网。此目的本来是方便学生登录一些教育网资源的,比如谷歌学术这样的网站。但我们可以自己搭建一个同时支持ipv4/ipv6的双栈代理服务器,然后在自己的电脑上将所有ipv4的包转换成ipv6的包发给代理服务器,再由代理服务器转换成ipv4。

手中目前有两台服务器,一台是来自AWS的EC2,一台是来自阿里云的ECS。
思路是:
觉得只要有一台成功了就行,结果实际配起来发现麻烦不少,没想到ipv6的坑还挺多的,看来ipv6的普及还有很长的路要走啊。

关于ipv6的地址分配

链路本地单播地址

我在自己的服务器上,通过修改配置文件获取到ipv6地址后,查看到的地址几乎都是以fe80开头.

查看了网上的一些文档,这种地址叫 链路本地单播地址,格式如下

其中1111,1110,1000,0000转换成16进制就是FE80。
这种地址的特点是

用于诸如自动地址配置、邻居发现或无路由器存在的单链路的寻址。 路由器不能将带有链路本地源地址或目的地址的任何包转发到其他链路上去

站点本地单播地址

站点本地地址的格式如上图,其中1111,1110,1100,0000转换成16进制就是FEC0.

站点本地地址的设计目的是为了用于无需全球前缀的站点内部寻址。路由器不应转发站点外具有站点本地源或目的地址的任何包

综上,两种本地单播地址(FE80或FEC0开头)都是无法被路由器转发的,前者是自动配置的,后者更像是用于局域网中的地址,都类似于ipv4中的私有地址。

可集聚全球单播地址

这个就相当于一个公有地址了,虽然这个地址是几乎用不完的,但目前获得一个也并不容易。 想获取一个全球单播的地址,可以在tunnelbroker上申请一个隧道。
而我用阿里云的话可以直接申请参与双栈协议的公测,没想到申请提交后一天就邮件告诉我审核通过了。

于是我赶紧获取了一个ipv6地址,位置选在了华北2(北京)。地址的开头是2408
查了一下网上的说法,2408是来自联通的网络

电信是240e开头的(240e::/20)
移动是2409开头的(2409:8000::/20)
联通是2408开头的(2408:8000::/20)

参考文章:

  1. FE80、FEC0开头的IPV6地址解析
  2. IPv6技术详解:基本概念、应用现状、技术实践(上篇)

阿里云开启ipv6支持

本章的操作参考于:阿里云ecs开启支持ipv6

添加ipv6模块

1. 修改 /etc/modprobe.d/disable_ipv6.conf

修改前

alias net-pf-10 off
options ipv6 disable=1

修改后

alias net-pf-10 off
options ipv6 disable=0

2. 修改/etc/sysconfig/network

修改前

PEERNTP=no
NETWORKING_IPV6=no

修改后

PEERNTP=no
NETWORKING_IPV6=yes

3. 修改 /etc/sysconfig/network-scripts/ifcfg-eth0

添加 IPV6INIT 为 yes 和 IPV6_AUTOCONF 为 yes

IPV6INIT=yes
IPV6_AUTOCONF=yes

4. 修改 /etc/sysctl.conf

修改前

net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
net.ipv6.conf.lo.disable_ipv6 = 1
net.ipv4.conf.lo.arp_announce=2

修改后

net.ipv6.conf.all.disable_ipv6 = 0
net.ipv6.conf.default.disable_ipv6 = 0
net.ipv6.conf.lo.disable_ipv6 = 0

5. 创建系统在启动时自动加载 IPv6 模块的脚本

创建脚本文件 ipv6.modules

vi /etc/sysconfig/modules/ipv6.modules

脚本内容

!/bin/sh
if [ ! -c /proc/net/if_inet6 ] ; then
exec /sbin/insmod /lib/modules/uname -r/kernel/net/ipv6/ipv6.ko
fi

授权:

chmod +x /etc/sysconfig/modules/ipv6.modules

6. 重启系统

使用 ifconfig查看是否有inet6标识。

关于ipv6地址的获取可以自行查看tunnelbroker相关的使用方法。
使用ping6命令查看是否能ping通一些ipv6的网站(如ipv6.google.com,ipv6.baidu.com)

AWS开启ipv6支持

可以参考https://www.jianshu.com/p/131409434cec

使用SS服务作为代理

可以直接参考我的另一篇文章:在Linux系统上搭建SSR服务器

其中ss_config.json文件中的

"server":"0.0.0.0", 

改为

"server":"::", 

其余的 全都不改 !连127.0.0.1也不要改!

在自己电脑上打开ss客户端,直接输入ipv6地址即可。

连上校园网的ipv6

这一步有一个坑卡了我好久,那就是必须插网线!!!!
输入命令

ipconfig

即可看到两个2001开头的ipv6地址,如下图(仅限windows7及以上)

如果没有出现,则尝试下面两条命令

ipconfig /release6
ipconfig /renew6

将弹出的登录认证页面关掉 在地址栏里输入ipv6.baidu.com,如果能成功打开,则SS客户端选择系统代理->全局模式!

不出意外现在就可以正常访问网页了。


下一篇 Git命令笔记

Comments

Content