运维

V2Ray+WebSocket+TLS+Web(Caddy/Nginx)+Cloudflare 网络方案

MarginNote 3 - Mac端PDF阅读批注工具 激活码价格:¥69.00
赤友 NTFS for Mac 助手 -  磁盘硬盘格式读写软件注册激活码价格:¥35.00
虫洞 -  iPhone安卓投屏操控 电脑手机多屏协同,价格:¥45.00
namesilo全网最便宜域名注册商,输入折扣码:nsilo20立减1美元!

V2Ray(网络代理工具)+CaddyWeb 服务器)+Cloudflare(网络分发系统简称CDN)/WebSocket+TLS+Web+CDNV2Ray+WebSocket+TLS+Web(Caddy/Nginx)+Cloudflare 网络方案

前言

1、V2Ray官方的介绍,Project 提供了单一的内核和多种界面操作方式。内核(V2Ray)用于实际的网络交互、路由等针对网络数据的处理,而外围的用户界面程序提供了方便直接的操作流程。V2Ray 的主要作用是根据用户的配置,对于传入的网络连接进行一定处理,然后发往指定的服务器。它是一个命令行程序,可以接受一个 JSON 格式的配置文件。用白话文说,V2Ray就是一个网络代理工具。
2、Caddy服务器(或者Caddy Web)是一个开源的使用 GoLang 编写,支持 HTTP/2Web 服务端。它使用 GoLang 标准库提供 HTTP 功能, Caddy 一个显著的特性是默认启用 HTTPS,它是第一个无需额外配置即可提供 HTTPS 特性的 Web 服务器。Caddy和我们常用的NginxApacheWeb服务器相比,最大的特点就是部署简单,它拥有基本的Apache或者Nginx有的Web Server模块,同时还有一些很有特色的功能,比如: HTTP/2Automatic HTTPSMulti-coreWebsocketsMarkdownIPv6自动申请Let’s Encrypt SSL使用等等。,本文使用Caddy的反向代理到V2Ray后端使用,主要作用就是可以套Cloudflare,隐藏IP或使用被墙的VPS,当然也可以用Nginx/Apache进行部署。
3、首先是关于最优抗封锁,抗Qos干扰的V2Ray组合,一定是WebSocket + TLS + Nginx/Caddy + CDN,没有之一。
V2Ray关于http伪装的章节里提到了,不建议用http伪装。因为在没有TLS加密的前提下,这种伪装的流量很容易被识破,到时候被封了可就哭了。而使用Websock + TLS + Nginx/Caddy + CDN伪装的好处:
3.1、从外面看完全属于通过443端口访问正常的HTTPS网站
3.2、WebSocketpath(比如教程中的/ray)被TLS加密不能被探测到
3.3、TLS不是伪装,不是混淆,是真正的HTTPS,用途合理永远不能被封锁
3.4、再套上CDN比如:Cloudflare更是完美,连IP都隐藏了,即使是被墙的VPS也能使用。
搭建v2ray服务端

V2Ray是一个模块化的代理软件包,它的目标是提供常用的代理软件模块,简化网络代理软件的开发。
官方网站
1、手动安装
创建v2ray目录

mkdir /etc/v2ray

下载v2ray

wget https://github.com/v2ray/v2ray-core/releases/download/v3.27/v2ray-linux-64.zip     #或者下载下方最新版
wget https://github.com/v2ray/v2ray-core/releases/download/v4.18.0/v2ray-linux-64.zip   #(最新版)

解压,压缩包

unzip -o v2ray-linux-64.zip

进入解压目录

cd v2ray-v3.27-linux-64

复制v2ray v2ctl geoip.dat geosite.dat/etc/v2ray目录

cp -f v2ray v2ctl geoip.dat geosite.dat /etc/v2ray

赋予执行权限

chmod +x /etc/v2ray/v2ray v2ctl

创建配置文件

touch /etc/v2ray/config.json

编辑配置文件

vi /etc/v2ray/config.json

复制下面配置,粘贴进去
服务端配置文件方法1

{
  "inbound": {
    "port": 10000,
    "listen":"127.0.0.1",
    "protocol": "vmess",
    "settings": {
      "clients": [
        {
          "id": "a3461847-4c40-4915-82cb-2a312ae33665", //UUID,与客户端ID一致
          "alterId": 64
        }
      ]
    },
    "streamSettings": {
      "network": "ws",
      "wsSettings": {
      "path": "/ray"
      }
    }
  },
  "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"
        }
      ]
    }
  }
}

服务端配置文件方法2

