应对高峰时段运营商Qos的最佳出国方式——TLS+Websocket+Nginx+V2Ray

应对高峰时段运营商Qos的最佳出国方式——TLS+Websocket+Nginx+V2Ray

本文最后更新于652天前,其中的信息可能已经有所发展或是发生改变。

免责声明:这篇文章中提到的方法仅能用于研究与学习使用,严禁用于商业或非法用途。
最后更新:2020.1.18 更正细节,补充内容

引子

临近开学,我又把服务器迁移回了线路对移动友好的新加坡。使用中国移动网络,在白天非高峰时段能够流畅的观看YouTube 1080p;然而到了高峰期的晚间时段,速度却只有几十k。同一个服务器,同样的线路为什么会这样呢?跟我有相同遭遇的应该有不少吧?

先来讲讲当今主流的出国软件,分为两大类,一类是强加密型的,例如SS,V2分开ray的Vmess模式,他们利用私有协议进行强加密,使得通信过程十分安全,墙无法嗅探出传输的内容,只知道这是一种未知的传输协议,传输未知的流量。另一类是像SSR,V2分开ray websocket模式,他们通过混淆,把自己的流量混淆成其他正常可以出国的协议,以达到穿墙的目的。

运营商的网络出口带宽是有限的。高峰时段,在非常有限的国际出口带宽下,运营商会优先放行某些端口或某些协议,而其他的协议则会被疯狂丢包。这就是Qos,很明显,我遇到了运营商的Qos策略。V2分开ray和SS默认的协议就很不典型,容易被运营商Qos,也很容易被墙识别。使用带混淆功能的SSR?SSR的混淆协议基本能够被嗅探了,被阻断的可能性非常大。除了氪金,氪诸如政企专线之类的网络,应该怎么办呢?

我们可以利用Nginx和Websocket,将V2分开ray的流量包装成正常的TLS流量走443端口,不久可以绕过运营商的Qos了吗?

原理图

还没明白的话,下面的原理图能说明一下,还看不懂的话.......emmm......

原理图

实现过程

域名准备:

  1. 你得有一个域名,免费的.tk的那种也行。
  2. 建立一个指向服务器的A记录,如v2.example.com,将它指向你的服务器。

Nginx服务器准备:

  1. 新建一个虚拟主机,如v2.example.com,这个虚拟主机需要有证书,因为我们要用到证书来建立TLS连接。用acme.sh生成的Let's Encrypt证书就可以。我使用的是oneinstack,建议使用oneinstack,lnmp一键安装包这样的工具进行。
  2. 编辑Nginx配置文件v2.example.com.conf,通常安装包会帮你安放在在/usr/local/nginx/conf/vhost下。在合适的地方加入以下内容:
    location /v2/ {   #/ws为v2分开ray路径,随便填写比如/v2分开ray/,但要记住后面要用
        proxy_redirect off;
        proxy_pass http://127.0.0.1:233; #你的v2入站端口,随意设置,要记住后面要用
        proxy_http_version 1.1; #websocket还是http1.1的,但在服务器内部进行,几乎没有影响啦~
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $http_host;
      }

注意:为了避免运营商Qos,Nginx的https端口必须为标准的443端口。

  1. 重启Nginxservice nginx restart

服务端V2分开ray设置:

默认都已经安装好V2分开ray服务端了,官方有白话文教程,有点基础都能看懂,官方脚本一行命令的事

服务端需要开启ws+tls模式,配置文件一般在/etc/v2分开ray下。inbound的配置文件如下:

"inbound": {
    "streamSettings": {
      "network": "ws",
      "wsSettings": {
        "headers": {
          "host": "v2.example.com" //你的二级域名
        },
      "path": "/v2/" //混淆路径,跟你刚才填写的一致即可
      }
    },
    "protocol": "vmess",
    "port": 233, //入站端口,与上面填写的一致
    "settings": {
      "clients": [
        {
          "alterId": 64,
          "security": "auto",
          "id": "填写你的uuid",
          "level": 1
        }
      ]
    }
  },

