VWTC

前言

V2Ray已经更新为V2Fly,Caddy因为自动更新证书出过问题,启动不起来,所以也改为了使用Nginx来做反代,可以参考新的教程

VWTC——V2Ray+WebSocket+TLS+CloudFlare,一种新的姿势。参考了网上许多教程后,终于搭建出来了。在此做个笔记记录一下。

环境

  • KVM架构的VPS一台
  • Ubuntu 18.04 + 64bit,因为默认开启BBR
  • Caddy做反向代理、还能自动申请证书
  • Freenom申请的免费域名

安装vim

默认Ubuntu vi 的方向键是ABCD,所以要先卸载原来的vim,然后重新安装

1
2
sudo apt-get remove vim-common
sudo apt-get install vim

优化一下配置

  • 下面的内容,贴到 /etc/sysctl.conf 最后面,vim /etc/sysctl.conf
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
# 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
# turn on TCP Fast Open on both client and server side
net.ipv4.tcp_fastopen = 3
# 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.ipv4.tcp_congestion_control = bbr

以root身份运行以下命令使上述配置生效

1
sudo sysctl --system

查看BBR是否启动

1
lsmod | grep bbr

增大最大允许同时打开的文件链接数,sudo vi /etc/profile,最后新加一行

1
ulimit -n 51200

安装Caddy

可以先参考一下官方的安装教程

1
curl https://getcaddy.com | bash -s personal

有的发行版默认没有安装curl,sudo apt-get install -y curl命令安装一下。

配置Caddy目录及权限

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
sudo chown root:root /usr/local/bin/caddy
sudo chmod 755 /usr/local/bin/caddy
sudo setcap 'cap_net_bind_service=+ep' /usr/local/bin/caddy

sudo mkdir /etc/caddy
sudo chown -R root:www-data /etc/caddy

sudo mkdir /etc/ssl/caddy
sudo chown -R root:www-data /etc/ssl/caddy
sudo chmod 0770 /etc/ssl/caddy

# 创建 www 根目录
$ sudo mkdir /var/www
$ sudo chown www-data:www-data /var/www

Caddy配置文件

  • 创建配置文件,sudo touch /etc/caddy/Caddyfile
  • 配置文件内容:
1
2
3
4
5
6
7
:80 {
root /var/www
gzip {
ext .html .htm .php
level 6
}
}

设置Caddy为服务

把 caddy 配置成一个服务,这样就可以开机自动运行

1
2
3
4
5
6
7
8
9
10
11
# 从 github 下载 systemd 配置文件
sudo curl -s https://raw.githubusercontent.com/caddyserver/dist/master/init/caddy.service

# 重新加载 systemd 配置
sudo systemctl daemon-reload

# 设置 caddy 服务自启动
sudo systemctl enable caddy.service

# 查看 caddy 状态
sudo systemctl status caddy.service

测试Caddy

编辑一个html 文件测试一下,sudo vim /var/www/index.html

1
2
3
4
5
6
7
8
9
<!DOCTYPE html>
<html>
<head>
<title>Hello from Caddy!</title>
</head>
<body>
<h1 style="font-family: sans-serif">This page is being served via Caddy</h1>
</body>
</html>

启动并查看caddy状态

1
2
sudo systemctl start caddy
sudo systemctl status caddy

看到绿色的Active,说明启动成功

安装V2ray

核心的东西来了!!!,使用官网的一键安装脚本。首先切换到root,并在root下新建文件夹保存脚本

1
2
3
4
5
6
7
sudo su
cd ~
mkdir scripts
cd ./scripts
curl -L -s https://install.direct/go.sh > v2ray.sh
chmod +x v2ray.sh
bash v2ray.sh

使用crontab每周运行该脚本,以定期更新v2ray,在末尾追加以下一行

1
2
3
4
crontab -e
21 10 * * sun /bin/bash /root/scripts/v2ray.sh

#意思是每周日上午10点21分,会调用v2ray.sh执行更新。可以根据需求改变更新时间

配置V2Ray

V2Ray的配置文件保存在/etc/v2ray/config.json。这里使用Websocket中转,并开启tls。下面的配置会使用Caddy将所有路径为的请求全部分流到v2ray。

默认生成的配置文件可以开启vmess协议,但是ss我也要开,所以默认的配置文件不太好用,此处替换成我自己的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
{
"log": {
"access": "/var/log/v2ray/access.log",
"error": "/var/log/v2ray/error.log",
"loglevel": "warning"
},
"inbound": {
"port":v2ray端口,
"protocol": "vmess",
"settings": {
"clients": [
{
"id": "36位ID",
"level": 1,
"alterId": 128
}
]
},
"streamSettings":{
"network":"ws",
"wsSettings":{
"path":"/blog"
}
}
},
"outbound": {
"protocol": "freedom",
"settings": {}
},
"inboundDetour": [
{
"protocol": "shadowsocks",
"port": ss端口,
"settings": {
"method": "加密方式",
"password": "密码",
"level": 1
}
}
],
"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"
}
]
}
}
}

修改好了重启V2Ray服务systemctl restart v2ray

比较重要的几个配置项:

  • inbounds里的port,与客户端一致、与后面caddy里的配置一致
  • inbounds里的id,与客户端一致
  • streamSettings 里的network,这里我们用ws
  • streamSettings 里的wsSettings-path,转发的路径,这里可以自定义,但是要与后面caddy里的配置一致

修改Caddy配置

几个重要配置点:

  • http://<申请的域名>
  • tls 后面是自己的邮箱,用来做tls证书续期
  • proxy 后面的 /pathlocalhost:prot 要与上面 v2ray里的配置一样
  • proxy 配置多个。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
http://域名 {
redir https://域名{url}
}
https://域名 {
root /var/www
gzip

tls 邮箱 {
ciphers ECDHE-ECDSA-WITH-CHACHA20-POLY1305 ECDHE-ECDSA-AES256-GCM-SHA384 ECDHE-ECDSA-AES256-CBC-SHA
curves p384
key_type p384
}
header / {
Strict-Transport-Security "max-age=31536000;"
X-XSS-Protection "1; mode=block"
X-Content-Type-Options "nosniff"
X-Frame-Options "DENY"
}
proxy /coffee localhost:v2ray端口 {
websocket
header_upstream -Origin
}
}
  • 配置https自动申请证数,最好手动起一下caddy,确保证数申请成功
1
caddy -conf /etc/caddy/Caddyfile

如果看到最后结果有success,说明申请成功了,按ctrl+c

最后启动caddy服务systemctl start caddy

CF配置

  • 注册cloudflare
  • 添加域名,选择第一个,免费模式(因为穷)
  • 替换DNS,cloudflare会给你新的DNS,去原来的域名管理里修改

changeNS.png

  • 我使用的是freenom,所以我在这里修改

change-NS2.png

  • 修改完了关注一下Crypto,SSL这里一定要是FULL

fullssl.png

  • 全部配置好,回邮件通知,前台界面看到Great News,说明配置好了。

cf-finish.png

至此,所有的VWTC的配置到此结束,可以打开软件开始享受自由!

安装防火墙

1
sudo apt-get install iptables

添加规则

1
2
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
iptables-save

以root身份进行全面系统更新并重启

1
2
3
4
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
sudo reboot