宝塔bt面板+v2ray:Websocket+TLS+Nginx分流+自定义Http Header

前提

  • 已购买vps,并且知道如何利用ssh客户端:xshell/Putty(win),zoc/终端(mac)登陆;
  • 域名domain已解析到vps IP,比如x.com
  • 下文bt面板操作,涉及的选项如图:


请输入图片描述
请输入图片描述

以下操作,用ssh客户端登陆vps操作完成

系统更新

 apt-get update && apt-get upgrade -y  #ubuntu或debian系统
 或
 yum update -y #centos系统

一键安装v2ray

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

一键安装bt面板

  • BT宝塔面板,根据vps具体系统选择相应一键安装脚本;

以下操作,在浏览器中登陆bt面板操作完成

1、浏览器登陆bt面板

  • 安装完bt面板后,根据提示,打开浏览器登陆bt面板
  • 安装nginx1.12(或最新版本);取消勾选php、mysql,除非需要同时建立个人网站,如wordpress;
  • 安装完nginx后,网站——添加站点:x.com
  • 成功添加站点x.com站点后,设置——SSL——Let's Encrypt,成功申请ssl后,保存。
  • 再点击站点设置的「配置文件」选项(即nginx配置),在最后一个}前添加如下代码:

  location /ws {   
         proxy_redirect off;
         proxy_http_version 1.1;
         proxy_set_header Upgrade $http_upgrade;
         proxy_set_header Connection "upgrade";
         proxy_set_header Host $http_host; 
         if ($http_host = "www.baidu.com" ) {proxy_pass http://127.0.0.1:33531; 
                } 
           }

以上代码中的参数必须和下文的v2ray配置文件一样
path:path可自定义,这里是/ws,但必须与服务端、客户端的path同样;
host:host是http header参数,可自定义任意域名,这里是www.baidu.com,但必须与服务端、客户端配置同样,可理解为密码;
33531:v2ray服务端的端口port,可自定义;
在bt面板——安全选项,放行33531自定义端口。

apache配置

<VirtualHost *:80>
        RewriteEngine On
        RewriteCond %{HTTP:Upgrade} =websocket [NC]
        RewriteRule /(.*)           ws://localhost:33531/$1 [P,L]
        RewriteCond %{HTTP:Upgrade} !=websocket [NC]
        RewriteRule /(.*)           http://localhost:33531/$1 [P,L]
</VirtualHost>

<VirtualHost *:443>

        ServerName x.com.
        ServerAlias x.com.
        SSLEngine On

        SSLProxyEngine On
        Proxypass /ray http://127.0.0.1:33531
        ProxyPassReverse /ray http://127.0.0.1:33531

        SSLCertificateFile /XXX.crt    
        SSLCertificateKeyFile /XXX.key

</VirtualHost>

2、修改v2ray配置文件

  • 打开面板文件,在路径中输入/etc/v2ray/,编辑以下文件,并保存

服务端:/etc/v2ray/config.json

  • 为了直观,直接在代码后面添加注释,复制粘贴后切记删除注释部分://....

 {
  "log" : {
    "access": "/var/log/v2ray/access.log",
    "error": "/var/log/v2ray/error.log",
    "loglevel": "warning"
  },
  "inbound": {
    "port": 33531, //可自定义,但必须与上文nginx抱持一致
    "protocol": "vmess",
    "settings": {
      "clients": [
        {
          "id": "08723509-b860-49ac-98a7-7af7486beb38", //建议默认,uuid也可自定义同样格式,但必须与客户端配置保持一致
          "level": 1,
          "alterId": 64
        }
      ]
    },
    "streamSettings":{
      "network":"ws",
      "wsSettings": {
      "path": "/ws", //path可自定义,这里是/ws,但必须与nginx、客户端的path同样
"headers": {
"Host": "www.baidu.com" //host可自定义任意域名,但必须与nginx、客户端配置同样
      }
    }
  }},
  "outbound": {
    "protocol": "freedom",
    "settings": {}
  },
  "outboundDetour": [
    {
      "protocol": "blackhole",
      "settings": {},
      "tag": "blocked"
    }
  ],
  "routing": {
    "strategy": "rules",
    "settings": {
      "rules": [
        {
          "type": "field",
          "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"
          ],
          "outboundTag": "blocked"
        }
      ]
    }
  }
}