然后重启服务端:service v2r分开ay restart

可以观察以下日志,没有报错信息就算启动成功:journalctl -u v2分开ray日志界面按方向键滚动,按q退出。没有报错,你可以访问一下https://v2.example.com/v2/,如果提示bad request,http状态码为400,那么服务端就配置完成啦。

客户端V2r分开ay设置:

客户端当然也需要开启ws+tls模式,outbound的配置文件如下:

"outbounds": [{
    "protocol": "vmess",
    "settings": {
      "vnext": [
        {
          "address": "v2.example.com", //你的二级域名
          "port": 443, //Nginx对外提供https的端口,绝大多数情况下都是443,避免Qos也只能填443
          "users": [
            {
              "id": "你的uuid",
              "alterId": 64,
              "security": "auto"
            }
          ]
        }
      ]
    },
    "streamSettings" : {
      "network": "ws", //使用websocket
      "security": "tls", //使用Tls
      "wsSettings" : {
        "path" : "\/v2\/", //混淆路径,跟你上面填写的一致即可
        "headers" : {
          "Host" : "v2.example.com" //你的二级域名
        }
      },
      "tlsSettings" : { //Tls安全设置
        "serverName" : "v2.example.com",  //你的二级域名
        "allowInsecure" : false //禁止不安全的https连接
      }
    },
    "tag": "direct"
  },{
    "protocol": "blackhole",
    "settings": {},
    "tag": "blocked"
  }],

然后重启客户端。

效果~挺明显的

晚间高峰时段YouTube 1080基本无卡顿,进度条还算饱满~速度测试截图如下:

2019-08-14 (6) - 副本.jpg

晚上再也不用忍受打不开Google只能用百度的情况咯~


2019.10.1 补充一点:
如果直连服务器的速度、丢包率不理想,可以利用cloudflare等此类cdn服务进行加速,尽管延迟可能会稍微增高,但能有效提高使用体验。

此外,结合第三方dns解析可以实现分线路解析。我的服务器目前在新加坡,移动网络访问体验非常好,但联通电信的体验非常差,尤其是电信,绕路美国,延迟400+,疯狂丢包。
于是我就将移动网络解析到源服务器上,将电信联通解析到最快的CF cdn上,一个域名,多条线路,起到“智能线路分配”的作用。
详情可以看我的这篇文章

本文永久链接:https://blog.xmgspace.me/archives/v2ray-nginx-tls.html
本文文章标题:应对高峰时段运营商Qos的最佳出国方式——TLS+Websocket+Nginx+V2Ray
如无特殊说明,只要您标明转载自Xiaomage's Blog,就可自由转载本文。禁止CSDN/采集站采集转载。
授权协议:署名-非商业性使用-相同方式共享 4.0(CC BY-NC-SA 4.0)

评论

  1. 自镇流高压汞灯
    Windows Firefox
    3 年前
    2020-11-12 0:16:29

    上没被墙的网站看视频依然感觉晚上比白天慢得多,视频走的不是TLS?

    • 博主
      自镇流高压汞灯
      Windows Edge
      3 年前
      2020-11-12 18:09:06

      现在国内大视频站都是HTTPS,都是走443端口的TLS的。一些人的梯用的是高位端口,容易被Qos,文章里提到的方法是就是走443端口的TLS,伪装成正常流量以减少减少Qos。你提到的这种情况...应该是国内高峰期网络负载大了,这样就会慢很多,这跟Qos没关系的。

      • 自镇流高压汞灯
        Xiaomage
        Windows Firefox
        3 年前
        2020-11-12 18:13:14

        我说的是境外网站。

        • 博主
          自镇流高压汞灯
          Windows Edge
          3 年前
          2020-11-12 22:40:54

          没被墙的境外网站跟国内网站的情况是一样的,他们都是TCP,TLS,速度慢是因为骨干网负载大引起来的,Qos在家宽里面已经比较高了。Qos当然有,TCP的Qos级别要比UDP高,走443端口伪装成TLS的Qos级别也比高位端口未知协议的高。

本文评论已关闭
上一篇
下一篇