上一篇我们讲到了完成VPN隧道架设以后把DNS使用的流量导入了VPN,这样可以保证DNS的结果干净.
那么接下来需要处理的就是要把翻墙流量跟不翻墙的流量区分开来.
这里有2种思路:
- 根据需要翻墙的域名列表来区分
- 根据被墙的IP来区分
根据域名呢比较直观, 而且也比较容易维护, 然而由于CDN, CNAME等配置的存在, 很难得到一个非常完整的域名列表.
https://github.com/gfwlist/gfwlist
这里有一个相对比较网站的列表, 理论上可以通过正则转换成需要的形式, 不过ROS的七层模式我没搞懂怎么玩, 所以只能作罢.
剩下的就是根据IP来区分.
IP的话也是2种形式:
- 把被墙的IP段都分到VPN去
- 把不是墙内的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上实现更加智能翻墙.