使用ScrambleSuit伪装OpenVPN流量
最近有朋友回国用VPN发现OpenVPN很不稳定,之前我的OpenVPN是加了obfs3的,现在看来墙又修高了。于是决定在obfs4出来之前用强度更高的ScrambleSuit对付下。
Scramblesuit是由瑞典的Karlstad大学开发的一个用于应对DPI(Deep Packet Inspection,深度包检测)的一个模糊协议,能够对抗对于包特征的检测,细节可以参考这篇论文:http://www.cs.kau.se/philwint/pdf/wpes2013.pdf
Tor在14年2月整合了scramblesuit到他们的obfsproxy,主要是用于掩盖节点到bridge之间的通讯,但是obfsproxy本身也可以作为一个Socks5的代理给OpenVPN使用,方法和之前使用obfs3模糊OpenVPN差不多,仅需要修改部分参数。
服务器端使用的是obfsproxy 0.2.12,Ubuntu在vivid里面可以下到,但是需要0.0.6以上版本的python-pyptlib,同时要安装libyaml-0-2
和python-yaml
。安装完成之后首先需要生成一个base64的密钥,使用generate_password.py
脚本: (转自GitHub)
#!/usr/bin/env python
"""
This script generates shared secrets which can be used for ScrambleSuit.
Simply add the output of this script to your bridge's torrc.
"""
import os
import base64
sharedSecret = base64.b32encode(os.urandom(20))
print sharedSecret
可以多执行几次,复制生成的密钥,存到某个文件(每行一个),最好只有root能读
然后以如下命令启动obfsproxy:
/usr/bin/obfsproxy --data-dir=/tmp/scramblesuit-server scramblesuit --password-file=Your_Passfile --dest=127.0.0.1:OpenVPN_Port server 0.0.0.0:Server_Socks_Port
scramblesuit需要一个临时文件夹用于存放yaml ticket,所以需要指定data dir。OpenVPN_Port
对应OpenVPN的监听地址,Server_Socks_Port
对应服务器对外开放的Socks5地址。
Windows的客户端可以从Tor Browser Bundle里面提取obfsproxy,客户端获取密钥文件之后用以下命令启动:
obfsproxy --data-dir=%TEMP%scramblesuit-client scramblesuit --password-file=Your_Passfile --dest=Server_IP_Addr:Server_Socks_Port socks 127.0.0.1:Local_Socks_Port
然后修改OpenVPN的客户端配置指定Socks代理到127.0.0.1:Local_Socks_Port。
Windows的客户端可以通过nssm把obfsproxy安装成服务,这样开机自动启动并且也没有console在桌面上了。(Windows的obfsproxy貌似不能放到后台?)