我的路由器.jpg前几天到大R杂货那里入手了个二手的GL-iNet路由器,算是比较高配置的,64M RAM+16M ROM,带有USB接口,装的是Openwrt 14.07(一个基于Linux的路由器系统),比较具有可玩性,可以在上面尽量发挥自己的想象力。右图就是路由器的样子,透明亚克力外壳,看上去比较炫,感觉像是一件艺术品。

拿到路由器,第一时间基本是配置好网络了。通过中继连接上隔壁宿舍的Wifi,然后ssh链接到路由器,opkg来安装新软件。我们这里是校园网,用锐捷拨号,在路由器上就只能用mentohust了,安装配置并不难。连上校园网之后,接下来是配置科学上网了。

VPN+智能分流

开始我用的方案是PPTP的VPN来科学上网,在Openwrt中安装ppp-mod-pptp,然后在Luci配置、重启就行,但是接下来一步就不容易了:智能分流,希望只让被墙的网站走vpn,没有被墙的网站不走vpn。

一般来说,实现智能分流是添加路由表,就是添加国内的ip,国内ip不经过vpn,国外ip才走vpn。项目在https://github.com/fivesheep/chnroutes,后来找到一个改进版的,在https://github.com/sabersalv/freedom-routes

但是我觉得,添加国内ip的路由表只能部分地解决这个问题,而且缺点很明显:(1)维护一个国内ip的路由表并不容易,很难收集到比较全的国内ip;(2)这样默认了国外的ip都走vpn,可是并不是所有的国外ip都被墙了,能够直接访问的国外网站,往往直接访问会比走vpn还快;(3)其他缺点,比如P2P也因此失效了,等等。

其实理想的实现方案应该是只让被墙的网站走vpn,我们只需要维护一个被墙的网站的域名列表就行了。可是我找了几天,都没有找到适合的方案。终于有一天,我找到了FreeRouter_V2:https://github.com/lifetyper/FreeRouter_V2。这正好是我所需的,它是基于域名黑名单的方式来实现智能分流的。更难能可贵的是,作者写了一个详细的《FreeRouter V2完全手册》,供我们这些小白学习。

至此,VPN+智能分流就比较完美地实现了。

IPv6

开始我并没有想起来,直到我有一次在图书馆连接Wifi的时候,发现不翻墙也能够访问google,这时候我才想起来,原来我们的校园网是支持IPv6的,那么就可以直接通过IPv6来科学上网了,不需要什么额外的东西。

Openwrt 14.07是原生就支持IPv6的。一般来说,IPv6只能是单播的,就是连接上了只能一个人用,比较明显的特征就是:Openwrt能够获取IPv6地址,在ssh时能够ping6 ipv6.google.com,但是路由器下的电脑都不可以。这时候需要想办法共享IPv6出来了。

网上有很多教程,但是基本上都是基于旧版的Openwrt(不是说放到新版就不能用,而是没有必要),在Openwrt 14.07或者更新版本,有更简单的方案(当然,这也是搜索了很久才得到的。)。原始教程在这里:http://blog.iopsl.com/ipv6-nat-with-openwrt-router/

只需要装一个叫kmod-ipt-nat6的模块,然后就可以配置了。具体步骤翻译过来大概是:

1、通过浏览器登录到Openwrt的LuCI界面;
2、去“网络”>>“接口”;
3、将下面的IPv6 ULA-Prefix的第一个字母f改为d
4、点击修改LAN口的配置,在IPv6 Settings选项卡那里,执行:
(1)Router Advertisement-Service选为“服务器模式”;
(2)禁用DHCPv6-Service和NDP-Proxy;
(3)勾上Always announce default router。

然后写个nat6.sh,每次开机都执行(加到/etc/rc.local中去就行):

#/bin/ash
line=0
while [ $line -eq 0 ]
do
  sleep 10
  line=`route -A inet6 | grep ::/0 | awk 'END{print NR}'`
done
ip6tables -t nat -I POSTROUTING -s `uci get network.globals.ula_prefix` -j MASQUERADE
route -A inet6 add 2000::/3 `route -A inet6 | grep ::/0 | awk 'NR==1{print "gw "$2" dev "$7}'`

重启路由器,就发现能够共享IPv6了。我没有去逐项分析它的原理,直接用上吧。其实,第3点说“将下面的IPv6 ULA-Prefix的第一个字母f改为d”,这个步骤看起来比较奇特,我也不知道什么原因。但是经过我的测试,如果不改也可以,但是解析的速度会慢很多,改了之后速度会快很多,原因不明。

有了IPv6,访问Google等网站就不在话下了,这时候就可以把VPN给撤掉了。但是有个小问题,就是有时候解析会太慢,或者解析出错,毕竟IPv6不是翻墙,而只是访问Google等网站的一条新通道而已(对于已经支持IPv6的网站),访问的过程中还是会被监控的;还会出现诸如能够访问youtube但是不能看视频的情况。这时我们最好加入一个IPv6的hosts文件:https://github.com/lennylxx/ipv6-hosts,下载它,上传到路由器中,然后可以直接在Luci那里,“网络”>>“DHCP/DNS”>>“HOSTS和解析文件”那里添加,然后重启,就会发现访问各类特殊网站更加快速了。

最后一个就是,好像通过IPv6后,访问google.com不会直接跳到https://google.com而是默认的http://google.com,但是后者是无法访问的。如果在Chrome下,可以通过如下方式强制某个网站用https:http://www.williamlong.info/archives/3918.html

至此,IPv6共享的问题已经解决。下面思考一下怎么可以利用路由器剩余的空间,折腾出一些创意东西。


转载到请包括本文地址:http://kexue.fm/archives/3524/

如果您觉得本文还不错,欢迎点击下面的按钮对博主进行打赏。打赏并非要从中获得收益,而是希望知道科学空间获得了多少读者的真心关注。当然,如果你无视它,也不会影响你的阅读。再次表示欢迎和感谢!