伊朗今年初升级了其防火墙系统,使用了基于论文《网络流量分类研究进展与展望》的最新技术,有效的将加密流量和明文流量区分开,并对任何加密流量给予屏蔽。例如,OpenVPN 的协商会被刺探出来,并被连接重置。我的一台服务器 IP 还因为多次连接被彻底封死。
不过所幸的是,Tor 项目今年刚刚推出了一个叫做 obfsproxy 的试验性项目,可以将加密流量进行混淆,变为看上去像明文的流量,从而干扰网络流量分类系统的正常运转。
本文假设你是一个 OpenVPN 服务器的管理员,具有相当的 OpenVPN 架设经验。我不会将所有的步骤和命令一条一条写出来。
前言
优缺点
优点
- 无需更换 VPN 协议,无需大幅度改动配置
- 支持 Windows, Linux/Mac/Unix
- 已被移植到 Android 平台(请放置在 /system/xbin 中)
- 可以运行在 Openwrt 路由器或树莓派上
缺点
- obfsproxy 没有 iOS 客户端,故不支持,但可以在其他机器上运行 obfsproxy 客户端
- obfsproxy 需要 root 权限才能放在 Android 的 /system/xbin 目录中,而 busybox 同样需要 root 权限;Android 平台原生的 OpenVPN 客户端和 obfsproxy 一起使用会出现问题,因此需要使用传统的需要 root 权限的 OpenVPN
假设
- 服务端 IP: 106.164.32.213
- VPN 服务端监听端口: 1194
- obfsproxy 服务端监听端口: 3389
- obfsproxy 客户端监听端口: 1984
请将后文中出现的 IP 和端口替换为你自己的。
调整 OpenVPN 服务端配置
没有什么好配置的,只需要简单修改一下 server.conf 就行了:
local 127.0.0.1
# obfsproxy 不支持 UDP
proto tcp
配置 obfsproxy 服务端
首先,通过各种方法安装好 obfsproxy。接着在 screen 或 nohup 中运行:
obfsproxy obfs2 --dest=127.0.0.1:1194 server 0.0.0.0:3389
之后让防火墙放行 3389 端口。至此,服务器端位置完毕。
调整 OpenVPN 客户端配置
客户端的配置文件也不需要进行大改动,改动只有:
remote 127.0.0.1 1984
route 106.164.32.213 255.255.255.255 net_gateway
配置 obfsproxy 客户端
首先,依然是通过各种方法安装好 obfsproxy,接着在 screen 或 nohup 中运行:
obfsproxy obfs2 --dest=106.164.32.213:3389 client 127.0.0.1:1984
Android 需要终端模拟器和 busybox 才可以进行。至此,所有配置全部完成,启动连接 VPN 看看效果如何吧。
P.S
我的 VPN 也因此复活了,使用我 VPN 的人可以私下询问 VPN 的新参数。
2016年08月01日 — 17:23
唔,,现在obfsproxy已经安装好了,但是发现客户端无法正常连接(如果不运行obfsproxy,仅仅开openvpn是可以正常连接的),提示
Socket Buffers: R=[8192->8192] S=[8192->8192]
Attempting to establish TCP connection with [AF_INET]127.0.0.1:10194 [nonblock]
MANAGEMENT: >STATE:1470018928,TCP_CONNECT,,,
TCP connection established with [AF_INET]127.0.0.1:10194
recv_socks_reply: Socks proxy returned bad reply
SIGUSR1[soft,init_instance] received, process restarting
MANAGEMENT: >STATE:1470018928,RECONNECTING,init_instance,,
Restart pause, 5 second(s)
好像obfsproxy是基于tcp的,但是我之前按照示例配置是udp的,不知道是不是这个原因
但是我换成udp协议,还是不行,提示
TCPv4_CLIENT link local: [undef]
TCPv4_CLIENT link remote: [AF_INET]127.0.0.1:10194
我已经把防护墙全部关了,还是不行,说明应该是配置的问题,但是接触VPN才几天,有些地方不是太懂,希望博主帮忙指教一下
P.S:我在openvpn的论坛上也问了问题,那个地方更详细,如果博主有空的话麻烦帮忙看看吧,没有空的话我就在回复里面问
网址是这里
多谢博主了。
2016年08月07日 — 18:02
此文章早已过时,已经不具备任何参考价值,请不要再尝试了。
2016年08月09日 — 15:33
好吧,那请问博主有什么可以推荐的相关方案或者文章吗
2016年07月31日 — 12:02
请问博主,说的各种方法具体是指什么呢,我现在在openwrt上面(server端)安装了obfsproxy的包,但是在xp上(client端)没找到合适的,只能通过pip装,但是pip装出来的东西和那个版本对不上,然后运行的参数有点问题好像
2014年09月26日 — 13:53
@zydxt
重新配置了一下iptables。结果成功了。但是还是很慢。是IPv6国际出口受限的原因?
2014年09月25日 — 15:00
你好,请问如果是IPv6下应该怎么设置呢?
sever端:
obfsproxy obfs3 –dest=[::1]:2729 server [::]:21194
server.conf
local ::1
port 2729
proto tcp6
client端:
obfsproxy.exe obfs3 –dest=[VPS v6 地址]:21194 client [::1]:2729
openvpn:
remote ::1 2729
iptables则是:
iptables -P FORWARD ACCEPT
iptables -A FORWARD -m state –state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -j SNAT –to vps地址
以上设置后可以成功连接vpn,但是还是不能上网。
那么是哪里的问题呢?我的少了route那行,但是ipv6下这行要怎么写呢?还有iptables也可能有问题,但是不知道出在哪里。
2014年08月06日 — 15:55
我在终端里面起了obfs,命令:obfsproxy obfs3 –dest=127.0.0.1:5555 server 0.0.0.0:5556,但是当我shadowsocks有请求发现的同时,没看见obfs下有任何请求,请问这正常吗?
2014年08月18日 — 01:59
obfs 在普通模式下不打印日志,打印日志请使用 verbose。
2014年07月23日 — 13:38
vpn搭建太复杂了,直接ssh+obfsproxy就足够了,电脑上面设置起来很简单
andorid手机上面直接把obfsproxy的android版本copy到 /system/bin目录下
android终端启动好obfsproxy的client然后用fqrouter的ssh功能连接~~ 完美翻墙~~~
当然可以配合ssh的密钥登陆:直接复制私钥adb push ~/.ssh/id_rsa /sdcard/127.0.0.1 这里的127.0.0.1是私钥名字不是目录名… fqrouter上面的密码留空即可
2014年07月25日 — 06:54
obfsproxy 用 Python 重写了,而且 obfs2 已经能检测到了,现在都用 obfs3,所以 Android 想使用有点难度,设备上必须要完整 Python。
SSH 性能太差了,我现在用的是 shadowsocks-libev.
2013年02月25日 — 20:08
支持一下先,哈~~
2013年02月10日 — 00:47
😆 不知道怎么点到了博主的地盘上。 祝新年快乐啊!
竟然咱两用的同一款主题.
2013年02月12日 — 17:33
哈哈,Happy Python Year! 我的主题是 GPL 的,一样很正常。我这个主题我做过一些修改的……
不过主题 Philna 的博客从前年就不再更新,后来域名过期,彻底不存在了,不会是猝死了吧 🙁