2018 年新年梯子大风暴之 V2ray 新平台搭建

今年新年感情好,大年三十过年了来一场大暴雨,倒了几棵乘凉大树然后就过去了?觉得假想敌没什么能耐了?那是人家准备台风呢,这回大台风刮过来了,认怂吧


本实例采取 V2ray+CloudFlare+Nginx+WebSocket+TLS 方式构成,食用前请遵循说明。


1、前言

今年台风超级大,刮飞了无数的梯子,连带很多大树都一起倒了。

由本人目前来看,台风原因是新华网于 2018 年 02 月 25 日 17 时 29 分 54 秒发布的内容,核心风力可震动世界。而本次台风还采取了连根拔起的方式,所以提前准备好避风所真的很重要。

关于主要特征,传言为 SSR 的 TLS 被识别,SS 的 OTA 被识别,连带台风准备了主动探测,炮火溅射,导致此次效果拔群。

于是只好开启 V2ray 的新道路了,至于这条路怎么样,试着走下去吧。

2、准备

V2RAY 官网:https://www.v2ray.com/

V2RAY 的初级部署,仅 Vmess 方式,在这里就不多重复了,可以到官网详细查看

本次部署采用 V2ray+Nginx+CloudFlare+WwebSocket+TLS 方式,所以准备资源略多,但是效果显著,可以利用 CDN 让被墙的服务器 10% 血量复活。

提前准备的内容有:一个 CloudFlare 挂靠的域名(和这个域名的证书),一个 VPS 主机(已经安装好 Nginx),一个 V2ray 的本地安装包(本次为 Linux64 位)

域名获取证书的途径,可以参照本站文章 点击查看

Nginx 安装,可以参照本站文章  点击查看

关于安装包可以到我的站点下载:下载点 1  或者 下载点 2


3、开始

3.1、安装 V2ray

