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+CentOS

一套 Linux+Nginx

一个 v2ray

前提要素

cloudflare 上挂靠的域名可以正常解析

域名的证书在有效期内

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

关于 Nginx 安装与配置,可以参照本站文章  点击查看

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

关于 Cloudflare 开启 CDN 时支持的服务器端口情况 点击查看

最后文末补充了 http/2.0 方式。


3、开始

3.1、安装 V2ray

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

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

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

上述命令是本站,但是如果官方命令不好用则你可以用本站的命令(此命令安装版本为 V4.16)原因主要在于 github 在境内受网络影响文件下载缓慢。

CentOS 的服务文件在 /etc/systemd/system/v2ray.service 
查看 V2ray 服务的命令为  systemctl status v2ray -l 
重启 V2ra 服务的命令为  systemctl restart v2ray 

如果你想要删除相关文件可以使用命令

bash <(curl -L -s https://install.direct/go.sh) --remove

3.2、配置 V2ray 服务端

"inbounds": [{
  "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/"
    }
  }
}],

仿造上方格式,修改配置文件  /etc/v2ray/config.json

主要修改内容有两处,一处 "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 要和服务端中的  “inbounds”: [{“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 要和服务端中的  “inbounds”: [{“port”: 8963 }] 对应。
server_name 中的 your.domain.name 为你本次使用的域名,要和客户端 address 以及 serverName 对应。

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


3.4、配置 V2ray 客户端

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

"outbounds": [{
  "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": ""
  },
  "inbounds": [{
    "port": 1080,
    "listen": "0.0.0.0",
    "protocol": "socks",
    "settings": {
      "auth": "noauth",
      "udp": false,
      "ip": "127.0.0.1",
      "clients": null
    },
    "streamSettings": null
  }],
  "outbounds": [{
    "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": {
        "path": "/word/",
        "headers": null
      }
    },
    "mux": {
      "enabled": true
    }
  },
  {
    "protocol": "freedom",
    "settings": {
      "response": null
    },
    "tag": "direct"
  },
  {
    "protocol": "blackhole",
    "settings": {
      "response": {
        "type": "http"
      }
    },
    "tag": "blockout"
  }],
  "dns": {
    "servers": [
      "1.1.1.1",
"1.0.0.1",
"8.8.8.8", "8.8.4.4",
"101.6.6.6", "localhost" ] }, "routing": {
"rules": [
{
"type": "field",
"ip": ["geoip:private"],
"outboundTag": "blocked"
}
]
} }

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、其他配置

5.1、HTTP/2.0

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

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

{
    "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 使用


5.2、使用 Docker 运行 v2ray 实例

觉得上面的安装比较容易水表,或者说用 docker 更喜欢,你可以使用这种方式


5.2.1、安装 Docker-CE

首先我们需要卸载旧版本 docker

yum remove -y docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-selinux docker-engine-selinux docker-engine

然后我们安装 docker 运行所需要的内容

yum install -y yum-utils device-mapper-persistent-data lvm2

接着我们需要安装 docker-ce 的源

yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo

最后我们安装 docker-ce 并配置开机启动

yum install -y docker-ce
systemctl enable docker
systemctl start docker

启动后可以查看一下 docker 情况,如果看到警告则利用下面引用的内容排除警告

docker info

默认配置下,如果在 CentOS 使用 Docker CE 看到下面的这些警告信息:

WARNING: bridge-nf-call-iptables is disabled
WARNING: bridge-nf-call-ip6tables is disabled

请添加内核配置参数以启用这些功能。

sudo tee -a /etc/sysctl.conf <<-EOF
net.ipv4.ip_forward=1
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

然后重新加载 sysctl.conf 即可

sudo sysctl -p
systemctl restart docker

5.2.2、安装 docker 版 V2ray 并管理

先拉取 v2ray 镜像

docker pull v2ray/official

运行 v2ray 镜像并配置实例名称为 v2ray

docker run -d --name v2ray -v /etc/v2ray:/etc/v2ray -v /etc/letsencrypt/live/your.domain.name:/etc/letsencrypt/live/your.domain.name -v /var/log/v2ray:/var/log/v2ray -p 127.0.0.1:443:443 -p 12345:12345 --restart=unless-stopped v2ray/official v2ray -config=/etc/v2ray/config.json

第一条 -v /etc/v2ray:/etc/v2ray 映射配置文件到 docker 中
第二条 -v /etc/letsencrypt/live/your.domain.name:/etc/letsencrypt/live/your.domain.name 映射证书文件到 docker 中(如果不用 H2 方式则不需要)
第三条  -v /var/log/v2ray:/var/log/v2ray 映射日志文件存放地点到 docker 中。
第四条 -p 127.0.0.1:443:443 映射 V2ray 端口到本地网络中(WS 模式用)
第五条 -p 12345:12345 映射 V2ray 端口到全部网络中
第六条 --restart=unless-stopped 配置此实例为非错误停止自动重启

额外注意:如果你的配置文件里锁定 ws 绑定再 127.0.0.1,需要取消掉该绑定,因为 docker 的 localhost 和宿主机的 localhost 不通。

查看 docker 运行的实例

docker container ls

查看 v2ray 实例的日志

docker container start v2ray

对于 v2ray 实例的起停与重启

docker container start v2ray
docker container stop v2ray
docker container restart v2ray

删除 v2ray 实例

docker container rm v2ray

如果想更新,则先删除实例,然后重新拉取镜像,最后重新创建实例即可


6、备注

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

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

20180808:增加 HTTP/2.0 连接方式

20181118:修改 V2ray 文件路径适配本站下载服务器,修改为 V4.1 版本新的配置文件格式

20181218:增加 Docker 实例使用方式

20190210:完善个别词意的准确性,修改为 v4.9 版下载链接

20190216:修改为 v4.16 版下载链接

 

点赞
  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
    Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36

    大佬,请问 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
      Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.139 Safari/537.36

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