深刻理解 shadowsocks simple-obfs 流量混淆插件工作原理

🍄 nginx 成为翻墙服务端的前台

要正确配置好 simple-obfs 的前提是深刻理解其工作原理

要深刻理解流量混淆插件的工作原理,前提是对 nginx 在其中起到的作用有正确的认识

在没有启用 imple-obfs前,shadowsocks 服务端 ss-server 站在前台和客户端:ss-local ss-redir ss-tunnel 直接交换数据,于是 ss-server 就有可能暴露,被白脸认出来

启用 simple-obfs 流量混淆插件后,翻墙服务端应该分成二部分:

  • 翻墙服务端前台 nginx
  • 翻墙服务端后台 obfs-server 和 ss-server

看到了吗,nginx 成了翻墙服务端的重要组成部分,明白了这点,你就可能明白了大半

翻墙服务端暴露在外的是 nginx ,众所周知,nginx 是提供 http https服务的,走的是 TCP 协议,外部只可能看到 nginx,不可能看到后面的 ss-server 和 obfs-server,正是因为这样,从理论上来说,提高了翻墙的安全性

🐰 翻墙数据交流程

于是我们很容易就得到翻墙数据交流的流程

  • nginx 在前台和翻墙客户端交换数据
  • 在服务端内部,nginx 和 simple-obfs 服务端 obfs-server 交换数据
  • 数据混淆服务端 obfs-server 和加密服务端 ss-server 交换数据

🐹 谁在监听什么端口

我们设置了 "server_port": 1098 这个 1098 端口是谁在监听的呢

nginx 对外提供 http 服务,默认监听的是 TCP/80 端口

nginx 接收到外部数据,如果是反向代理的数据,就把数据传递给 "server_port": 1098,nginx 并不关心谁在 TCP/1098 接收数据

这个 1098 端口是 obfs-server 在监听的,也就是交由 obfs-server 来处理数据

obfs-server 一个人完成不了处理数据的任务,还要和 ss-server 合作,ss-server 会在一个随机的 TCP 端口和 obfs-server 交换数据

🍣 obfs=http 是什么意思

不能理解成只有访问类似 http://kige.com 这样的网站才混淆,实际上不管你访问的是 http 还是 https,流量都加密并混淆,只不过白脸看到的可能是http流量

🏀 simple-obfs 只混淆 TCP 数据吗

问:听说 shadowsocks 的 simple-obfs 流量混淆插件只是混淆 TCP 数据,不混淆UDP数据

为什么?

答:不用问得那么清楚吧,有的时候朦胧一点不是更好吗:)

obfs-server 处理的数据来自 nginx TCP/80 端口接收到的数据,决定权在大哥 nginx 那里,obfs-server 就是想要接收 UDP 数据,也要大哥点头才行呢

🐠 如果客户端需要 UDP 协议进行 DNS 查询,又该如何是好

如果客户端需要 UDP 查询 DNS,可以使用 dns-forwarder 将其转换为TCP查询。如果要从UDP传递数据,可以使用不同的本地代理例如kcptun,或者直接利用 simple-obfs 承载openvpn 数据

🐡 客户端能不能将 DNS 查询请求通过 UDP 发送到服务端,由服务端进行查询

shadowsocks-libev 服务端启用 simple-obfs 插件后,默认服务端工作在 TCP 协议

如果需要 ss-server 接收 UDP数据,可以在 config.json 中加入

"mode": "tcp_and_udp"

这个选项目前只能用于配置文件 config.json 方式启动 ss-server

当你指定了 "mode": "tcp_and_udp" 后,ss-server 也会监听、处理 UDP 数据

相关资源:

results matching ""

    No results matching ""