大陆地区OS X/Unix-like系统智能路由表实现无缝翻墙.

背景吐槽

方校长搞的GFW太恼火了. 搞的我们IT从业人员上国外网站搜个google,查个资料啥的甚是不方便.
Goagent和ssh的socks5以及shadowsocks虽然可以翻出去.但是他只能工作在应用层代理.而且一旦翻出去的话..
上国外网站方便了.但是再上国内网站就奇慢无比了(当然也有GFWList自动判断丁PAC脚本)..因为我们的网络数据要先传到国外再传回国内..
然后在传到国外再传到我们的电脑上来.. 网络数据绕的累不累?反正我是累了.
所以我还是喜欢在国外的Linux机器上开个VPN服务器.然后本地通过VPN拨号出去.然后设置把所有流量都通过VPN,这样任何数据都默认先到国外去了.
这样一来..我们需要想办法搞到所有天朝各大运营商所分配的IP地址段.然后把所有ip地址段都一一设置路由表,让其走本地网关而不是ppp0接口(或者其他私有VPN接口).

稍加思索

思路大概就是吐槽的这样了.下面我们来看怎么一步一步设置.

大概步骤:

  1. 第一步:
    连接海外VPN,让所有数据默认都走VPN,就是说把vpn连接设置为默认路由.
    输入VPN服务器地址.用户名和密码. 设置通过所有VPN连接发送所有流量(Linux下设置默认路由为VPN出口)。

  2. 第二步:
    想办法获取中国所有的IP段列表,解析列表计算生成各个网段的网络地址和掩码保存到脚本当中,
    执行脚本添加路由表,国内IP走国内网关,其他的IP默认统一海外VPN出去。

立马行动

我们去哪里能得到中国的IP分配信息呢..那肯定要去管理这区域的互联网信息的机构去弄,那中国的当然就是去这地方:
亚太互联网络信息中心.
亚太互联网络信息中心(Asia-Pacific Network Information Centre,APNIC),全球五大区域性英特网注册管理机构之一,负责亚太地区IP地址、ASN(自治系统号)的分配并管理一部分根域名服务器镜像。
它提供全球性的支持互联网操作的分派和注册服务。这是成员包括网络服务提供商、全国互联网登记,和相似的组织的一个非营利,基于会员资格的组织。APNIC负责亚洲太平洋区域,包含56个经济区。

我们需要获取亚太地区IP信息表,然后过滤出中国的IP地址段,并计算各个段的网络地址和掩码,生成路由添加脚本.

下载下面这个我已经写好的自动化脚本

#!/bin/bash
#######################戴维营教育 获取中国IPv4地址段路由表 Shell脚本########
FILE=china-ip
ACTION=add
GW=`netstat -nr|grep default |tail -1|awk '{print $2}'`
rm ip_mask.txt add_route_mac.sh $FILE >/dev/null
curl  http://ftp.apnic.net/apnic/stats/apnic/delegated-apnic-latest -o $FILE
grep 'apnic|CN|ipv4|' $FILE | cut -f 4,5 -d'|'|sed -e 's/|/ /g' | while read ip cnt
do
mask=$(cat << EOF | bc | tail -1
pow=32;
define mylog(a)
{
        if (a<=1) return (pow);
        pow--;
        return (mylog( a/2 ));
}
mylog($cnt);
);

echo $ip/$mask/$GW/:$cnt
echo $ip/$mask >> ip_mask.txt
echo "sudo route $ACTION -net $ip/$mask $GW" >> add_route_mac.sh
chmod +x add_route_mac.sh
done

运行这个脚本之后会在当前目录下生成 add_route_mac.sh脚本文件.
然后再执行sudo add_route_mac_sh命令把上一步生成的路由项都添加的到系统的路由表里.
稍等片刻就大功告成啦.. 因为毕竟也有3700条左右的路由项.
这个时候打开国内网站自动走本地网关..国外网站自动走vpn接口.
这个时候我们来用命令测试一下到www.youtube.com和www.baidu.com的路由分别是什么样的:

其中192.168.123.1是vpn服务器那边的vpn网关..192.168.2.253是我本地无线路由的网关:

这样一来,我们就不仅仅是流量网页可以无缝翻墙了.其他一切应用都OK拉..因为我们是在网络层开刀的.而不是在应用层或传输层开刀的.

如果有朋友的公司用的软路由或者好一点的路由器..可以把这些在路由器上建立vpn客户端,然后把路由项加到路由器里.然后就整个公司都可以畅通无阻啦.让员工感觉好像不在天朝一样.

前两天才给我们的iOS开发学员讲解了TCP/IP原理, 之前有给每个人分配一个VPN账号用来google查资料. 但是估计他们觉得翻出去后打开国内网站又很慢. 总是不能两全其美. 故今天特意把这样法子简单整理个步骤. 希望能给大家带来方便..

长沙戴维营教育 iOS开发培训 Linux后台开发培训 欢迎大家一起讨论一切关于开发啊 网络啊 等等的问题.

本文最初于 2013-9-29 发表于 http://bbs.diveinedu.com/forum.php?mod=viewthread&tid=1445

标签:none

添加新评论