{
  "log": {
    "access": "/var/log/v2ray/access.log", 
    "error": "/var/log/v2ray/error.log", 
    //可能取值 "none" "info" "warning" "error" 其中"debug"记录的数据最多,"error"记录的最少 "none"表示不记录任何内容 默认值为"warning"
    "loglevel": "debug" 
  },
  //注"policy"字段需要core≥3.1
  "policy": {
    "levels": {
      "0": {
        "uplinkOnly": 0,
        "downlinkOnly": 0,
        "connIdle": 150,
        "handshake": 4
      }
    }
  },
  "inbound": {
    //默认值为"0.0.0.0"
    "listen": "127.0.0.1", //监听ip
    "port": 39005,   //监听端口
    "protocol": "vmess", 
    "settings": {
      "clients": [
        {
          "id": "7f43b638-dc47-11e7-9296-cec278b6b50a",  //自行修改UUID,与客户端ID一致
          //"level"字段与"policy"字段中的"levels"字段中的对应,默认值:0,注:需要core≥3.1
          "level": 1, 
          "alterId": 64
        }
      ]
    }, 
    "streamSettings": {
      "network": "ws", 
      "security": "auto", 
      "wsSettings": {
        "path": "/ray", 
        "headers": {
          "Host": "v2ray.example.com"   //自行修改
        }
      }
    }
  }, 
  "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"
        }
      ]
    }
  }
}

在有注释处填写好端口号、密码、UUID等,记得把注释删除掉,UUID可以打开这个网站https://www.uuidgenerator.net/,会自动生成一个,然后替换配置参数里的UUID
启动V2ray

/etc/v2ray/v2ray -config /etc/v2ray/config.json

2、v2ray服务端一键脚本自动安装
好处是不用手动配置,而且会给tls绑定的域名自动配置一个静态站点,看起来就像是真的网站一样。目前只支持Debian, Dbuntu,不支持CentOS系统。
下面脚本二选一即可,

1、 apt-get install -y curl && curl -O https://raw.githubusercontent.com/1715173329/v2ray-onekey/master/v2ray-go.sh && bash v2ray-go.sh
2、 apt-get install -y curl && curl -O https://download.v2ray-install.ml/v2ray-go.sh && bash v2ray-go.sh

搭建Caddy 服务器

Websocket+TLS+Caddy:
Caddy提供了很多简单易用的功能而没有历史的包袱,其默认支持并且能帮你自动配置 HTTP/2HTTPS,对于 IPV6WebSockets都有很好的支持。
官方网站
1、手动安装
创建Caddy目录

mkdir /etc/caddy

下载Caddy

wget https://github.com/mholt/caddy/releases/download/v0.11.0/caddy_v0.11.0_linux_amd64.tar.gz

解压Caddy/etc/caddy目录

tar zxvf caddy_v0.11.0_linux_amd64.tar.gz -C /etc/caddy caddy

赋予执行权限

chmod +x /etc/caddy/caddy

创建配置文件

touch /etc/caddy/caddy.conf

编辑配置文件

vi /etc/caddy/caddy.conf

复制下面内容,粘贴进去

v2ray.example.com
{
  log /var/log/caddy.log
  proxy /ray localhost:10000 {
    websocket
    header_upstream -Origin
  }
}

1.1 proxy /ray/ray 和v2ray参数 "path": "/ray"需要保持一致。
1.2 v2ray.example.com为你的域名,请替换自己的,并且域名要先A记录解析到你的VPSIP上,假如已经用CF,请关闭CDN让其恢复原IP,而不是CFIP,否则自动申请SSL证书可能失败。待搭建完成可使用后,再去CF里开启CDN
1.3 caddySSL介绍 https://caddyserver.com/docs/automatic-https
1.4 假如你是root用户登录操作的,它会在你的根目录/.caddy/(隐藏文件夹)下保存当前所有使用的域名SSL证书相关文件,貌似用的就是这个acme.sh的更新脚本吧,会自动更新证书的。
1.5 如果要使用 caddy & cloudflare,请将 cloudflareSSL 部分,將原本设定的 Flexible 改为 Full
2、自动安装

wget -N --no-check-certificate https://softs.loan/Bash/caddy_install.sh && chmod +x caddy_install.sh && bash caddy_install.sh install
如果上面这个脚本无法下载,尝试使用备用下载:
wget -N --no-check-certificate https://raw.githubusercontent.com/ToyoDAdoubi/doubi/master/caddy_install.sh && chmod +x caddy_install.sh && bash caddy_install.sh install

安装后复制内容进配置文件(没有就自己新建)并启动

v2ray.example.com
    {
      log /var/log/caddy.log
      proxy /ray localhost:10000 {
        websocket
        header_upstream -Origin
      }
    }

