对付高峰时段运营商Qos的最佳翻墙方式——TLS+Websocket+Nginx+V2ray

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

引子

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

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

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

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

原理图

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

对付高峰时段运营商Qos的最佳翻墙方式——TLS+Websocket+Nginx+V2ray

实现过程

域名准备:

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

Nginx服务器准备:

  1. 新建一个虚拟主机,如v2ray.example.com,这个虚拟主机需要有证书,因为我们要用到证书来建立TLS连接。用acme.sh生成的Let's Encrypt证书就可以。我使用的是oneinstack,建议使用oneinstack,lnmp一键安装包这样的工具进行。
  2. 编辑Nginx配置文件v2ray.example.com.conf,通常安装包会帮你安放在在/usr/local/nginx/conf/vhost下。在合适的地方加入以下内容:

    location /v2ray/ {   #/ws为v2ray路径,随便填写比如/v2ray/,但要记住后面要用
        proxy_redirect off;
        proxy_pass http://127.0.0.1:233; #你的v2ray入站端口,随意设置,要记住后面要用
        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

服务端V2ray设置:

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

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

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

然后重启服务端:service v2ray restart

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

客户端V2ray设置:

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

"outbounds": [{
    "protocol": "vmess",
    "settings": {
      "vnext": [
        {
          "address": "v2ray.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" : "\/v2ray\/", //混淆路径,跟你上面填写的一致即可
        "headers" : {
          "Host" : "v2ray.example.com" //你的二级域名
        }
      },
      "tlsSettings" : { //Tls安全设置
        "serverName" : "v2ray.example.com",  //你的二级域名
        "allowInsecure" : false //禁止不安全的https连接
      }
    },
    "tag": "direct"
  },{
    "protocol": "blackhole",
    "settings": {},
    "tag": "blocked"
  }],

然后重启客户端。

效果~挺明显的

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

对付高峰时段运营商Qos的最佳翻墙方式——TLS+Websocket+Nginx+V2ray

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


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

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

~~End Of File~~

本文永久链接:https://blog.xmgspace.me/archives/v2ray-nginx-tls.html

本文文章标题:对付高峰时段运营商Qos的最佳翻墙方式——TLS+Websocket+Nginx+V2ray

本站欢迎转载与引用~但您需要注明文章标题与链接,并表明转载/引用自Xiaomage's Blog。

授权协议:署名-非商业性使用-相同方式共享 4.0 国际(CC BY 4.0)

标签:Nginx , 服务器 , V2ray

还没有人评论哦,还不快抢沙发~

添加新评论

i_f01.pngi_f02.pngi_f03.pngi_f04.pngi_f05.pngi_f06.pngi_f07.pngi_f08.pngi_f09.pngi_f10.pngi_f11.pngi_f12.pngi_f13.pngi_f14.pngi_f15.pngi_f16.pngi_f17.pngi_f18.pngi_f19.pngi_f20.pngi_f21.pngi_f22.pngi_f23.pngi_f24.pngi_f25.pngi_f26.pngi_f27.pngi_f28.pngi_f29.pngi_f30.pngi_f31.pngi_f32.pngi_f33.png