博文

目前显示的是 六月, 2010的博文

配置路由以节省 vpn 流量

前几日有同事请教我翻墙。我便不假思索的推荐了 tor。没想到现在 tor 新用户的体验如此之差。用我私藏的一票 bridge,以及当场写信获取的 bridge,竟然都没能奏效。虽然现在版本的 tor 只要出过一次墙就基本不用再操心,但是这第一次亲密接触,看来却不容易。我不由当场脱口而出:”像你这么不差钱的人,为啥不买个 vpn 呢。“

事后回味一下自己的话,于是买了一个。

但是几乎所有的 vpn 用户都要面对的问题是,默认流量都走 vpn,国内站点十有八九访问变慢,而且这部分流量也都算作 vpn 的流量,不划算。

如果能够像用 tor 的时候那样,根据域名判断要不要走 tor(我的终极办法是写 pac 文件)就好了。

办法当然有。vpn 这个层面,可以根据 ip 来进行路由。

折腾了很久。出发点直接克隆 tor 时代的做法,找一个撞墙的 ip 列表令其走 vpn。但是这个列表并不好找。根据 pac 自行搞出来的 ip 列表也不好用——因为缺少有效的手段确切得知一个域名后面隐藏了多少 ip。

退而求其次,可以令国外 ip 走 vpn。这样的话需要一个境外 ip 的列表。但是几经周折找到的 ip 列表竟然达到 100k 的级别,这么多的路由一条一条设置下来很花时间,vpn 网关一旦发生变化也要随之更新。

不实用。很沮丧。甚至一度琢磨着,访问大中华局域网慢点就慢点吧。

推友 delphij 一句话点醒梦中人——APNIC 不是有 ip 列表么。

但是之前找境外 ip 段的时候,早就看过 APNIC 的列表——正如其名,只有亚太地区的啊~

其实,只要知道大陆的 ip 段就可以了。指定大陆的 ip 段走系统设备,其它 ip 一律还按默认走 vpn 就好了。这样做的好处还在于,不管有没有 vpn,都不会对上网造成什么影响。

这里先贡献一个解析 country-ipv4.lst 的脚本(依赖 perl 模块 Net::IP),用来生成一个 ip/netmask/country 格式的精简表。

经典用法./parse_country_ipv4.pl < country_ipv4.lst > route_cn.txt

再贡献一个设置路由的脚本,读取上述格式的列表,并将其中指定的 ip 段路由到系统默认的设备及其网关。脚本会默认读取与其同位置的 route_cn.txt。

经典用法(注意权限)./v…