启动:/etc/init.d/caddy start
停止:/etc/init.d/caddy stop
重启:/etc/init.d/caddy restart
查看状态:/etc/init.d/caddy status
查看Caddy启动日志: tail -f /tmp/caddy.log
安装目录:/usr/local/caddy
Caddy配置文件位置:/usr/local/caddy/Caddyfile
Caddy自动申请SSL证书位置:/.caddy/acme/acme-v01.api.letsencrypt.org/sites/example.com/
卸载

wget -N --no-check-certificate https://softs.loan/Bash/caddy_install.sh && bash caddy_install.sh uninstall
如果上面这个脚本无法下载,尝试使用备用下载:
wget -N --no-check-certificate https://raw.githubusercontent.com/ToyoDAdoubi/doubi/master/caddy_install.sh && bash caddy_install.sh uninstall

Nginx配置

Websocket+TLS+Nginx:
1、Nginx配置
Nginx网站配置的默认路径 /usr/local/nginx/conf/vhost/v2ray.example.com.conf

server {
  listen  443 ssl;
  ssl on;
  ssl_certificate       /root/v2ray.example.com.ssl/v2ray.example.com.pem; #fullchain证书路径
  ssl_certificate_key   /root/v2ray.example.com.ssl/v2ray.example.com.key; #key证书路径
  ssl_protocols         TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers           HIGH:!aNULL:!MD5;
  server_name           v2ray.example.com;
        location /ray {
        proxy_redirect off;
        proxy_pass http://127.0.0.1:10000;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $http_host;
        }
}

2、宝塔面板Nginx配置

server
{
    listen 80;
    listen 443 ssl http2;
    server_name v2ray.example.com;
    index index.php index.html index.htm default.php default.htm default.html;
    root /www/wwwroot/v2ray.example.com;
    
    #SSL-START SSL相关配置,请勿删除或修改下一行带注释的404规则
    #error_page 404/404.html;
    #HTTP_TO_HTTPS_START
    if ($server_port !~ 443){
        rewrite ^(/.*)$ https://$host$1 permanent;
    }
    #HTTP_TO_HTTPS_END
    ssl_certificate    /etc/letsencrypt/live/v2ray.example.com/fullchain.pem; #自行更改ssl证书目录
    ssl_certificate_key    /etc/letsencrypt/live/v2ray.example.com/privkey.pem;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;
    ssl_session_cache shared:SSL:10m;
    ssl_session_timeout 10m;
    
    location /PATH/  #服务端"path": "/PATH/",一样
    {
        proxy_pass http://127.0.0.1:39005; 反向代理v2ray监听ip和端口
            proxy_http_version                    1.1;
            proxy_redirect                        off;
            proxy_set_header  Host                $http_host;
            proxy_set_header  Upgrade            $http_upgrade;
            proxy_set_header  Connection        "upgrade";
        

    }
    
  

    
    #一键申请SSL证书验证目录相关设置
    location ~ \.well-known{
        allow all;
    }
    
    access_log  /www/wwwlogs/v2ray.example.com.log;
    error_log  /www/wwwlogs/v2ray.example.com.error.log;
}

V2Ray客户端配置

上面安装完成,并正常运行后,配置客户端。使用前请确保以上v2ray服务端已经运行,并且Caddy/Nginx也正常运行了(Caddy运行时在浏览器打开对应的域名时会提示404 Not Found,如果打不开说明没运行,博主就在这折腾了好久)
v2ray的客户端和服务端都是同一个文件,即可以做服务端又可以做客户端,这里以Windows端为例,下载地址:https://github.com/v2ray/v2ray-core/releases/download/v3.29/v2ray-windows-64.zip
其他版本:https://github.com/v2ray/v2ray-core
下载解压文件如图:V2Ray+WebSocket+TLS+Web(Caddy/Nginx)+Cloudflare 网络方案config.json为配置文件
v2ray.exeWindows前台程序,双击即可在前台启动
wv2ray.exe为后台运行文件,双击后客户端即可在后台运行
复制以下配置进config.json
客户端配置文件方法1

{
  "log": {
  "loglevel": "warning",
  "error": "./error.log"
  },
  "inbound": {
    "port": 1080,
    "listen": "127.0.0.1",
    "protocol": "socks",
    "settings": {
      "auth": "noauth",
      "udp": false
    }
  },
  "outbound": {
    "protocol": "vmess",
    "settings": {
      "vnext": [
        {
          "address": "v2ray.example.com",
          "port": 443,
          "users": [
            {
              "id": "a3461847-4c40-4915-82cb-2a312ae33665",
              "alterId": 64
            }
          ]
        }
      ]
    },
    "streamSettings": {
      "network": "ws",
      "security": "tls",
      "tlsSettings": {
        "serverName": "v2ray.example.com"
      },
      "wsSettings": {
        "path": "/ray"
      }
    }
  },
  "outboundDetour": [
    {
      "protocol": "freedom",
      "settings": {},
      "tag": "direct"
    }
  ],
  "routing": {
    "strategy": "rules",
    "settings": {
      "domainStrategy": "IPIfNonMatch",
      "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": "direct"
        },
        {
          "type": "chinasites",
          "outboundTag": "direct"
        },
        {
          "type": "chinaip",
          "outboundTag": "direct"
        }
      ]
    }
  }
}

