EP翻墙法:OpenVPN+FoxyProxy

之前一直没用过VPN翻墙,因为VPN需要手动打开关闭,对我等用惯FG+FoxyProxy自动切换的人来说实在是很麻烦。。。(话说我连FG都设成服务让它自动启动了。。。

不过最近60大寿,FG和U相继RP,基本是没法用了。前两天实在无法忍受墙内的日子,弄了个OpenVPN回来研究,EP了半天终于研究出来了。。。

说起来原理其实很简单,只要不让OpenVPN修改全局路由,然后弄个代理服务器程序把本地端口绑定到虚拟网卡就可以了。不过这程序倒是费了一番周折,Google根本找不到小型能指定本地绑定ip的代理服务器。。。最后只好自己写一个。。。

不罗嗦了,这里简单说下步骤:

  1. 配置OpenVPN到可用状态,Google很多教程,这里就不说了。目前我用过AlonWebUltraVPN的服务,感觉上UltraVPN快一点,而且没有广告。
  2. 在配置文件加上以下内容(如有重复可以删除,路径请自行修正):
    route-noexec
    
    route-up "cmd /c D:\\OpenVPN\\config\\runproxy.cmd"
    
    script-security 3 system
    
    down "cmd /c taskkill /f /im proxy.exe & echo DOWN"
  3. runproxy.cmd(注意if后面的数字要改成自己机器虚拟网卡的编号,可在CMD运行Route print查看):

    @echo off 
    cd /d "%~dp0"
    route delete %route_network_1% mask %route_netmask_1%  if 32
    route delete 0.0.0.0 mask 0.0.0.0  if 32
    
    
    route add %route_network_1% mask %route_netmask_1% %route_gateway_1% metric 1 if 32
    route add 0.0.0.0 mask 0.0.0.0 %route_vpn_gateway% metric 1 if 32
    
    taskkill /f /im proxy.exe
    start proxy.exe %ifconfig_local%
  4. 启动OpenVPN后,把FoxyProxy的代理设置为127.0.0.1:8119即可。

 

配置模板、代理程序及源代码

(代理程序需要.Net 2.0)

祝各位翻墙愉快。。。

Across the Great FireWall we can reach every corner in the world.

15 thoughts on “EP翻墙法:OpenVPN+FoxyProxy

  1. 呃。。。路由设置的ip地址应该没错,但是if 32要改成你的机器虚拟网卡的编号,另外下面start proxy.exe的参数还没改。。。如果还是不行的话,把连接上之后的route print结果贴上来看看吧。。。

    (话说评论顺序诡异了。。。orz

  2. d:\rout>route print
    ===========================================================================
    Interface List
    0x1 ……………………… MS TCP Loopback interface
    0x10003 …00 ff 37 ee 6b c0 …… Anchorfree HSS Adapter – 数据包计划程序微型
    端口
    0x10004 …00 b0 8c 05 04 b2 …… 802.11 USB Wireless LAN Card – 数据包计划程
    序微型端口
    ===========================================================================
    ===========================================================================
    Active Routes:
    Network Destination Netmask Gateway Interface Metric
    0.0.0.0 128.0.0.0 10.24.40.1 10.24.41.123 1
    0.0.0.0 0.0.0.0 192.168.0.1 192.168.0.101 20
    10.24.40.0 255.255.248.0 10.24.41.123 10.24.41.123 30
    10.24.41.123 255.255.255.255 127.0.0.1 127.0.0.1 30
    10.255.255.255 255.255.255.255 10.24.41.123 10.24.41.123 30
    68.68.107.24 255.255.255.255 192.168.0.1 192.168.0.101 1
    74.115.0.24 255.255.255.255 10.24.40.1 10.24.41.123 1
    127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1
    128.0.0.0 128.0.0.0 10.24.40.1 10.24.41.123 1
    192.168.0.0 255.255.255.0 192.168.0.101 192.168.0.101 20
    192.168.0.101 255.255.255.255 127.0.0.1 127.0.0.1 20
    192.168.0.255 255.255.255.255 192.168.0.101 192.168.0.101 20
    224.0.0.0 240.0.0.0 10.24.41.123 10.24.41.123 30
    224.0.0.0 240.0.0.0 192.168.0.101 192.168.0.101 20
    255.255.255.255 255.255.255.255 10.24.41.123 10.24.41.123 1
    255.255.255.255 255.255.255.255 192.168.0.101 192.168.0.101 1
    Default Gateway: 10.24.40.1
    ===========================================================================
    Persistent Routes:
    None

    d:\rout>cmdproxy

    d:\rout>route delete 10.24.40.0 mask 255.255.248.0 if 0x10003
    The route specified was not found.

    d:\rout>route delete 0.0.0.0 mask 0.0.0.0 if 0x10003

    d:\rout>route add 10.24.40.0 mask 255.255.248.0 10.24.40.1 metric 1 if 0x10003

    d:\rout>route add 0.0.0.0 mask 0.0.0.0 10.24.40.1 metric 1 if 0x10003

    d:\rout>taskkill /f /im proxy.exe
    错误: 没有找到进程 "proxy.exe"。

    原来第一句 route delete 已经错了。我哪里弄错了呢 ?

  3. 貌似hotspot shield的机制有点不同。。。你把所有route命令删掉,换成以下的试试。。。

    route delete 0.0.0.0 mask 128.0.0.0 if 0x10003
    route delete 128.0.0.0 mask 128.0.0.0 if 0x10003

    route add 0.0.0.0 mask 128.0.0.0 10.24.40.1 metric 25 if 0x10003
    route add 128.0.0.0 mask 128.0.0.0 10.24.40.1 metric 25 if 0x10003

  4. 运行无错误 。 结果一样。开不开 proxy 8119 。都能出去。不过还是谢谢您的耐心。
    我投降了。用回添加 国內路由表的方法。再次感谢。
    route print 如下:
    ===========================================================================
    Active Routes:
    Network Destination Netmask Gateway Interface Metric
    0.0.0.0 128.0.0.0 10.35.48.1 10.35.53.236 25
    0.0.0.0 0.0.0.0 192.168.0.1 192.168.0.101 20
    10.35.48.0 255.255.248.0 10.35.53.236 10.35.53.236 30
    10.35.53.236 255.255.255.255 127.0.0.1 127.0.0.1 30
    10.255.255.255 255.255.255.255 10.35.53.236 10.35.53.236 30
    68.68.107.35 255.255.255.255 192.168.0.1 192.168.0.101 1
    74.115.0.35 255.255.255.255 10.35.48.1 10.35.53.236 1
    127.0.0.0 255.0.0.0 127.0.0.1 127.0.0.1 1
    128.0.0.0 128.0.0.0 10.35.48.1 10.35.53.236 25
    192.168.0.0 255.255.255.0 192.168.0.101 192.168.0.101 20
    192.168.0.101 255.255.255.255 127.0.0.1 127.0.0.1 20
    192.168.0.255 255.255.255.255 192.168.0.101 192.168.0.101 20
    224.0.0.0 240.0.0.0 10.35.53.236 10.35.53.236 30
    224.0.0.0 240.0.0.0 192.168.0.101 192.168.0.101 20
    255.255.255.255 255.255.255.255 10.35.53.236 10.35.53.236 1
    255.255.255.255 255.255.255.255 192.168.0.101 192.168.0.101 1
    Default Gateway: 10.35.48.1
    ===========================================================================
    Persistent Routes:
    None

  5. 呃。。。指正就不敢了。。。其实我也是半吊子。。。orz
    据我所知应该是metric较低的路由会优先使用,刚刚又看了一下你的路由表,突然想到不知道是不是因为vpn的路由项目被分成两条了,所以即使metric较高也被优先使用了。你试试把两条添加路由的命令合并成这样:

    route add 0.0.0.0 mask 0.0.0.0 10.24.40.1 metric 100 if 0x10003

  6. 用手动的方法试了一下。用VPN 连接 后得到:
    IP Address. . . . . . . . . . . . : 10.13.58.187
    Subnet Mask . . . . . . . . . . . : 255.255.240.0
    Default Gateway . . . . . . . . . : 10.13.48.1
    按我的理解把脚本改成:
    @echo off
    cd /d "%~dp0"
    route delete 10.13.48.0 mask 255.255.240.0 if 32
    route delete 0.0.0.0 mask 0.0.0.0 if 32

    route add 10.13.48.0 mask 255.255.240.0 10.13.48.1 metric 1 if 32
    route add 0.0.0.0 mask 0.0.0.0 10.13.48.1 metric 1 if 32

    taskkill /f /im proxy.exe
    start proxy.exe IP地址

    FireFox 上试了一下。 AutoProxy 127.0.0.1:8119 成功。

    但后来发觉 禁用 AutoProxy 也请能上。

    用 route print 查了一下 :Default Gateway 是 10.13.48.1。不是机子上的 192.168.X.X Gateway.
    是否要改一下Default Gateway ?如何改? 我对网络是门外汉。。
    另外 断线后要手动恢复 路由表 吗? 如何做 ?

    谢谢你的关注。

  7. 昨天在网上惡補路由的知识。以下观念不知道正不正确,请你指正。

    1. VPN 挿入了几条路由,但没有修改原本的路由。
    2. VPN 对全局路由的控制是通过 metric 优先级取得的。(包括默认 Gateway)

    如果以上成立。我们能否通过降低 VPN 路由的metric 。使它成为后补通道?毕竟只有原路不通的情況下。我才想用它。

  8. route add 0.0.0.0 mask 0.0.0.0 10.24.40.1 metric 100 if 0x10003

    试了一下。结果如下:
    QQ ,迅雷 。不用重连。
    用 visualroute 跟踪:国內线确实 由192.168.*.* 出去。不通的转到 VPN 上出去了。反应还可以。用两边的网站查 本机的IP,得到两个不同的IP。
    看来可以不用 FOXYPROXY 了。

    万分感谢。

  9. 呃。。。Hotspot shield好像不支持自动运行脚本。。。这样的话也手动修改脚本:

    @echo off
    cd /d "%~dp0"
    route delete 网络地址 mask 子网掩码 if 32
    route delete 0.0.0.0 mask 0.0.0.0 if 32

    route add 网络地址 mask 子网掩码 网关 metric 1 if 32
    route add 0.0.0.0 mask 0.0.0.0 网关 metric 1 if 32

    taskkill /f /im proxy.exe
    start proxy.exe IP地址

    以上均为虚拟网卡的地址,网络地址指的是子网的地址,例如IP为10.0.0.1的话网络地址为10.0.0.0。

  10. 翻墙找到这个帖子,向博主致敬。小软件相当好,公司用不了openvpn,我用L2TP的VPN,配合博主的小软件,开心得一塌糊涂

Leave a Reply

Your email address will not be published. Required fields are marked *