V2ray具有高超的出墙性能,速度快,经混淆后的流量几无特征更易于穿墙。本文介绍 V2Ray+Caddy组合方式。
V2ray:用于构建代理绕过网络限制、审查、翻墙的平台
Caddy: 作为部署代理的前端web服务器。
本方法实际上是建立一个网站(网页),将代理隐身其中,出墙就像是实实在在的在浏览网站,消除代理的特征信号,提高出墙代理安全性,这样的思路一直是以前的出墙软件难以实现的,自从v2ray发布后,众多的网友不断推进v2ray用法,目前成为最好的出墙方法。
此组合方案还连带着HTTP/2(H2)或WebSocket网络传输协议;TLS安全传输层协议,用于在两个通信应用程序之间提供保密性和数据完整性。这个了解一下即可,部署代理过程中会遇到相关问题的处理。
一、准备工作
1、一个域名, 推荐freenom免费域名,注册申请和设置域名解析都很方便(方法见这里)。
2、远程主机( VPS ),部署的操作系统是 Debian ≧ 9,建议Debian 10,或者 Ubuntu ≧ 16.04 ;本代理组合方案不适用于 CentOS。
二、安装服务器端之前的几项基础性工作
1、首先参考自建代理准备,修改远程主机的SSH设置和设置防火墙。防火墙设置增加下面两条规则:
-A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 443 -j ACCEPT
使用下面命令编辑防火墙设置:
nano /etc/iptables/rules.v4
Ctrl+X保存修改和退出。执行下面命令载入规则:
/etc/init.d/netfilter-persistent reload
2、更新系统:
apt update && apt -y upgrade
看到上面的终端屏幕好象太满了,可以用“ clear ” 这个命令清屏。
3、接下来我们要安装依赖环境:
a. 先安装cURL:
apt install curl -y
看到我这个系统里已经有了最新版的curl了,就当空跑一次了。
b. 安装 unzip 和 daemon:
apt install unzip daemon -y
哇,屏幕又满了,再用“ clear ”(回车) 清屏,如下图:
4、编辑sysctl.conf配置文件:
为代理服务器优化配置,提升TCP并发处理能力,需要调整系统控制参数,用下面命令打开:
nano /etc/sysctl.conf
将光标移至最下无“#”处:
将下面参数配置复制粘贴到里面:
# max open files
fs.file-max = 51200
# max read buffer
net.core.rmem_max = 67108864
# max write buffer
net.core.wmem_max = 67108864
# default read buffer
net.core.rmem_default = 65536
# default write buffer
net.core.wmem_default = 65536
# max processor input queue
net.core.netdev_max_backlog = 4096
# max backlog
net.core.somaxconn = 4096
# resist SYN flood attacks
net.ipv4.tcp_syncookies = 1
# reuse timewait sockets when safe
net.ipv4.tcp_tw_reuse = 1
# turn off fast timewait sockets recycling
net.ipv4.tcp_tw_recycle = 0
# short FIN timeout
net.ipv4.tcp_fin_timeout = 30
# short keepalive time
net.ipv4.tcp_keepalive_time = 1200
# outbound port range
net.ipv4.ip_local_port_range = 10000 65000
# max SYN backlog
net.ipv4.tcp_max_syn_backlog = 4096
# max timewait sockets held by system simultaneously
net.ipv4.tcp_max_tw_buckets = 5000
# TCP receive buffer
net.ipv4.tcp_rmem = 4096 87380 67108864
# TCP write buffer
net.ipv4.tcp_wmem = 4096 65536 67108864
# turn on path MTU discovery
net.ipv4.tcp_mtu_probing = 1
# for high-latency network
net.core.default_qdisc=fq
net.ipv4.tcp_congestion_control = bbr
Ctrl+X保存修改和退出。
激活更改:
sysctl -p
5、编辑安全限制配置文件 (此步非必须,可做可不做):
a. 将文件数限制增加到51200:
nano /etc/security/limits.conf
将光标移至最下无“#”处,添上下面两行:
* soft nofile 51200
* hard nofile 51200
Ctrl+X保存修改和退出。
b. 将当前文件数限制设置为51200:
ulimit -SHn 51200
c. 编辑永久配置文件:
nano /etc/profile
将下面设置粘贴到空行处:
ulimit -SHn 51200
Ctrl+X保存修改和退出。
三、安装与部署服务器端
1、安装 Caddy
Caddy是一个前端web服务器,因Caddy在默认情况下自动使用 HTTPS,可以很方便用来做一个代理的伪装网站、反向代理、SSL自动续期。依次输入:
wget -P /usr/local/bin "https://daofa.cyou/c1/caddy.tar"
tar -xvf /usr/local/bin/caddy.tar -C /usr/local/bin
rm /usr/local/bin/caddy.tar
如上图,好像出了一点问题,哦,原来是粘贴命令时少了一个 ”,重来:
确定caddy文件安装在何处,输入:
whereis caddy
显示为:
caddy: /usr/local/bin/caddy
赋予所有权和权限,root拥有caddy文件防止其他账户修改。输入:
chown root:root /usr/local/bin/caddy
修改权限为755,root可读写执行,其他账户不可写。输入:
chmod 755 /usr/local/bin/caddy
允许Caddy绑定到低号端口 ,由于Caddy不会由root运行,使用setcap允许caddy作为用户进程绑定低号端口(服务器需要80和443端口),输入下面命令:
setcap 'cap_net_bind_service=+ep' /usr/local/bin/caddy
如果出现下面提示
setcap: command not found
那就需要安装 libcap2-bin (如果没有提示,就不用此步)
请输入:
apt install libcap2-bin
检查名为www-data的组和用户是否已经存在
输入:
cat /etc/group | grep www-data
输入:
cat /etc/passwd | grep www-data
注意:你的显示结果如果与上面两张截图一样,不需要下面输入,如果显示不一样,表明其组和用户不存在,则需要创建它们:
groupadd -g 33 www-data
useradd -g www-data --no-user-group --home-dir /var/www --no-create-home --shell /usr/sbin/nologin --system --uid 33 www-data
为 Caddy 创建目录,创建文件夹存储Caddy的配置文件,创建文件夹存储Caddy所管理的站点证书:
mkdir /etc/caddy
mkdir /etc/ssl/caddy
允许root及www-data组访问相关文件,允许Caddy写入站点证书文件夹:
依次输入:
chown -R root:root /etc/caddy
chown -R root:www-data /etc/ssl/caddy
chmod 770 /etc/ssl/caddy
创建记录文件
依次输入:
touch /var/log/caddy.log
chown root:www-data /var/log/caddy.log
chmod 770 /var/log/caddy.log
2、创建网站
在代理的前端做一个实实在在的网站,用代理时就象是真正在浏览一个加密网站,提高安全性。
先为您的网站创建目录:
mkdir -p /var/www/html
允许www-data组拥有站点文件夹:
chown -R www-data:www-data /var/www
创建空的Caddy配置文件:
touch /etc/caddy/Caddyfile
向网站添加内容:基本上有二种方式,一种是建立一个简单的网页,另一种是建立一个实实在在的简易网站,可以装一些内容。当用域名访问时,是可以看到真实内容的。
掩护网站建立的位置在 /var/www/html/ 目录中,其中网页启动文件是 index.html。了解网站的网友知道,你自己可以在网上找到很多网站模板(主题)程序,到处都有网站模板(主题)演示,下载一个模板(主题)后,把其全部文件(只要里面的内容文件,不要模板(主题)名目录)复制到 /var/www/html/ 目录中,其中的 启动文件 index.html 一定要在 html/ 目录下,不要放在其它子目录中,就OK了。上传用Bitvise SSH Client的SFTP即可完成。
如果只创建一个网页index.html,可以用下面的方法:
touch /var/www/html/index.html
编辑网页文件:
nano /var/www/html/index.html
将某个无版权的大众网页的源代码复制粘贴进去,然后Ctrl+X保存修改和退出。
3、设置SystemD服务
安装SystemD服务,配置 caddy.service。首先创建 caddy.service 空文件:
touch /etc/systemd/system/caddy.service
在nano编辑器中打开caddy.service:
nano /etc/systemd/system/caddy.service
将下面内容“原封不动”的复制出来,然后右键粘贴到nano编辑框中:
[Unit]
Description=Caddy HTTP/2 web server
Documentation=https://caddyserver.com/docs
After=network-online.target
Wants=network-online.target systemd-networkd-wait-online.service
; Do not allow the process to be restarted in a tight loop. If the
; process fails to start, something critical needs to be fixed.
StartLimitIntervalSec=14400
StartLimitBurst=10
[Service]
Restart=on-abnormal
; User and group the process will run as.
User=www-data
Group=www-data
; Letsencrypt-issued certificates will be written to this directory.
Environment=CADDYPATH=/etc/ssl/caddy
; Always set "-root" to something safe in case it gets forgotten in the Caddyfile.
ExecStart=/usr/local/bin/caddy -log stdout -log-timestamps=false -agree=true -conf=/etc/caddy/Caddyfile -root=/var/tmp
ExecReload=/bin/kill -USR1 $MAINPID
; Use graceful shutdown with a reasonable timeout
KillMode=mixed
KillSignal=SIGQUIT
TimeoutStopSec=5s
; Limit the number of file descriptors; see `man systemd.exec` for more limit settings.
LimitNOFILE=1048576
; Unmodified caddy is not expected to use more than that.
LimitNPROC=512
; Use private /tmp and /var/tmp, which are discarded after caddy stops.
PrivateTmp=true
; Use a minimal /dev (May bring additional security if switched to 'true', but it may not work on Raspberry Pi's or other devices, so it has been disabled in this dist.)
PrivateDevices=false
; Hide /home, /root, and /run/user. Nobody will steal your SSH-keys.
ProtectHome=true
; Make /usr, /boot, /etc and possibly some more folders read-only.
ProtectSystem=full
; … except /etc/ssl/caddy, because we want Letsencrypt-certificates there.
; This merely retains r/w access rights, it does not add any new. Must still be writable on the host!
ReadWritePaths=/etc/ssl/caddy
ReadWriteDirectories=/etc/ssl/caddy
; The following additional security directives only work with systemd v229 or later.
; They further restrict privileges that can be gained by caddy. Uncomment if you like.
; Note that you may have to add capabilities required by any plugins in use.
;CapabilityBoundingSet=CAP_NET_BIND_SERVICE
;AmbientCapabilities=CAP_NET_BIND_SERVICE
;NoNewPrivileges=true
[Install]
WantedBy=multi-user.target
Ctrl+X保存修改和退出。
设置caddy.service权限:
chown root:root /etc/systemd/system/caddy.service
chmod 644 /etc/systemd/system/caddy.service
重载systemd使其检测到新安装的Caddy服务:
systemctl daemon-reload
4、安装及配置 V2Ray
郑重提醒网友:最好是直接安装官方版V2Ray,就是本教程用到的方法,其实就是简单的命令,并不复杂。而网上有些一键安装包只会省略很少的步骤,却有一些特别的设置,如植入广告、后门等等,这对网友并非都适用,切记!
先下载指令,依次输入:
curl -O https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh
curl -O https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-dat-release.sh
该脚本在运行时会提供 info 和 error 等信息,可参考阅读。
安装和更新 V2Ray,输入:
bash install-release.sh
安装最新发行的 geoip.dat 和 geosite.dat:
bash install-dat-release.sh
生成UUID和设置端口(PORT):
UUID是新版V2Ray代理的通关密码,数字+字母组合,不要用符号,如:
a1199f80-a920-437b-9531-7f86b62533a0
共 32位数字字母组合,8位-4位-4位-4位-12位,中间用连字符“-”连接
那么如何生成这个UUID?
方法一、自己对照格式,编一个就行;
记住:一定要格式正确!
方法二、v2fly官方网站上生成
网址是:https://www.v2fly.org/awesome/tools.html
拟定端口可以选取30000~65535之间的一个数字,比如:33558
准备好UUID和端口后,就可以编辑 V2Ray 服务器配置文件了。
先备份原有的服务器配置文件:
cp /usr/local/etc/v2ray/config.json /usr/local/etc/v2ray/config.json.bak
清空原有内容并打开配置文件:
rm /usr/local/etc/v2ray/config.json && nano /usr/local/etc/v2ray/config.json
将自己的v2ray服务器配置文件内容编辑进去:
{
"log": {
"loglevel": "warning",
"error": "/var/log/v2ray/error.log",
"access": "/var/log/v2ray/access.log"
},
"dns": {},
"stats": {},
"inbounds": [
{
"settings": {
"clients": [
{
"alterId": 64,
"id": "a1199f80-a920-437b-9531-7f86b62533a0"
}
]
},
"port": 33558,
"tag": "in-0",
"streamSettings": {
"security": "tls",
"httpSettings": {
"path": "/ppp22",
"host": [
"www.dalaoy.ml"
]
},
"tlsSettings": {
"certificates": [
{
"certificateFile": "/usr/local/etc/v2ray/v2ray.crt",
"keyFile": "/usr/local/etc/v2ray/v2ray.key"
}
]
},
"network": "h2"
},
"protocol": "vmess",
"listen": "127.0.0.1"
}
],
"outbounds": [
{
"tag": "direct",
"protocol": "freedom",
"settings": {}
},
{
"tag": "blocked",
"protocol": "blackhole",
"settings": {}
}
],
"routing": {
"domainStrategy": "AsIs",
"rules": [
{
"outboundTag": "blocked",
"ip": [
"geoip:private"
],
"type": "field"
}
]
},
"policy": {},
"reverse": {},
"transport": {}
}
上面的配置文件内容里,UUID和端口(33558)要换成你自己的;里面的”path”: “/ppp22″,这个“/ppp22” 是可以随意修改为你自己的,但要记住,在后面的配置及客户端配置时要用到,设置相同一致就行;配置文件中的 “host”: “www.dalaoy.ml”,这个“www.dalaoy.ml” 要改为你自己的域名。
Ctrl+X保存修改和退出。
5、配置和启动 Caddy
先用nano打开配置文件:
nano /etc/caddy/Caddyfile
再粘贴下面已经修改为你自己的内容到编辑框中:
http://www.dalaoy.ml {
redir https://www.dalaoy.ml{url}
}
https://www.dalaoy.ml {
tls 12345@gmail.com
log /var/log/caddy.log
root /var/www/html
proxy /ppp22 https://localhost:33558 {
insecure_skip_verify
header_upstream X-Forwarded-Proto "https"
header_upstream Host "www.dalaoy.ml"
}
header / {
Strict-Transport-Security "max-age=31536000;"
X-XSS-Protection "1; mode=block"
X-Content-Type-Options "nosniff"
X-Frame-Options "DENY"
}
}
注意:上图中红框内的内容都要换成与前面v2ray服务器配置文件相一致的内容(信箱除外,但也要改成你自己的邮箱)。
说明:
a)www.dalaoy.ml:改为你自己的域名,域名前要不要加www都可,即dalaoy.ml和www.dalaoy.ml都可以,但在所有配置中一定要一致就行;
b)12345@gmail.com:改为你自己的邮箱(上面截图中我已经换成了我自己的邮箱ghwtyhdjhgdj5@gmail.com),Caddy将自动与Let’s Encrypt联系以获取SSL证书并在90天到期后自动更新证书;
c)proxy /ppp22 https://localhost:33558
此行的含义是:路径分流,流量转发,将443端口在/v2ray路径收到的流量转发给33558端口,在后面我们会让v2ray监听33558这个端口;
/ppp22 是路径,这个路径可以是空的/,也可自己指定的任何字母数字组合,但一定要与上面v2ray服务器配置文件中的路径相同,以及后面的客户端配置路径相同;
33558 这个端口前面已述,要自己设置一个;
d)Caddy将自动与Let’s Encrypt联系以获取SSL证书。它将证书和密钥放在“/etc/ssl/caddy/acme/acme-v02.api.letsencrypt.org/sites/你自己的域名/”目录中;
e)此文件保存后,Caddy会随即向Let’s Encrypt发出SSL证书申请,一般很快在一分钟就可完成,但可能有人会遇到特殊情况比较久一些才会完成。
f)其中的mail,是申请证书用的,用真实的mail可以得到到期通知等,当然Caddy是自动续期,随意填一个mail,符合mail的格式,也是可以的。
赋予Caddy配置文件权限:
chown root:root /etc/caddy/Caddyfile
chmod 644 /etc/caddy/Caddyfile
启动Caddy之前,先重载systemd使其检测到新安装的Caddy服务:
systemctl daemon-reload
输入下面命令启动Caddy:
systemctl start caddy
检查Caddy是否正在运行并且正在侦听端口80和443上:
systemctl status caddy
看到如下绿色 active (running),表明 caddy已经启动:
按Ctrl+C回到命令行状态:
设置开机自启动Caddy:
systemctl enable caddy
成功。
如果Caddy没有正常启动,则需要检查Caddy配置文件Caddyfile是否有错:
caddy -agree -conf /etc/caddy/Caddyfile
如果要修改 Caddyfile、caddy.service等等文件,那么就会用到如下的一些命令:
a. 修改前,一般要先停止Caddy服务:
caddy -service stop
b. 修改完成后,重载systemd使其检测到新安装的Caddy服务:
systemctl daemon-reload
c. 启动或重启动Caddy服务:
caddy -service start
caddy -service restart
d. 查看启动状态:
systemctl status caddy
e. 卸载Caddy服务(若不需要、或安装错误Caddy服务,可卸载再重新安装):
caddy -service uninstall
6、检查SSL证书是否生效及效果
上面Caddy配置是否生效,SSL证书是否已经生成,到这里就可以进行检查,因本教程需要ssl,这在构建代理时是需要做的,若SSL证书没有生成,后面是不能成功搭建代理的。
检查方法很简单:
在浏览器中用 https://你的域名,即:
https://www.dalaoy.ml 注:要改为你的域名
我们设置有转向,http也测试:
http://www.dalaoy.ml 注:要改为你的域名
如果已经可以访问你的网站,显示你自己建的网站内容,就表明SSL已经安装成功了。
接下来要将caddy建立的SSL证书与V2Ray关联:
注意:下面命令中的域名www.dalaoy.ml必须先改为你自己的,然后,再依次输入:
ln /etc/ssl/caddy/acme/acme-v02.api.letsencrypt.org/sites/www.dalaoy.ml/www.dalaoy.ml.crt /usr/local/etc/v2ray/v2ray.crt
ln /etc/ssl/caddy/acme/acme-v02.api.letsencrypt.org/sites/www.dalaoy.ml/www.dalaoy.ml.key /usr/local/etc/v2ray/v2ray.key
修改证书文件权限:
chown root:root /usr/local/etc/v2ray/v2ray.crt
chown root:root /usr/local/etc/v2ray/v2ray.key
chmod 644 /usr/local/etc/v2ray/v2ray.crt
chmod 644 /usr/local/etc/v2ray/v2ray.key
7、启动和测试V2Ray
输入:
systemctl daemon-reload
systemctl start v2ray
检查V2Ray是否正在运行:
systemctl status v2ray
看到上图中绿色active (running),表明 v2ray已经启动。
如果想修改 V2Ray 配置,修改前,一般要先停止v2ray服务:
systemctl stop v2ray
修改完成后,重载systemd使其检测到新安装的v2ray服务:
systemctl daemon-reload
启动或者重启动v2ray服务:
systemctl start v2ray
systemctl restart v2ray
查看启动状态:
systemctl status v2ray
删除V2Ray(若不需要V2Ray时,可以删除 V2Ray,这在测试时常用,安装失败后需要重新安装时也可以使用):
bash install-release.sh --remove
关于 V2Ray 版本更新:V2Ray团队会不断更新v2fly/V2Ray版本、及时修复发现的问题和技术改进。有时候,网友会遇到本来用的好好的V2Ray,突然不能上网了,也有一种可能就是旧版出现了一些问题,只需要更新V2Ray到最新版就好了。
V2Ray版本更新方法,依次输入如下命令:
bash install-release.sh
systemctl daemon-reload
systemctl restart v2ray
systemctl status v2ray
以上是V2Ray+Caddy组合服务器端的全部教程,过程虽然感觉繁琐一些,但并没有什么难度,只要一步一步的坚持下来即可大功告成。
客户端的配置和应用请看这里:客户端配置 – V2RayN
说明:本组合方法的原创是《美博园》