客户端配置文件方法2

{
    "inbound": {
        "port": 1086, //浏览器设置socks代理端口
        "listen": "127.0.0.1",//浏览器设置socks代理地址
        "protocol": "socks",
        "settings": {
            "auth": "noauth",
            "udp": true
        }
    },
    "outbound": {
        "protocol": "vmess",
        "settings": {
            "vnext": [
                {
                    "address": "v2ray.example.com", //nginx绑定的域名
                    "port": 443, //nginx监听的端口
                    "users": [ {
                            "id": "7f43b638-dc47-11e7-9296-cec27850a",  //和服务端一样
                            "level": 1, //和服务端一样
                            "alterId": 64 //和服务端一样
                        } ]
                }
            ]
        },
        "streamSettings": {
            "network": "ws",
            "security": "tls",
            "tlsSettings": {
                "serverName": "v2ray.example.com"
            },
            "wsSettings": {
                "path": "/ray" //服务端 nginx 客户端必须一样
            }
        },
        "mux": {
        "concurrency": 6,
        "enabled": true
        }
    },
    "outboundDetour": [
        {
            "protocol": "freedom",
            "settings": {},
            "tag": "direct"
        }
    ],
      // 注"policy"字段需要core≥3.1
    "policy": {
    "levels": {
      "0": {
        "uplinkOnly": 0,
        "downlinkOnly": 0,
        "connIdle": 150,
        "handshake": 4
      }
    }
  },
    "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": "direct"
                }
            ]
        }
    }
}

注意:客户端配置的参数值必须和服务端的一致,该配置文件对应服务端配置文件方法1或者方法2,请删除配置文件注释内容。

"protocol":
"id":
"alterId":
"network":
"path":

v2ray.example.com为所配置在Caddy/Nginx配置文件里的正确域名

Windows/Android/iOS客户端推荐
Windows: V2rayN :配置支持手动填写和加载json文件,支持服务器批量测速
Android: BifrostV :感觉比v2rayNg好一点,能方便配置内置DNS
iOS: Shadowrocket :著名的小火箭,支持SSvmess多种协议,iOS上最佳

客户端配置完成后需要确保服务端客户端时间同步,要求服务器和客户端时间差绝对值不能超过 2 分钟,时区可以不同。配置到这里实际上还不能科学上网,因为 V2Ray 将所有选择权交给用户,它不会自动帮你设置系统代理,因此还需要在浏览器里设置代理。以火狐(Firefox)为例,点菜单 -> 选项 -> 常规 -> 网络代理 -> 设置,在 SOCKS Host 填上 127.0.0.1,后面的 Port1080,再勾上使用 SOCKS v5 时代理 DNS (这个勾选项在旧的版本里叫做远程 DNS)。
操作图见下:V2Ray+WebSocket+TLS+Web(Caddy/Nginx)+Cloudflare 网络方案到此,全部配置完毕!
代理设置
1、全局代理:这里用V2rayN(虽然很多人推荐proxfixer,但是配合V2ray我们设置了好多次都不成功,最后用V2rayN成功了)
注意:用V2rayN请手动填写配置(即添加VMess服务器),不用添加自定义配置服务器,否则系统代理不成功
2、使用时将V2rayN放入V2ray客户端文件夹内,要放在同一个文件夹内,
3、然后添加VMess服务器,示例如下,其实就是填客户端配置的内容
V2Ray+WebSocket+TLS+Web(Caddy/Nginx)+Cloudflare 网络方案然后百度:IP,测试网络是否联通。
V2Ray+WebSocket+TLS+Web [infobox]前言[/infobox] V2Ray开启WebSocket + TLS + Web是一种高级的玩法,会略微降低速度,但是可以有效避免被墙和部分地区的Qos。 介绍两种: 第一种是用Caddy、第二种是用Nginx;两种都可... 时间:2019-3-13 阅读:2.85W 评论:0 阅读全文

(1)

本文由 podipod软库网 作者:DevOps 发表,转载请注明来源!

ToDesk - 安全好用流畅远程控制软件 替代TeamViewer,价格:¥108.00
Eagle - 图片收集管理必备软件 激活码价格:¥119.00
PDF Expert 2 - Mac上优秀的PDF阅读编辑工具,价格:¥119.00

热评文章

发表评论