---
layout: post
title: wssocks的简单评测
tags: [wssocks, 代理, 评测]
---

  一堆花里胡哨的梯子会不会是障眼法？<!--more-->    
  
# 起因
  最近我手头能用的梯子真的是越来越少了，除了防火墙越来越高的原因之外，也可能和大家对专业机场的信任导致免费的梯子越来越少了 ~~（毕竟我在网络上只用免费的东西lol）~~ 。所以我想着应该用手头的资源赶紧整点梯子用，不然以后可能就真连不上国际互联网了。   
  对于怎么搭梯子，我以前也有很多经验，像我之前也发过[网络任意互联指南](/2021/05/07/ssh.html)以及[不依赖代理连被Ban网站的方法](/2019/04/27/antiban.html)之类的文章，不过在我实际运用的时候还是会发现有些问题，比如之前我用SSH隧道，确实很好用，手机上也能找到可以连接的软件，要说问题确实也没啥问题，只是感觉速度不太行？其实我个人觉得SSH隧道挺好用的，不过我目前手头没有合适的直连的主机，所以不太方便用。   
  其实我也是想多做一些测试，想多试试看怎么样可以避免被防火墙检测，另外就是我一般都是做IP已经被Ban的假设（主要是不太希望IP暴露，可以参考[这篇](/2021/04/18/hide.html)文章），所以会想着用比如说Cloudflare的办法。所以会考虑这个代理软件应该支持TLS+Websocket。目前我看比较主流支持这个方案的基本上就是[v2ray](https://github.com/v2fly/v2ray-core)或者是[Trojan-Go](https://github.com/p4gefau1t/trojan-go)之类的……不过我想如果说我直接用TLS+Websocket+socks5那不是啥问题都解决了嘛，毕竟目前来说无论啥隧道，都不如TLS稳当。一开始我想着是自己用Python写一个（其实Python也有人写，我后来搜了一下有个叫[websocks](https://github.com/abersheeran/websocks)的项目和我的想法有点像），不过考虑到还是别重复造轮子了就上网搜了一下，结果还真有人用Go写了一个，就是今天要讲的[wssocks](https://github.com/genshen/wssocks)。   
  其实相似的项目好像还挺多，后来我又搜了搜，还有比如[wstunnel](https://github.com/erebe/wstunnel)（这个看起来用的是啥Haskell语言，我都没听说过）和[wsSocks](https://github.com/Mikubill/wsSocks)也都是类似的项目，看来大家的想法都差不多，另外wssocks貌似还不是专门穿透防火长城用的，看介绍好像是他用来穿透他们学校USTB的防火墙用的。
  
# 使用评测
## 配置
  其实这个软件主要吸引我的除了很符合我想要的TLS+Websocket+socks5之外，主要是配置简单，参数少，看起来舒服，现在那些乱七八糟的代理软件搞一大堆乱七八糟的功能，看半天不知道哪个是干啥的，还有就是那个什么原创协议，比如vmess，我是真搞不明白那原创协议到底有啥用，配置也复杂，整那么复杂也不过是增加了容易被检测的特征。而且最主要的是无论啥协议，最终到客户端不还得用Socks5或者是http代理，不如一开始就整Socks5多方便。   
  wssocks的使用非常简单，服务端的话我用的是以下命令：
```
./wssocks-linux-amd64 server --addr :10000 --auth --auth_key <YOUR_CONNECTION_KEY> --ws_base_path <YOUR_BASE_PATH>
```
  另外在服务器上为了安全起见，最好不要用root权限启动（毕竟是冷门的项目有可能会有未知的漏洞），所以我实际会用以下命令：   
```
chroot --userspec=99:99 / /wssocks-linux-amd64 server --addr :10000 --auth --auth_key <YOUR_CONNECTION_KEY> --ws_base_path <YOUR_BASE_PATH>
```
  为了方便使用Cloudflare（其实主要是我这服务器还有别的网站），所以配置了一下Nginx（参见[wssocks#11](https://github.com/genshen/wssocks/issues/11#issuecomment-669324542)）：
```
server {
  listen     0.0.0.0:443 ssl;
  listen     [::]:443 ssl;
  server_name  proxy.example.com;
  ssl_certificate /etc/nginx/ssl/server.crt;
  ssl_certificate_key /etc/nginx/ssl/server.key;

  location / {
    client_max_body_size 1024m;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header Host            $http_host;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
    proxy_http_version 1.1;   # wssocks v0.5.0 require HTTP 1.1 at least
    proxy_pass http://127.0.0.1:10000;
  }
}
```
  设置好Cloudflare解析之后客户端用以下命令连接：
```
wssocks-windows-amd64.exe client --addr :10808 --remote wss://proxy.example.com/<YOUR_BASE_PATH>/ --key <YOUR_CONNECTION_KEY>
```
  然后就可以用Socks5客户端连接代理并上网了，配置真的是很简单，也不用那些不太靠谱的一键脚本。另外它也支持HTTP代理，这样就算没有Socks5客户端也可以用系统代理，倒是挺方便的。不过我因为用的Proxifier所以不用HTTP代理，另外我也非常不推荐大家用系统代理，因为有的时候有些网站会利用WebRTC协议绕过系统代理，获得用户的真实IP，当然如果说用梯子单纯只是想上个外网那当我没说，毕竟那种人就是直接开着PAC，就没打算隐藏自己的IP。   
## 效果
  我设置了Cloudflare解析之后试着连接了一下，连确实能连上，网页也勉强能打得开，但就是速度极其的慢，可能还不到1Mbps的样子，而且时不时会丢包。我寻思这个方案按理来说应该是不可能被检测啊，难不成Cloudflare一检测到长连接就会被干吗？我实在是搞不清，另外我也试了试不通过Cloudflare，直接走公网IP的效果，这个倒是还行，和v2ray的速度差不多，看来还是线路的问题。   
  不过我后来又换了一些网络，以及在不同时间又测试了一下，其实可能只是某些运营商针对Cloudflare，我换了网络之后速度还不错，另外也可以试试[CloudflareSpeedTest](https://github.com/XIU2/CloudflareSpeedTest)选择更快的节点。   
  另外其实v2ray可能也有一些优势，我后来在同一台服务器上测了v2ray tcp vmess的效果和wssocks比较，v2ray速度好像更快些。

# 感想
  我用wssocks其实也只是想验证我的一些想法，像HTTPS和SSH都是非常常见的协议，防火长城不可能在包着一层加密的情况下猜里面走的到底是不是正常的流量，我觉得这种事情不难想象吧，但是目前用来反检测的代理软件我也不知道他们想干嘛，就喜欢整一堆原创协议，不知道是想证明什么，而且配置也很复杂，一堆乱七八糟的配置一般人能用到哪些？所以我才怀疑会不会是有人刻意通过设计这堆莫名其妙的东西提高制作代理的成本，而且偷偷整点特征就是为了多Ban一些IP？这个我是真的不太能理解……   
  当然也不是说那些代理软件毫无意义，这个wssocks性能上还是有点问题，我打算回头有时间再试试Trojan-Go。   
  不过在这次实验看来，用什么协议还是什么软件其实不怎么重要，这些乱七八糟的软件也就是我们这些自己租的国外主机拿来玩玩，真正的机场还是专业，都是各种各样的神奇线路，像CN2 GIA都是过时的东西，现在都流行的是什么IPLC，直接就整一个物理上的私有线路，那种高级东西我们这种人确实整不来，而且自己一个人用也太贵了，机场都是通过租给一堆人用来平摊成本的，毕竟这种就是边际成本很低的东西，也只有机场能搞。   
  看来，在连接国际网络的路上，除了技术问题，还要警惕可能存在的社工专家。
