月份: 2016-03

自动翻墙配置ROS篇续

上一篇我们讲到了完成VPN隧道架设以后把DNS使用的流量导入了VPN,这样可以保证DNS的结果干净.

那么接下来需要处理的就是要把翻墙流量跟不翻墙的流量区分开来.

这里有2种思路:

  1. 根据需要翻墙的域名列表来区分
  2. 根据被墙的IP来区分

根据域名呢比较直观, 而且也比较容易维护, 然而由于CDN, CNAME等配置的存在, 很难得到一个非常完整的域名列表.

https://github.com/gfwlist/gfwlist

这里有一个相对比较网站的列表, 理论上可以通过正则转换成需要的形式, 不过ROS的七层模式我没搞懂怎么玩, 所以只能作罢.

剩下的就是根据IP来区分.

IP的话也是2种形式:

  1. 把被墙的IP段都分到VPN去
  2. 把不是墙内的IP都分到VPN去

在我做ROS的时候, 我没找到被墙的IP段的信息, 不过现在倒是有一个可以参考的.

https://github.com/SteamedFish/gfwiplist

可惜作者也说了, 严重不全, 所以只能说满足部分去求就行了

另外一种呢, 就是把所有的墙内的IP都摘出来, 然后解析出来不在这些里面的都扔到VPN去.

http://autorosvpn.googlecode.com/files/address-list.rsc

这是一个已经做到ROS用的IP地址列表, 包含了大部分墙内的IP段.

把这个导入到ros的文件管理器然后再导入到地址列表就能用了.

然后在防火墙墙里对这个地址列表做一个mark的标记, 这样在路由选路的时候就能根据标记来判断走哪跳路由了.

具体的操作我就不写了, 因为我也是照抄下面这个博客的:

http://autorosvpn.blogspot.jp/2013/05/ros-vpn.html

ROS的翻墙, 基本原理就是基于VPN隧道的, 但是因为ROS的系统没有相关IPSET等类似的域名策略功能, 所以基本都要靠IP来实现策略路由.

这个在管理上相对来说就麻烦多了. 而且因为第一种方式实现起来不容易, 大部分时候是使用第二种方式的.

这时候就会发现, 一些本来不需要翻墙的应用也在走VPN, 如果VPN速度快也就无所谓了, 如果VPN不够快, 那么就会觉得所有国外网站都很慢, 这时候就觉得反而不方便了.

所以我们在能翻墙以后又会有新的需求, 那就是能不能更加智能一点?

所以我们下一篇就介绍怎么在EdgeOS上实现更加智能翻墙.

 

 

 

技术文—自动翻墙配置ROS篇

因为休息在家, 就想了点事情给自己弄弄.  一来是有事情研究不会太无聊, 二来呢一直一来Bash都属于我不太擅长的领域, 通过折腾可以多学点怎么玩.

所以呢, 趁着自己有空, 就把家里的翻墙配置彻底优化了一下, 可以保证自己最大程度得使用舒适.

背景呢是手上有2台纯有线的路由, 一台是RB450G, 朋友送的, 一台是Ubnt的ERL3, 这是自己在升级到100M宽带的时候自己买的.

在这2货之前呢, 我一直都是IPv6直接挂到He的6to4的Tunnel上实现Google等支持IPv6的访问了, 不过问题就是IPv6毕竟还是小众的, youtube这种就算能访问也不能看片子, 所以用途就很小.

在使用了ERL3以后还是延续了原来的部署方式, 并没有特意去搞太多因为大部分时候我只要有Gmail跟Google就满足了其实.

不过在帮朋友在Azure上部署了一套SS并且他用Asus梅林固件的路由器完成了家用的自动翻墙以后, 我忽然觉得其实路由翻墙也不错嘛, 尤其是其实实现方式比我认为的还是容易多了.所以决定折腾一下.

因为朋友用上了R7000以后把ROS的RG450G送给我了, 所以我觉得先折腾一下这个, 毕竟ROS真心资料比较容易找.

ROS的配置可以使用WinBOX来完成, 当然如果会命令行会更好, 因为命令行其实逻辑性更容易理解一点.很多时候反而是GUI上的配置比较难理解.

基本的思想其实很简单, 就是放弃国内的DNS(因为国内所有的DNS在解析国外被墙的域名的时候必然被污染), 使用国外的DNS并且让DNS从VPN上直接出国而不走国内路由的, 否则DNS的解析结果会直接被污染.

所以我们首先需要搞一个VPN.

我个人使用的是搬瓦工的VPS: https://bandwagonhost.com/aff.php?aff=5802

最近能买到的比较便宜应该只有Los Angeles的2.99刀每月的套餐. LA的DC是搬瓦工比较快的那个, 东部的基本不行.

在起了VPN以后, 我们在VPS上起个VPN, 搬瓦工如果使用centos的话是有自动部署脚本的, 可以直接起OpenVPN.

不过为了我自己用起来方便我其实还是起了PPTP, 可以直接搜自动安装脚本去自动安装, 当然也可以自己手动装.

在VPN server端搞定以后, ROS这端就直接起一个VPN的Interface: 新建PPTP(或者SSTP,OVPN等等)客户端连接:

HH@]0KASPG@8K9RLP}D61F8

, 然后输入VPS的服务器IP, 端口号等需要的信息:

X}9__7C]%901ED%84}C36EJ

只要信息正确, VPN Link会自动建立.

不过为了要能正常通信, 我们需要在ROS上建立一个新的SNAT, GUI的位置防火墙, NAT页里面.

新建一个SNAT的类型, 把out interface改成VPN的接口, action 改成masquerade, src address 改成自己的内网IP段就行了.

CLI比较好理解其实, 例如:

/ip firewall nat
add action=masquerade chain=srcnat comment=”” disabled=no src-address=192.168.1.0/24(自己的本地IP段)

这样VPN的路径就通了.然后我们需要相关的路由来知道流量:

首先我做了一条给8.8.8.8 使用的路由, 这样可以保证我使用的DNS从VPN出去而不是被GFW污染一圈:

/ip route add dst-address=8.8.8.8 gateway=Bandwagong(VPN接口的名字) disabled=no check-gateway=ping

这样DNS就解决了, 然后我们需要把我们需要翻墙的流量到入VPN, 这样就能完成翻墙了.

这里就有问题了, 因为ROS是怎么知道那些需要去VPN的呢?

我们需要整理一个IP List告诉ROS, 然后给去到这些IP的流量做个标记, 再做一条路由让这些流量从VPN出去而不是本地.

具体怎么搞我们下一篇继续.