V2Ray
(网络代理工具)+Caddy
(Web
服务器)+Cloudflare
(网络分发系统简称CDN
)/WebSocket
+TLS
+Web
+CDN
V2Ray
官方的介绍,Project
提供了单一的内核和多种界面操作方式。内核(V2Ray
)用于实际的网络交互、路由等针对网络数据的处理,而外围的用户界面程序提供了方便直接的操作流程。V2Ray
的主要作用是根据用户的配置,对于传入的网络连接进行一定处理,然后发往指定的服务器。它是一个命令行程序,可以接受一个 JSON
格式的配置文件。用白话文说,V2Ray
就是一个网络代理工具。Caddy
服务器(或者Caddy
Web
)是一个开源的使用 GoLang
编写,支持 HTTP/2
的 Web
服务端。它使用 GoLang
标准库提供 HTTP
功能, Caddy
一个显著的特性是默认启用 HTTPS
,它是第一个无需额外配置即可提供 HTTPS
特性的 Web
服务器。Caddy
和我们常用的Nginx
、Apache
等Web
服务器相比,最大的特点就是部署简单,它拥有基本的Apache
或者Nginx
有的Web Server
模块,同时还有一些很有特色的功能,比如: HTTP/2
、Automatic HTTPS
、Multi-core
、Websockets
、Markdown
、IPv6
自动申请Let’s Encrypt SSL
使用等等。,本文使用Caddy
的反向代理到V2Ray
后端使用,主要作用就是可以套Cloudflare
,隐藏IP或使用被墙的VPS
,当然也可以用Nginx/Apache
进行部署。Qos
干扰的V2Ray
组合,一定是WebSocket + TLS + Nginx/Caddy + CDN
,没有之一。V2Ray
关于http
伪装的章节里提到了,不建议用http
伪装。因为在没有TLS
加密的前提下,这种伪装的流量很容易被识破,到时候被封了可就哭了。而使用Websock + TLS + Nginx/Caddy + CDN
伪装的好处:443
端口访问正常的HTTPS
网站WebSocket
的path
(比如教程中的/ray
)被TLS加密不能被探测到TLS
不是伪装,不是混淆,是真正的HTTPS
,用途合理永远不能被封锁CDN
比如:Cloudflare
更是完美,连IP都隐藏了,即使是被墙的VPS
也能使用。V2Ray
是一个模块化的代理软件包,它的目标是提供常用的代理软件模块,简化网络代理软件的开发。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
提供了很多简单易用的功能而没有历史的包袱,其默认支持并且能帮你自动配置 HTTP/2
、HTTPS
,对于 IPV6
、WebSockets
都有很好的支持。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
记录解析到你的VPS
的IP
上,假如已经用CF
,请关闭CDN
让其恢复原IP
,而不是CF
的IP
,否则自动申请SSL
证书可能失败。待搭建完成可使用后,再去CF
里开启CDN
。
1.3 caddy
SSL
介绍 https://caddyserver.com/docs/automatic-https
1.4 假如你是root
用户登录操作的,它会在你的根目录/.caddy/
(隐藏文件夹)下保存当前所有使用的域名SSL
证书相关文件,貌似用的就是这个acme.sh
的更新脚本吧,会自动更新证书的。
1.5 如果要使用 caddy
& cloudflare
,请将 cloudflare
的 SSL
部分,將原本设定的 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
配置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
服务端已经运行,并且Caddy/Nginx
也正常运行了(Caddy
运行时在浏览器打开对应的域名时会提示404 Not Found,如果打不开说明没运行,博主就在这折腾了好久)v2ray
的客户端和服务端都是同一个文件,即可以做服务端又可以做客户端,这里以Windows
端为例,下载地址:https://github.com/v2ray/v2ray-core/releases/download/v3.29/v2ray-windows-64.zipconfig.json
为配置文件v2ray.exe
为Windows
前台程序,双击即可在前台启动wv2ray.exe
为后台运行文件,双击后客户端即可在后台运行config.json
{ "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
:著名的小火箭,支持SS
和vmess
多种协议,iOS
上最佳
客户端配置完成后需要确保服务端客户端时间同步,要求服务器和客户端时间差绝对值不能超过 2 分钟,时区可以不同。配置到这里实际上还不能科学上网,因为 V2Ray
将所有选择权交给用户,它不会自动帮你设置系统代理,因此还需要在浏览器里设置代理。以火狐(Firefox
)为例,点菜单 -> 选项 -> 常规 -> 网络代理 -> 设置,在 SOCKS
Host
填上 127.0.0.1
,后面的 Port
填 1080
,再勾上使用 SOCKS v5
时代理 DNS
(这个勾选项在旧的版本里叫做远程 DNS
)。
操作图见下:到此,全部配置完毕!
代理设置
1、全局代理:这里用V2rayN
(虽然很多人推荐proxfixer
,但是配合V2ray
我们设置了好多次都不成功,最后用V2rayN
成功了)
注意:用V2rayN
请手动填写配置(即添加VMess
服务器),不用添加自定义配置服务器,否则系统代理不成功
2、使用时将V2rayN
放入V2ray
客户端文件夹内,要放在同一个文件夹内,
3、然后添加VMess
服务器,示例如下,其实就是填客户端配置的内容
然后百度:IP
,测试网络是否联通。
本文由 podipod软库网 作者:DevOps 发表,转载请注明来源!