前言:V2Ray是一代新的网络协议构建平台,隶属于Project V项目,而vmess是属于V2Ray的自研协议,改正了shadowsocks一些已有的缺点,更难被墙检测。
本文以Debian系系统为例,主要介绍用Docker方式搭建V2Ray,配合Caddy服务器反向代理,可选套CDN,这样不暴露自己的ws端口,可以利用path分流进行流量转发。如果你听不懂,那没关系,请往下看,我会尽我可能说清楚,你按照步骤做就是。
撰写本文参考了很多网上的相关教程,使用的资源也依赖各路大神,在此表示深深的敬意。
一、前期准备
- 一位不怕麻烦、很有耐心的自然人
- 一台 墙外的VPS
- 一台可SSH的电脑,鼠标,键盘……
- 一个域名(推荐付费购买,也很便宜)
- 注册Cloudflare账号,并将域名添加至Cloudflare并解析至VPS IP,先不要开启CDN
二、安装Docker
2.1 以root用户操作,先升级系统并安装必要软件
apt-get update && apt-get -y install screen lsof wget socat vim
2.2 安装docker
wget -qO- get.docker.com | bash
2.3 查看docker运行状态并将docker加入开机自启动
docker -v 或者 docker version //查看docker安装版本等信息
systemctl status docker //查看docker运行状态
systemctl enable docker //将docker加入开机自启动
三、用acme.sh脚本给你的域名申请证书
3.1 下载脚本并安装到本地
wget -qO- get.acme.sh | sh
3.2 检测80端口有没有被占用,如果有kill掉
lsof -i:80 //如果没有程序跑在80端口,那么返回值是空;如果有,留意它的PID编号
kill -9 PID //终止占用80端口的进程
3.3 使用acme.sh脚本给域名申请ECC证书,假定域名是mydomain.me,且已经在Cloudflare设置解析并生效
/root/.acme.sh/acme.sh --issue -d mydomain.me --standalone -k ec-256
说明:生成的证书存放都放在/root/.acme.sh/mydomain.me_ecc/ 目录下,然后我们后面需要用到的是/root/.acme.sh/mydomain.me_ecc/fullchain.cer 证书和/root/.acme.sh/mydomain.me_ecc/mydomain.me.key 私钥
四、配置V2Ray的配置文件,并创建启动V2Ray的docker容器
4.1 创建配置目录并切换至此
mkdir /etc/v2ray && cd /etc/v2ray
4.2 创建配置文件
vim config.json
{
"inbounds":[
{
"port":10000,
"listen":"127.0.0.1", //此处记得写127.0.0.1,只监听本地
"protocol":"vmess",
"settings":{
"clients":[
{
"id":"888d163a-80d7-4495-b3d1-fcf61fc6b6ce", //此处的uuid建议自己到uuid generator网站在线生成
"alterId":64
}
]
},
"streamSettings":{
"network":"ws",
"wsSettings":{
"path":"/ray" //说明:此处请替换你想写的path分流路径,尽量复杂一些
}
}
}
],
"outbounds":[
{
"protocol":"freedom",
"settings":{}
}
]
}
说明:因为tls是借助caddy的认证,所以此处只需要配置vmess+ws;建议复制上述配置文件示例,然后保存到本地为config.json,稍作修改,然后用winscp传输到vps上,就可以直接使用。
4.3 创建并启动V2Ray的容器
docker run -d --name v2ray --restart always --net host -p 127.0.0.1:10000:10000 -v /etc/v2ray:/etc/v2ray teddysun/v2ray
4.4 查看容器在线状态
docker ps -as 或者 docker container ls
4.5 查看容器运行并输出日志
docker logs v2ray
4.6 客户端配置V2Ray节点
服务器:IP或者mydomain.me //建议是配置两个,开了CDN以后,这里填IP就是ws+tls,这里填了域名,就是ws+tls+cdn
端口号:443
UUID:888d163a-80d7-4495-b3d1-fcf61fc6b6ce //这个建议自己去在线网站生成,保持服务端客户端一致
额外ID:64
加密类型:填Auto即可,V2Ray对加密要求不严格,客户端随便填,服务端自适应
传输协议:ws
TLS:开启
伪装类型:none
伪装域名:mydomain.me
路径:/ray
MUX:关闭
疑问:Quantumult好像配置上不能用报400错误,但Quantumult X、Kitsunebi和v2rayN就可以,好像是caddy支持的是http/2,Quantumult支持的是http/1.1
对了,到此处还不能用对吧,别急,因为Caddy还没配置好,请继续往下看。
五、安装配置Caddy
5.1 切换到/root路径,下载安装caddy
wget -qO- https://getcaddy.com | bash -s personal
5.2 创建caddy的配置文件
5.2.1 创建存放caddy配置的文件夹并切换至此
mkdir /root/caddy && cd /root/caddy
5.2.2 创建caddy配置文件Caddyfile
vim Caddyfile
mydomain.me:443 {
gzip
tls /root/caddy/caddy.crt /root/caddy/caddy.key
log /root/caddy/caddy.log
proxy / https://baidu.com
proxy /ray 127.0.0.1:10000 {
websocket
header_upstream -Origin
}
}
说明:这里tls手动指定的证书,caddy服务器只会占用443端口,如果填邮箱的话,会同时占用80端口,且会有http到https的重定向,那样如果套了CDN,会出现反代的网站无法打开的情况,估计套cdn的V2Ray也无法使用。
六、安装证书并启动Caddy服务器
6.1 安装证书
/root/.acme.sh/acme.sh --installcert -d mydomain.me --fullchainpath /root/caddy/caddy.crt --keypath /root/caddy/caddy.key --ecc
6.2 指定Caddyfile配置文件运行caddy(三选一)
6.2.1 用screen开窗口后台运行caddy
screen -S caddy //这是创建并切换到名为caddy的窗口
caddy -conf /root/caddy/Caddyfile //指定配置文件运行caddy服务
说明:顺利启动caddy服务后,要想退出但不停止caddy服务,此时要同时按着CTRL+A+D,后台挂起,此时就算断开ssh连接,caddy服务也会保持在后台运行。
6.2.2 使用 nohup command &
让程序保持后台运行
添加:经秋大点拨,让caddy服务保持在后台运行还有一种方法,不需要使用screen那么麻烦,直接
nohup caddy -conf /root/caddy/Caddyfile &
,只需要这一条指令即可,默认输出到nohup.out文件在当前文件夹作为日志便于查看,另外这样子可以通过程序名查程序是否在运行以及其占用的PID,ps -ef | grep caddy
6.2.3 注册 caddy.service
后台服务方便管理
cd /etc/systemd/system && vim caddy.service //切换到此目录下,创建并开始编辑服务文件
//以下是文件内容,请添加至文件
[Unit]
Description=Caddy Service
After=network.target
[Service]
ExecStart=/usr/local/bin/caddy -conf /root/caddy/Caddyfile
Restart=on-abort
LimitNOFILE=1048576
[Install]
WantedBy=multi-user.target
//以上是文件内容,添加至文件
systemctl daemon-reload //重载服务
systemctl start caddy //启动caddy.service服务
systemctl status caddy //查看caddy服务运行状况
systemctl enable caddy //将此服务加入开机自启动
6.3 检验caddy服务情况
浏览器里打开你的域名, https://mydomain.me ,如果是你设置的反代网址,那就说明成功了,地址栏里加上/ray,如果出现Bad Request的返回界面,则代表搭建成功。
6.4 后续处理
screen -ls //这是列举所有后台运行的窗口,你要留意caddy的PID编号
screen -r PID //这是恢复到这个窗口进程
kill -9 PID //这是中止这个窗口进程
screen -wipe PID //这是清理dead掉的窗口
lsof -i:443 //这是列出占用443端口号的程序,注意PID号
kill -9 PID //这是终止此进程
七、说明和总结
7.1 设置定时任务的事情
你可以安装crontab来设置定时将脚本定期生成的证书安装到caddy配置目录下。
7.2 开启CDN情况
到Cloudflare那里点亮云朵,到SSL/TLS-Overview选择Full模式,就是开启CDN了
7.3 还有些问题没搞清楚
比如在套了CDN,脚本申请证书问题,还需要去研究下,所以每三个月你可能要关闭下CDN然后去手动更新证书试试,可以查看这一篇文章解决:用acme.sh脚本申请证书并自动续更
7.4 总结
难免有疏漏,希望各位提出宝贵意见
八、致谢
谢谢各路大神给出的教程,才得以完成这篇水文。。
秋水逸冰(秋大)docker教程: https://teddysun.com/536.html
秋水逸冰(秋大)V2Ray-docker镜像地址: https://hub.docker.com/r/teddysun/v2ray
白话文配置V2Ray教程: https://toutyrater.github.io/advanced/wss_and_web.html
…
暂无评论内容