sudo yum install -y wget unzip
sudo su
sudo bash <(curl -L -s https://install.direct/go.sh)

输入完上述命令即可自动安装(参照官方的安装方式)

yum install -y wget unzip
wget https://downloads.starryvoid.com/link/tools/v2ray/v2ray-V3.16-Linux-x64.zip && wget https://install.direct/go.sh && chmod +x go.sh && ./go.sh --local v2ray-V3.16-Linux-x64.zip

上述命令是本站,但是如果官方命令不好用则你可以用本站的命令(安装版本为 V3.16)

原因主要在于,github 境内下载不下来文件,以及官方命令完全没反应。Daemon 默认应该在 Centos 中所以不安装。


3.2、配置 V2ray 服务端

"inbound": {
  "port": 8963,
  "listen":"127.0.0.1",
  "protocol": "vmess",
  "settings": {
    "clients": [
      {
      "id": "UUID",
      "level": 1,
      "alterId": 64,
      "email": "user1"
      },
      {
      "id": "UUID",
      "level": 1,
      "alterId": 64,
      "email": "user2"
    }]
  },
  "streamSettings": {
    "network": "ws",
    "wsSettings": {
      "path": "/word/"
    }
  }
},

仿造上方格式,修改配置文件。

主要修改内容有两处,一处 "listen":"127.0.0.1", 一处"streamSettings": {"network": "ws","streamSettings": {"network": "ws","wsSettings": {"path": "/word/"}}}。修改请注意换行要符合 json 格式。

localtion 后面的 /word/ 要和服务端中的 “wsSettings”: {“path”: “/word/”} 对应。
proxy_pass http://127.0.0.1:8963; 中的 8963 要和服务端中的  “inbound”: {“port”: 8963 } 对应。
server_name 中的 your.domain.name 为你本次使用的域名,要和客户端 address 以及 serverName 对应。

其中 email 随意,仅作为此 UUID 的备注。Level 和 AlterID 请参照官方 WIKI。


3.3、修改 Nginx 配置

server {
  listen 443 ssl;
  ssl_certificate /etc/letsencrypt/live/your.domain.name/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/your.domain.name/privkey.pem;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers HIGH:!aNULL:!MD5;
  server_name your.domain.name;
  root /web/proxy;

location /word/ {
  proxy_redirect off;
  proxy_pass http://127.0.0.1:8963;
  proxy_http_version 1.1;
  proxy_set_header Upgrade $http_upgrade;
  proxy_set_header Connection "upgrade";
  proxy_set_header Host $http_host;
  proxy_intercept_errors on;
  }

error_page 400 404 /404.html;
 location = /404.html {
 }
}

直接创建一个配置,如上为跳过 Cloudflare 的直连 WS+TLS 配置。
实际上,如果使用了 Cloudflare 的时候,不需要指定协议版本等额外配置。
如果可以的话,添加一个 location / {} 并在里面指定一下网站文件,可以伪装。

配置文件如何被 Nginx 调用在此不赘述。
SSL 证书地址为 Letsencrypt 生成的证书地址。
proxy_intercept_errors on; 是为了伪装,此命令会将代理的错误同步到 nginx 的错误代码 400 的页面中。

localtion 后面的 /word/ 要和服务端中的 “wsSettings”: {“path”: “/word/”} 对应。
proxy_pass http://127.0.0.1:8963; 中的 8963 要和服务端中的  “inbound”: {“port”: 8963 } 对应。
server_name 中的 your.domain.name 为你本次使用的域名,要和客户端 address 以及 serverName 对应。

添加一个 root 主要防止默认页面展示出去,同时最好这个文件夹创建后保持空文件夹或者做一个 index.html 伪造。
其他都是普通配置,可从官方 wiki 查阅。


3.4、配置 V2ray 客户端

客户端部分比较简单,仅仅修改几处即可,Core 使用者仿造下面修改 config 配置文件

"outbound": {
  "protocol": "vmess",
  "settings": {
    "vnext": [{
      "address": "your.domain.name",
      "port": 443,
      "users": [{
        "id": "UUID",
        "alterId": 64
      }]
    }]
  },
  "streamSettings": {
    "network": "ws",
    "security": "tls",
    "wsSettings": {
      "path": "/word/"
    }
  },
},

其中此配置文件没有加密方式和伪装类型。

而 GUI 界面的客户端使用者需要填以下内容

地址 your.domain.name
端口 443
用户 ID  UUID
AlterID  64
加密方式  客户端控制
传输协议  ws
伪装类型  客户端控制
伪装域名  /word/
底层传输  tls

其中客户端控制意思为,此选项不影响服务器,以及用户怎么设置此选项都可以。

在这里粘贴一份 V2rayN 对于 V2ray 自动生成的完整配置。

{
  "log": {
    "access": "",
    "error": "",
    "loglevel": ""
  },
  "inbound": {
    "port": 1080,
    "listen": "0.0.0.0",
    "protocol": "socks",
    "settings": {
      "auth": "noauth",
      "udp": false,
      "ip": "127.0.0.1",
      "clients": null
    },
    "streamSettings": null
  },
  "outbound": {
    "tag": "agentout",
    "protocol": "vmess",
    "settings": {
      "vnext": [
        {
          "address": "your.domain.name",
          "port": 443,
          "users": [
            {
              "id": "uuid",
              "alterId": 64,
              "security": "aes-128-gcm"
            }
          ]
        }
      ],
      "servers": null
    },
    "streamSettings": {
      "network": "ws",
      "security": "tls",
      "tcpSettings": null,
      "kcpSettings": null,
      "wsSettings": {
        "connectionReuse": true,
        "path": "/word/",
        "headers": null
      }
    },
    "mux": {
      "enabled": true
    }
  },
  "inboundDetour": null,
  "outboundDetour": [
    {
      "protocol": "freedom",
      "settings": {
        "response": null
      },
      "tag": "direct"
    },
    {
      "protocol": "blackhole",
      "settings": {
        "response": {
          "type": "http"
        }
      },
      "tag": "blockout"
    }
  ],
  "dns": {
    "servers": [
      "8.8.8.8",
      "8.8.4.4",
      "localhost"
    ]
  },
  "routing": {
    "strategy": "rules",
    "settings": {
      "domainStrategy": "IPIfNonMatch",
      "rules": [
        {
          "type": "field",
          "port": null,
          "outboundTag": "direct",
          "ip": [
            "0.0.0.0/8",
            "10.0.0.0/8",
            "100.64.0.0/10",
            "127.0.0.0/8",
            "169.254.0.0/16",
            "172.16.0.0/12",
            "192.0.0.0/24",
            "192.0.2.0/24",
            "192.168.0.0/16",
            "198.18.0.0/15",
            "198.51.100.0/24",
            "203.0.113.0/24",
            "::1/128",
            "fc00::/7",
            "fe80::/10"
          ],
          "domain": null
        }
      ]
    }
  }
}

3.5、配置 CloudFlare

默认配置我实在记不住了,但是有几个必须要调整的,和一些可能要调整的,在这里说明

第一个是 Network 中的 Websocket,必须开启

第二个是 DNS 中的对应域名的解析,必须套用 CDN,即黄色

第三个是 Crypto 中的 Require Modern TLS,必须关闭

可能的,Crypto 中,Authenticated Origin Pulls 应该要关闭,Opportunistic Encryption 应该要关闭 具体是否有影响,不清楚。


4、测试

注意,注意,完成配置后确认无误,仍然需要等待 10-20 分钟让 CDN 反应,允许 websocket。所以期间不要着急。

数据流向为,V2 客户端 – > CDN:443 – > Nginx:443  – >  V2 服务端:8963

同时,不要使用:伪装 http 报头,加密协议为 none 或者 aes-128-cfb,开启 UDP 与 KCP。

还有,此方式存在一个小问题就是如果手动访问会出现 Bad request 现象,如果想整改可以尝试修改 Nginx 错误代码,本文教程已将代码改为 404 not found。

本人测试,使用客户端连接,套 CDN 无 Error,可访问 Google,速度大约在 500KB 左右。并且此方式突破 GFW 封锁 IP 地址,但是不排除封域名。


5、HTTP/2.0

当你认为经过 CDN 的流量实在实在太卡的时候,你可以让 Client 直链 Server,当然这个不保证还会被墙。

由于客户端现在很多人都用 GUI 界面的了,所以只贴上服务端的额外增加配置,放在 inbound 和 outbound 中间

  "inboundDetour": [{
    "port": 12345,
    "listen":"0.0.0.0",
    "protocol": "vmess",
    "settings": {
      "clients": [
        {
        "id": "UUID",
        "level": 1,
        "alterId": 64,
        "email": "user1"
        },
        {
        "id": "UUID",
        "level": 1,
        "alterId": 64,
        "email": "user2"
      }],
    "disableInsecureEncryption": true
    },
    "streamSettings": {
      "network": "h2",
      "httpSettings": {
        "path": "/h2word/"
      },
      "security": "tls",
      "tlsSettings": {
        "certificates": [{
          "certificateFile": "/etc/letsencrypt/live/your.domain.name/fullchain.pem",
          "keyFile": "/etc/letsencrypt/live/your.domain.name/privkey.pem"
        }]
      }
    }
  }],

其中 disableInsecureEncryption 代表是否禁止不安全的加密协议

配置导入正确后,需要额外开启 V2ray 专用的 https 端口(本例 12345)以供于 HTTP/2.0 使用


6、备注

梯子倒了这么多,但是仍然有 SS 存活下来,因为 SS 仍然有人更新,而 SSR 没有人更新。

V2RAY 有人更新,但是仍然需要大家的努力。

20180808:增加 HTTP/2.0 连接方式

点赞
  1. 小菜鸡说道:
    Google Chrome 66.0.3359.139 Google Chrome 66.0.3359.139 Mac OS X  10.13.4 Mac OS X 10.13.4

    大佬,请问 v2ray 现在怎么样?我的 ss 被封了,刚装了 v2ray,我去网站上看他说不建议使用 http 伪装是什么意思?

    1. StarryVoid说道:
      Google Chrome 66.0.3359.139 Google Chrome 66.0.3359.139 Windows 10 x64 Edition Windows 10 x64 Edition

      V2ray 可以使用 TLS 额外加密,http 没有加密。
      稳定好,速度慢,成本一般