客户端:修改config.json文件

  • 客户端下载:v2ray-core,解压后,编辑config文件,并保存
  • 为了直观,直接在代码后面添加注释,复制粘贴后切记删除注释部分://....

 {
  "inbound": {
    "listen": "127.0.0.1",
    "settings": {
      "udp": false,
      "auth": "noauth",
      "ip": "127.0.0.1"
    },
    "protocol": "socks",
    "port": 1080
  },
 
  "outbound": {
    "mux": {
      "enabled": true, //true开启mux,false为关闭
      "concurrency": 8
    },
    "protocol": "vmess",
    "settings": {
      "vnext": [
        {
          "address": "x.com", //你申请的域名
          "users": [
            {
              "id": "08723509-b860-49ac-98a7-7af7486beb38", //uuid必须与服务端配置文件一样
              "alterId": 64,
              "security": "ChaCha20-Poly1305" //可自定义加密方法
            }
          ],
          "port": 443 //客户端端口port必须是nginx ssl监听端口,bt面板申请ssl后默认443端口,客户端不能填写33531
        }
      ]
    },
    "tag": "proxy",
    "streamSettings": {
      "wsSettings": {
        "path": "/ws", //path可自定义,这里是/ws,但必须与nginx配置、服务端的path一样
        "headers": {
          "Host": "www.baidu.com" //host可自定义任意域名,但必须与nginx、服务端配置同样
        }
      },
      "tlsSettings": {
        "serverName": "x.com", //你申请的域名
        "allowInsecure": true
      },
      "security": "tls",
      "network": "ws"
    }
  },
  "outboundDetour": [
    {
      "tag": "direct",
      "protocol": "freedom",
      "settings": {
      }
    }
  ],
 "routing": {
    "strategy": "rules",
    "settings": {
      "domainStrategy": "IPIfNonMatch",
      "rules": [
        {
          "type": "field",
          "outboundTag": "direct",
          "port": "1-52"
        },
        {
          "type": "field",
          "outboundTag": "direct",
          "port": "54-79"
        },
        {
          "type": "field",
          "outboundTag": "direct",
          "port": "81-442"
        },
        {
          "type": "field",
          "outboundTag": "direct",
          "port": "444-65535"
        },
        {
          "type": "field",
          "outboundTag": "direct",
          "domain": [
            "geosite:cn"
          ]
        },
        {
          "type": "field",
          "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",
            "geoip:cn"
          ],
          "outboundTag": "direct"
        }
      ]
    }
  },
  "log": {
    "loglevel": "warning"
  },
  "policy": {
    "levels": {
      "0": {
        "uplinkOnly": 0
      }
    }
  }
}

  • 不同系统客户端可随意自定义不同的加密方式,上文客户端配置为ChaCha20-Poly1305
security:加密方式,客户端将使用配置的加密方式发送数据,服务器端自动识别,无需配置。可选的值有:
"aes-128-cfb"
"aes-128-gcm":推荐在 PC 上使用
"chacha20-poly1305":推荐在手机端使用
"auto":默认值,自动选择
"none":不加密
  • 以上路由规则已经为智能连接

服务器操作

  • 可直接透过bt面板,重启服务器,一次性使配置文件生效
或
  • 分别重启相关服务
    • 重启v2ray,ssh客户端:service v2ray restart
    • 重启nginx:透过BT面板

安装加速


客户端使用截图

  • ios
    • kitsunebi(推荐,本人无ios设备,所以没法截图)
    • shadowrocket(选择vmess协议,但是未必具备以上全部功能)
  • Android
    • v2rayNG(推荐),如图
      • 点击+,选择手动输入,根据上文范例应填写如下:
请输入图片描述
请输入图片描述

  • Macos
    • v2ray-core(推荐,因为可使用最新的功能)
      • 解压,根据上文的客户端config配置,修改文件config.json;
      • 打开v2ray程序
      • 优点:使用最新功能,比如自定义http header
      • 缺点:是命令行程序,透过config配置文件,没有程序设置界面
      • 所以需要如下附加软件搭配实现科学上网
    • v2ray-core + Proxifier(付费)实现系统全部程序智能翻墙
      • Proxifier 配置,如图
请输入图片描述
请输入图片描述
请输入图片描述

    • v2ray-core+ 插件Proxy SwitchyOmega,可移步教程
      • 缺点:只能用于浏览器科学上网
      • 教程中的v2ray的本地端口为1081,但最新v2ray-core为1080,
      • 所以请自行修改教程中Proxy SwitchyOmega的端口设置为1080;
      • 或 修改v2ray-core客户端的config配置中本地端口为1081,如下位置
{
  "inbound": { #在客户端config文件的inbound内的port,而非outbound
    "listen": "127.0.0.1",
    "settings": {
      "udp": false,
      "auth": "noauth",
      "ip": "127.0.0.1"
    },
    "protocol": "socks",
    "port": 1080 #可查看最新版本本地端口号,或1080直接修改为1081
  },


或直接第三方客户端v2rayx



    • 缺点:目前最新版本0.9没有自定义http header功能
    • 如果不需要http header功能 + 定意使用v2rayx,可进行如下操作
      • 编辑服务端config,删除其中
      "Host": "www.baidu.com" 变为 "Host": "",即可。
    • nginx的配置代码应修改为如下:
     location /ws {   
         proxy_redirect off;
         proxy_http_version 1.1;
         proxy_set_header Upgrade $http_upgrade;
         proxy_set_header Connection "upgrade";
         proxy_set_header Host $http_host;
        proxy_pass http://127.0.0.1:33531;             
      }

    • 根据上文范例,配置如图
    请输入图片描述
    请输入图片描述
    请输入图片描述
    请输入图片描述
    最新版本0.9.1已经修复mux设置

    • windows客户端
      • 推荐:v2ray-core + Proxifier 或 插件Proxy SwitchyOmega 同macos
      • 第三方客户端
        • 本人没有使用win设备,所以不知以下第三方是否支持自定义http header,若不支持,请参考以上macos第三方客户端中的去http header说明,进行一模一样修改。
        • v2rayP
        • v2rayN