2011年4月9日星期六

VPN 连接后修改路由表控制不同网络的访问

    原理:我们可以添加路由,将所有本地网络(所有国内网络范围),路由到我们使用 VPN 前的默认网 关。而剩余的,也就是国外的网络范围,自动流经 VPN。这就很好的解决了 VPN降低本地网络访问速度的问题。
    然后:要找到本地的 IP 地址范围,我们使用的是国内的地址范围。因为这个数据库属于公开数据,我们可以从 CNNIC 或者 APNIC 获得相关数据。剩下的就是对地址库进行分析,然后生成路由添加和删除的脚本就可以了。 
    由于我的机器分别有 Ubuntu,iPad,Android 和 Windows XP,因此,需要两个系统脚本。脚本语言不同,但是参数是一样的。
    - on 表明开启国内路由走默认网关的配置。也就是说添加国内网络的路由指向原默认网关。
    - off 表明关闭这个功能。也就是说删除之前操作所添加的路由。
    - update 是指下载更新 IP 地址库。 代码编写以及使用 Linux
    对于 Linux(Ubuntu,iPad,Android) 最通用的莫过于Shell了,因此,用Bash完成了这个脚本。在Ubuntu系统上测试,应该支持大部分 Linux 系统。
    下载脚本到本地 
    unzip vpnroute.zip
    sudo bash vpnroute.sh on
    需要删除添加的路由,可以执行: sudo bash vpnroute.sh off 需要更新网络路由数据,可以执行:
    bash vpnroute.sh update
    Windows Windows 的批处理文件虽然也能写一些东西,但是总觉得它的功能太受限了。因此,这次我使用 PowerShell 来写这个脚本。PowerShell 是微软 2006 年推出的抗衡 *nix 中的 shell 的产品,通过紧密结合 .Net  Framework 大幅提高命令行及脚本的能力。熟悉 linux shell 脚本的朋友会在使用中会发现有很多语法似曾 相识。虽然有各种不适应,但是不得不说 PowerShell 还是很强大的。可以从这里下载http://u.115.com/file/f2df3c71d4 
    下载的脚本,比如 c:\temp
    修改 PowerShell 执行权限,默认只能执行签名脚本。
    开始->附件->Windows PowerShell->右键点击 Windows PowerShell->以管理员身份执行
    在命令行里执行:
    Set-ExecutionPolicy -ExecutionPolicy Unrestricted
    可能会提示如下信息:
    执行策略更改
    执行策略可以防止您执行不信任的脚本。更改执行策略可能会使您面临about_Execution_Policies 帮助主题中所述的安全风险。是否要更改执行策略?
    [Y] 是(Y) [N] 否(N) [S] 挂起(S) [?] 帮助 (默认值为“Y”): 选择 Y,或者回车即可。
    然后,进入下载文件所在目录,执行脚本
    cd c:\temp
    .\vpnroute.ps1
    如果脚本可以执行,它会返回如下帮助信息:
    PS d:\tmp> .\vpnroute.ps1
    Route networks of CN to the default gateway instead of VPN tunnel
      usage: vpnroute.ps1 {on|off|update}
        on Add routes of CN to default gateway
        off Remove routes of CN
        update Force download/update CN network data
        如要添加路由,希望所有中国范围的IP使用默认的网关访问,就运行:
        .\vpnroute.ps1 on
        如果想要去掉添加的路由,就运行
        .\vpnroute.ps1 off
        想更新中国IP路由数据,就运行
        .\vpnroute.ps1 update
        Windows 的 PowerShell 脚本执行速度不是很高,在 Linux 上使用Bash 添加路由大约只需要10-20秒,在 Windows 上使用 PowerShell 需要 70-80秒。大家如果看到有段时间没响应,不要着急,给他一些时间就会好的。

      没有评论:

      发表评论