比尔盖子 博客

反网络流量分类技术

伊朗今年初升级了其防火墙系统,使用了基于论文《网络流量分类研究进展与展望》的最新技术,有效的将加密流量和明文流量区分开,并对任何加密流量给予屏蔽。例如,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。接着在 screennohup 中运行:

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,接着在 screennohup 中运行:

obfsproxy obfs2 --dest=106.164.32.213:3389 client 127.0.0.1:1984

Android 需要终端模拟器和 busybox 才可以进行。至此,所有配置全部完成,启动连接 VPN 看看效果如何吧。

P.S

我的 VPN 也因此复活了,使用我 VPN 的人可以私下询问 VPN 的新参数。

Categories: GFW, IT生活

树莓派搭建 PPPOE 无线路由器 » « 迁移到 ZFS

13 Comments

  1. 唔,,现在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的论坛上也问了问题,那个地方更详细,如果博主有空的话麻烦帮忙看看吧,没有空的话我就在回复里面问
    网址是这里

    多谢博主了。

  2. 请问博主,说的各种方法具体是指什么呢,我现在在openwrt上面(server端)安装了obfsproxy的包,但是在xp上(client端)没找到合适的,只能通过pip装,但是pip装出来的东西和那个版本对不上,然后运行的参数有点问题好像

  3. @zydxt
    重新配置了一下iptables。结果成功了。但是还是很慢。是IPv6国际出口受限的原因?

  4. 你好,请问如果是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也可能有问题,但是不知道出在哪里。

  5. 我在终端里面起了obfs,命令:obfsproxy obfs3 –dest=127.0.0.1:5555 server 0.0.0.0:5556,但是当我shadowsocks有请求发现的同时,没看见obfs下有任何请求,请问这正常吗?

  6. 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上面的密码留空即可

    • obfsproxy 用 Python 重写了,而且 obfs2 已经能检测到了,现在都用 obfs3,所以 Android 想使用有点难度,设备上必须要完整 Python。

      SSH 性能太差了,我现在用的是 shadowsocks-libev.

  7. 支持一下先,哈~~

  8. 😆 不知道怎么点到了博主的地盘上。 祝新年快乐啊!
    竟然咱两用的同一款主题.

    • 哈哈,Happy Python Year! 我的主题是 GPL 的,一样很正常。我这个主题我做过一些修改的……

      不过主题 Philna 的博客从前年就不再更新,后来域名过期,彻底不存在了,不会是猝死了吧 🙁

发表评论

Your email address will not be published.

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax

Copyright © 2017 比尔盖子 博客

匿名浏览:http://x4wttqqrkud5pttgqlpxgevtr4rbqpa6lkwdiw3o3m6q4deeldgq.b32.i2p
警告:残留有明网混合资源,访问前请自行屏蔽明网流量

Theme by Anders NorenUp ↑