自建最强科学上网2:V2Ray + Caddy + Tls + WebSocket

【美博翻墙2019.12.23】美博编注:

因V2Ray官方安装脚本等程序改变,本教程已经失效,自建V2Ray代理新教程,请参考:

-------------
美博翻墙(allinfa.com)发布的几个目前最好的自建代理,可自行选择使用:
自建最强科学上网5+:V2ray + Caddy + Tls + HTTP/2
自建最强科学上网4:NaiveProxy + Caddy
自建最强科学上网3:trojan + Caddy
自建最强科学上网2+:V2Ray + Caddy + Tls + WebSocket
美博点评:V2Ray、trojan、NaiveProxy代理的异同及相关问题
美博认为这几个组合都是目前翻墙思路最好、最强的翻墙方法,可等同使用。
-------------

-------------------------------------

V2Ray提供了一个优秀的科学上网平台,网友可以在其独特vmess协议上发挥创意设计出多样的翻墙方法,特别是把翻墙完全隐身于访问网站(网页)之中,提供了目前最安全的翻墙方式。本文是在前文自建最强科学上网:v2ray+websocket+web+nginx(EasyEngine) 基础上改進的又一个自建v2ray翻墙代理方法。

本方法代理构建的系统要求:Ubuntu ≧ 16.04 or Debian ≧ 9,建议使用 Debian 10,不适用于 CentOS 。

本方法以Caddy作为前端web服务器,是一个轻便的web部署工具,其功能与 nginx 类似。其优点是:单文件,无依赖,安全、轻量、方便;安装快速、不到30秒可创建一个 HTTPS 服务器;不受制于EE的版本限制,可广泛应用于各种系统;配置文件简洁,多站点配置、反向代理等功能都在一个 Caddyfile 文件里配置;默认启用HTTPS,自动签发免费的 Let's Encrypt https 证书并自动续约,默认支持HTTP/2(H2)网络协议;还有丰富的插件系统,可以快速配置缓存、CORS、自动拉取 Git 仓库、Markdown 支持、ip/地区过滤等功能。

-------------
美博翻墙(allinfa.com)发布的几个目前最好的自建代理,可自行选择使用:
自建最强科学上网5:V2ray + Caddy + Tls + HTTP/2
自建最强科学上网4:NaiveProxy + Caddy
自建最强科学上网3:trojan + Caddy
自建最强科学上网2:V2ray + Caddy + Tls + WebSocket
美博点评:V2Ray、trojan、NaiveProxy代理的异同及相关问题
美博认为这几个组合都是目前翻墙思路最好、最强的翻墙方法,可等同使用。
-------------

本文有关的几个组件原理介绍:

V2Ray:用于构建代理绕过网络限制、审查、翻墙的平台。
Caddy:作为部署代理的前端web服务器。
WebSocket:是一种计算机通信协议,可通过单个TCP连接提供全双工通信通道。
HTTP/2(H2):是互联网HTTP网络协议的主要修订版。它源自Google最初开发的实验SPDY协议。
TLS:安全传输层协议,用于在两个通信应用程序之间提供保密性和数据完整性。
反向代理:相对正向代理而言,真实的web服务器受到保护、对外不可见,外网只能看到反向代理,而反向代理服务器上并没有真实数据,从而保护web服务器的资源安全,并可加速网站访问速度等。

前言 基本介绍

1、V2Ray是什么

V2Ray 是在 Shadowsocks 作者被请喝茶之后出现的一个开源项目,V2Ray是早期的叫法,后来 V2Ray 规模越来越大,就成立一个 Project V 项目。

美博翻墙这里重点介绍建立代理的具体步骤,原理不详细介绍,要了解原理的网友,请参考v2ray官方的详细介绍。

v2ray.Project V GitHub项目官方: https://github.com/v2ray

v2ray.Project V 官方网站:https://www.v2ray.com/

2、V2Ray 的特点

※ 多入口多出口: 一个 V2Ray 进程可并发支持多个入站和出站协议,每个协议可独立工作。
※ 可定制化路由: 入站流量可按配置由不同的出口发出。轻松实现按区域或按域名分流,以达到最优的网络性能。
※ 多协议支持: V2Ray 可同时开启多个协议支持,包括 Socks、HTTP、Shadowsocks、VMess 等。每个协议可单独设置传输载体,比如 TCP、mKCP、WebSocket 等。V2Ray提供自己原创的加密协议VMess,一般声称支持V2Ray,就是指支持 VMess协议;
※ 隐蔽性: V2Ray 的节点可以伪装成正常的网站(HTTPS),将其流量与正常的网页流量混淆,以避开第三方干扰。
※ 反向代理: 通用的反向代理支持,可实现内网穿透功能。
※ 多平台支持: 原生支持所有常见平台,如 Windows、Mac OS、Linux,并已有第三方支持移动平台。

3、自建V2Ray需要准备的几个工具

1)一台 VPS 主机
2)一个域名
3)SSH连接工具:以前用putty较多,现在用Xshell很方便,本文会以Xshell进行说明。

下面将在各节具体介绍。

4、自建V2Ray的三个大的过程

建立步骤大致分为三个大的部分:

1)“服务器端”及VPS主机端安装代理服务器、前端web服务器,及其配置;即:远端VPS主机建立代理服务器;
2)“客户端”软件及配置;即:本地用户自己的电脑端设置;
3、上网使用代理(浏览器设置)

美博本教程按照实际搭建过程的顺序来书写具体操作步骤,请网友自建代理时,按照下面编号顺序一步一步往下走,有的步骤的先后顺序是不能变动的。

具体操作步骤:

一、选择 VPS 服务器并安装系统

首先我们需要一台用作建立代理服务器的主机,我们选择VPS主机,如何购买VPS、如何安装系统,都很简单,几乎都是自动操作,很快就可以完成,请见教程:

自己搭建代理服务器:VPS的选择
自己搭建代理服务器:Vultr VPS 购买图文教程
自己搭建代理服务器:Vultr VPS 系统安装图文教程

提示:
1)安装系统时请注意,本方法适用于 Ubuntu ≧ 16.04 or Debian ≧ 9,建议使用 Debian 10,不适用于 CentOS;
2)VPS安装系统后主机会显示:ip地址、密码、用户名(默认是root),后面会用到。

二、购买域名并设置与服务器ip关联

利用v2ray建立代理,并非一定需要域名,不要域名也可以建立代理。但是,整合有域名的代理技术,可明显提高代理安全性,多一个域名整合进来是值得的。

美博本文介绍的是整合有域名的方法。

请参考教程:

自己搭建代理服务器:域名购买及设置与ip服务器关联

域名是为了建立网站(网页)用的,本方法实际建立一个网站(网页),将翻墙代理隐身其中,翻墙就像是实实在在的在浏览网站,消除代理的特征信号,提高翻墙代理安全性,这样的思路一直以前的翻墙软件难以实现的,自从v2ray发布后,众多的网友不断推進v2ray用法,目前成为最好的翻墙方法系列。

三、用SSH工具连接VPS服务器

要如何操作远端VPS主机?如何发出指令让远端服务器执行?其实很简单。在自己的电脑上安装一个软件,即SSH工具,我们这里选用 XShell软件,用上一步安装系统后得到的ip或用户名(root)、密码,就可以登入远端主机并发出指令了。

通过 XShell软件進行安全的SSH连接到远端的VPS服务器后,所有的操作都是在我们在自己的电脑上完成,在自己的电脑上就可以发出各种指令(命令)来安装系统、安装各种应用程序,包括下面要介绍的我们建立代理的各种组件等等,没有什么难以操作的东西,一步一步准确的,一定要准确,把下面各个步骤的指令复制、粘贴、执行(回车 Enter),就这样重复的动作,不懂原理没有关系,只要一步步执行下去,大约半小时(不熟悉时可能时间长一些)就完成全部命令输入,如无操作疏失,代理就建立好了,就这么简单。

如何操作 XShell软件,请见教程:

SSH连接软件-Xshell下载及使用教程

如果你使用的是Linux或macOS系统,他们本身就内置有SSH链接的终端模拟器,无需下载额外的软件。

======= 几点通用说明 ==============

# 本文方法以root用户来构建,建议不熟悉改变命令的网友不要自建用户,否则此法的很多命令将不可用。
# 新手注意:以下命令都是在英文半角输入下完成,电脑的输入法不要处于中文输入状态,以免无意输入中文字符出错。
# 在执行下面各种命令时,首先都是要以root用户登录SSH连接VPS服务器,然后输入各种命令来执行。
# 下面的步骤,如果不明白其中命令的含义没有关系,请按照下面的全部顺序,有的步骤是不能移动顺序的,一步一步输入命令完成即可,一定要准确的复制、粘贴,不要复制到空格、前后字符等命令以外的任何字符

==============================

四、更新及优化系统

购买VPS时已经选择了安装系统,首先我们要输入指令更新系统:

4-1、更新系统及设定时区

输入:

dpkg-reconfigure tzdata && apt update && apt -y upgrade

然后,回车执行

注:以下每个命令输入后都要按[Enter] 回车执行,下面不再重复注明。

弹出窗口

自建最强科学上网2:V2Ray + Caddy + Tls + WebSocket

在出现的窗口中,这里可选择时区:

用键盘上下键,选择:
–> Asia,回车
再选择
–> Hong Kong 回车

之后就会下载更新

自建最强科学上网2:V2Ray + Caddy + Tls + WebSocket

自建最强科学上网2:V2Ray + Caddy + Tls + WebSocket

安装过程中,在命令框中可看到不断的数据变化,最下方有进度显示,至100%很快完成。

4-2、时间校准

据v2ray官方介绍:对于 V2Ray,它的验证方式包含时间,就算是配置没有任何问题,如果时间不正确,也无法连接 V2Ray 服务器的,服务器会认为你这是不合法的请求。所以系统时间一定要正确,只要保证时间误差在90秒之内就没问题。

当然一般来说,你的电脑、VPS服务器本身是会自动调准时间的,时间一般是准确的,为了避免可能的时间误差,可以在此先调整时间。

可以执行命令 date -R 查看时间:
输入:

date -R

会显示出,如:
Sun, 22 Jan 2017 09:10:36 -0500

显示的结果中的 -0500 代表的是时区为 西5区,如果转换成 东8区时间则为 2017-01-22 22:10:36

对VPS的时间校准之后,自己的个人电脑时间也要调准,电脑时间调准这里不再赘述,网上方法很多。

然后,这里要检查的是VPS服务器和自己电脑(客户端)的“时间误差”,时区差异没有关系,因为 V2Ray 会自动转换时区,但是时间一定要准确,即时间误差在90秒之内。

也就是说:我们要重点看的是自己电脑时间的 “分”和“秒”,以及上例中的 “10:36”,比较两者相差不能超过 90秒,这是一般情况,如果两者相差在小时位,那种情况差异就很少了。

如果时间不准确,可以使用 date --set 修改时间:
如要修改时间为2017-01-22 16:16:23,则输入:

sudo date --set="2017-01-22 16:16:23"

会显示出,如:
Sun 22 Jan 16:16:23 GMT 2017

4-3、用nano编辑器打开sysctl.conf配置文件

nano是Linux的一款文本编辑器,如同windows系统中的记事本、写字板、EmEditor等文字编辑器一样的作用。

输入

nano /etc/sysctl.conf

编辑器打开后会有一个#绿色光标,这是可输入内容的位置,都是象这样子:
自建最强科学上网2:V2Ray + Caddy + Tls + WebSocket

请注意一下使用nano编辑器和粘贴命令的规范操作,新手常常输入出错:
打开编辑器后,在#绿色光标处,先按enter回车,就会增加一空行;
再按“左方向键←” 让绿色光标上移到空行处;
然后,点鼠标右键,在右键菜单中点“粘贴”,不要使用ctrl+v来粘贴;
这样就可以看到上述设置内容粘贴到nona编辑器中新增的空行处了。

请记住:以下nano编辑操作都要如上所述。

4-4、调整系统控制参数

为代理服务器优化配置,将以下配置内容粘贴到上面命令打开的/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

4-4、退出nano编辑状态

注:下面凡是用到nano编辑命令的,退出nano编辑状态都是这个办法。

输入上述内容后,如何退出nano编辑状态

同时按  Ctrl + X
若询问你是否储存档案 (Save modified buffer?  (Answering "No" will DISCARD changes.)) ,
输入 y 
再按  Enter(回车),就可以退出nano编辑状态了。

4-5、激活更改

输入:

sysctl -p

4-6、编辑安全限制配置文件

4-6-1、将文件数限制增加到51200
输入

nano /etc/security/limits.conf

如上所述,打开编辑器后,在#绿色光标处,先按enter回车,就会增加一空行;
再按“左方向键←” 让绿色光标上移到空行处;
然后,点鼠标右键,在右键菜单中点“粘贴”,不要使用ctrl+v来粘贴;
这样就可以看到上述设置内容粘贴到nona编辑器中新增的空行处了。

* soft nofile 51200
* hard nofile 51200

然后,同时按 Ctrl + X,再按y,再按 Enter(回车),退出nano编辑状态。

4-6-2、将当前文件数限制设置为51200
输入:

ulimit -SHn 51200

4-6-3、编辑永久配置文件:
输入:

nano /etc/profile

如上所述,打开编辑器后,在#绿色光标处,先按enter回车,就会增加一空行;
再按“左方向键←” 让绿色光标上移到空行处;
然后,点鼠标右键,在右键菜单中点“粘贴”,不要使用ctrl+v来粘贴;
这样就可以看到上述设置内容粘贴到nona编辑器中新增的空行处了。

ulimit -SHn 51200

然后,同时按 Ctrl + X,再按y,再按 Enter(回车),退出nano编辑状态。

五、安装 Caddy

5-1、先安装Web数据传输实用程序curl

输入:

apt install curl -y

继续安装直到完成。

补充:有的系统需要安装 unzip 和 daemon,后面会用到,这里可以先安装

输入:

apt install unzip daemon

会显示:
Processing triggers for man-db (2.7.5-1) ...
Processing triggers for mime-support (3.59ubuntu1) ...
Setting up daemon (0.6.4-1) ...
Setting up unzip (6.0-20ubuntu1) ...

5-2、安装Caddy个人使用版本

说明:因caddy停止下载v1版,本教程修正此替代安装方法,文件为官方原版,安装连接由美博产生,是安全可靠的。但此处安装链接可能不定时改变,敬请安装时,浏览本文当下的安装指令。

依次输入:

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

5-3、确定caddy文件安装在何处

输入:

whereis caddy

显示为:
root@vmi:~# whereis caddy
caddy: /usr/local/bin/caddy

5-4、赋予所有权和权限

#root拥有caddy文件防止其他账户修改
输入:

chown root:root /usr/local/bin/caddy

#修改权限为755,root可读写执行,其他账户不可写
输入:

chmod 755 /usr/local/bin/caddy

5-5、允许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

如果没有此提示,就不用此步。

5-6、www-data的组和用户

检查名为www-data的组和用户是否已经存在
输入:

cat /etc/group | grep www-data

显示为:
root@vm:~# cat /etc/group | grep www-data
www-data:x:33:

输入:

cat /etc/passwd | grep www-data

显示为:
root@vm:~# cat /etc/passwd | grep www-data
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin

注意:你的显示结果与上面一样,不需要下面输入,如果显示不一样、其组和用户不存在,则需要创建它们:
输入:

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

5-7、为 Caddy 创建目录

#创建文件夹存储Caddy的配置文件
输入:

mkdir /etc/caddy

#创建文件夹存储Caddy所管理的站点证书
输入:

mkdir /etc/ssl/caddy

#允许root及www-data组访问相关文件,允许Caddy写入站点证书文件夹
依次输入【每输入一行都要回车(按[Enter])】:

chown -R root:root /etc/caddy
chown -R root:www-data /etc/ssl/caddy
chmod 770 /etc/ssl/caddy

#创建记录文件
依次输入【每输入一行都要回车(按[Enter])】:

touch /var/log/caddy.log
chown root:www-data /var/log/caddy.log
chmod 770 /var/log/caddy.log

六、创建网站(网页)

6-1、为您的网站创建目录

#如果默认站点根目录不存在,创建以下文件夹
输入:

mkdir -p /var/www/html

#允许www-data组拥有站点文件夹
输入:

chown -R www-data:www-data /var/www

#创建空的Caddy配置文件
输入:

touch /etc/caddy/Caddyfile

6-2、向网站添加内容

基本上有二种方式,一种是建立一个简单的网页,另一种是建立一个实实在在的简易网站,可以装一些内容。当用域名访问时,是可以看到真实内容的。美博这里先介绍创建一个简单网页的方法。

6-2-1、创建网站方法

这里只是给朋友们提供一个思路去自己处理:

本方法的掩护网站建立的位置在 /var/www/html/ 目录中,其中网页启动文件是 index.html。
了解网站的网友知道,你自己可以在网上找到很多网站模板(主题)程序,到处都有网站模板(主题)演示,下载一个模板(主题)后,把其全部文件(只要里面的内容文件,不要模板(主题)名目录)复制到 /var/www/html/ 目录中,其中的 启动文件 index.html 一定要在 html/ 目录下,不要放在其它子目录中,就OK了。

如何将本地电脑的网站模板文件上传到指定的服务器 /var/www/html/ 目录中,请参考教程:

WinSCP:连接远端服务器的管理传输工具的使用教程

建议:不要变动以上的网站目录结构(路径),不然就可能需要更改目录路径和重新设置安装本文一些其它步骤。

6-2-2、创建一个网页

这个方法简单,可以广泛采用这个方法。

先特别说明:里面的中文字内容,请不要千篇一律的复制,可任意改为你自己编辑的独一无二的、普通的、无敏感词的内容,如:诗词、图片、外文等等,

6-2-2-1、首先创建一个作为掩护的真正的网页

输入:

touch /var/www/html/index.html

6-2-2-2、编辑网页文件
输入:

nano /var/www/html/index.html

将以下内容粘贴到 #绿色光标处

<!DOCTYPE html>
<html>
<head>
<title>Hello</title>
</head>
<body>
<h1 style="font-family: sans-serif"> 这里是标题,这些中文字可改为你自己的任何语言的任何内容 </h1>
这里是网站网页正文内容,
这些中文字可改为你自己的任何语言的任何内容
添加多少内容都可以
代码部份不要改动,是一个简易网页的结构
网站网页正文内容-结束
</body>
</html>

注:图片加入的格式为:<img src="你的图片链接" />,可以加入多张图片,图文并茂更好,图片插入的位置可以在你的正文内容(即上例所示的中文字部份)的“任意”位置。

总之,就是改为你自己知道的唯一的内容, 重申:其中不要有敏感字词

同上【4-2、调整系统控制参数】所述:nano编辑器和粘贴的的规范操作:
打开编辑器后,在#绿色光标处,点鼠标右键,在右键菜单中点“粘贴”,不要使用ctrl+v来粘贴;
这样就可以看到上述设置内容粘贴到nona编辑器中新增的空行处了。

然后,按老规矩退出nano编辑状态:
同时按 Ctrl + X
若询问你是否储存档案,按下 y
再按 Enter(回车),退出nano编辑状态。

七、设置SystemD服务

7-1、安装SystemD服务,配置 caddy.service

由于caddy准备抛弃caddy v1,所以后来的配置文件一改再改。我们自己来创建这个配置文件,比较稳妥实用,这个就不依赖于 caddy.service 的官方下载。

1)、创建 caddy.service 空文件

输入:

touch /etc/systemd/system/caddy.service

2)、在nano编辑器中打开caddy.service

输入:

nano /etc/systemd/system/caddy.service

3)、编辑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

然后,按老规矩退出nano编辑状态:
同时按 Ctrl + X
若询问你是否储存档案,按下 y
再按 Enter(回车),退出nano编辑状态。

7-2、设置caddy.service权限

输入:

chown root:root /etc/systemd/system/caddy.service

输入:

chmod 644 /etc/systemd/system/caddy.service

7-3、重载systemd使其检测到新安装的Caddy服务

输入:

systemctl daemon-reload

八、安装 官方版 V2Ray

8-1、安装官方V2Ray

美博提醒:
网上有一些安装v2ray的一键安装包,美博在此郑重提醒网友:最好是直接安装官方版V2Ray,就是美博本教程用到的方法,其实就是一条命令,并不复杂。
网上有些一键安装包只会省略很少的步骤,但安装包里面却有一些特别的设置,如过滤了一些海外敏感网站、植入广告、后门等等,这对网友并非都适用,切记!

输入:

wget https://install.direct/go.sh

输入:

bash go.sh

在此步安装结束时,可看到自动生成的 PORT 和 UUID。 看起来像这样:

PORT:33888
UUID:a1199f80-a920-437b-9531-7f86b62533a0

UUID:就是密码,请将 Port 和 UUID 这二项资料复制保存记录下来,这个不能错。在下面设置服务器配置和设置客户端配置时都会用到。

当然,这个 PORT 和 UUID 也是自己可以随意修改的,熟练的网友可自行设置其值。不熟悉的网友,就记住这个自动生成的、直接使用就最好,免得麻烦。

此程序脚本会自动安装以下文件:
    /usr/bin/v2ray/v2ray:V2Ray 程序;
    /usr/bin/v2ray/v2ctl:V2Ray 工具;
    /etc/v2ray/config.json:配置文件;
    /usr/bin/v2ray/geoip.dat:IP 数据文件
    /usr/bin/v2ray/geosite.dat:域名数据文件 此脚本会配置自动运行脚本。自动运行脚本会在系统重启之后,自动运行 V2Ray。目前自动运行脚本只支持带有 Systemd 的系统,以及 Debian / Ubuntu 全系列。

运行脚本位于系统的以下位置:
    /etc/systemd/system/v2ray.service: Systemd
    /etc/init.d/v2ray: SysV

8-2、编辑 V2Ray 服务器配置文件

1)、备份原有的服务器配置文件:
输入:

cp /etc/v2ray/config.json /etc/v2ray/config.json.bak

2)、清空原有内容并打开配置文件:
输入:

rm /etc/v2ray/config.json && nano /etc/v2ray/config.json

---- 下面这段说明非必需操作,作参考-----------

请注意:有的网友可能会多次编辑这个配置文件时,那么:
上面这个rm命令是要清空配置文件里的原有内容,然后nano打开编辑器,这样的话里面是空的,方便网友直接把配置文件粘贴進去就好。
当,若是只想对原有配置文件進行细节修改、或者查看,就不要加上rm删除命令,只要下面命令即可:

nano /etc/v2ray/config.json

然后用键盘上的四个方向箭头来移动光标位置,用Backspace键来向前删除要修改的内容。
----------------------------------------

3)、将自己的v2ray服务器配置文件内容编辑進去:

这里要做的是,修改下面配置文件的 "port"、"id"、"path" 这三个参数,修改为你自己的,然后,再把修改好的文件粘贴進编辑器中。

  请注意:
1)其中的端口(PORT) 33888 与 UUID:a1199f80-a920-437b-9531-7f86b62533a0 这一串必须改为你自己上面生成的PORT和UUID,即上面“8-1、安装V2Ray”生成的;
2)若不熟悉,请务必小心不要改动到代码其它部分,包括不小心增减空格、符号、字母等等。
3)其中的 "path": "/vv22",这个“/vv22” 是可以随意修改为你自己的,但要记住,在后面的配置及客户端配置时要设置一致就行。

将以下修改好的内容粘贴到 编辑器的 #绿色光标处:

{
  "log": {
    "access": "/var/log/v2ray/access.log",
    "error": "/var/log/v2ray/error.log",
    "loglevel": "warning"
  },
  "inbounds": [
    {
      "listen": "127.0.0.1",
      "port": 33888,
      "protocol": "vmess",
      "settings": {
        "clients": [
          {
            "id": "a1199f80-a920-437b-9531-7f86b62533a0",
            "alterId": 64
          }
        ]
      },
      "streamSettings": {
        "network": "ws",
        "wsSettings": {
          "path": "/vv22"
        }
      }
    }
  ],
  "outbounds": [
    {
      "tag": "direct",
      "protocol": "freedom",
      "settings": {}
    },
    {
      "tag": "blocked",
      "protocol": "blackhole",
      "settings": {}
    }
  ],
  "routing": {
    "domainStrategy": "AsIs",
    "rules": [
      {
        "type": "field",
        "ip": [
          "geoip:private"
        ],
        "outboundTag": "blocked"
      }
    ]
  }
}


美博园(allinfa.com)再次提示:
以前有新手遇到的问题就是复制、粘贴代码时无意间多了一些标点符号、空格等,从而导致安装出现问题;如:
"id": "ewer735c-e888-40cc-8ded-1fe74d715c75"   即:双引号中的字符间全部没有空格;
"id": " ewer735c-e888-40cc-8ded-1fe74d715c75"  这个" ew之间多了一个空格,就会出错;
"/vv22" 这是对的,字符间全部没有空格;
" /vv22" 多了空格,会出错 
"/ vv22" 多了空格,会出错   
"/vv22 " 多了空格,会出错   
" / vv22" 多了空格,会出错

8-3、启动和测试V2Ray

8-3-1、启动V2Ray

输入:

systemctl daemon-reload
systemctl start v2ray

8-3-2、检查V2Ray是否正在运行

输入:

systemctl status v2ray

你应该看到这样子的结果,如看到如下绿色字 active (running),表明 v2ray已经启动:

自建最强科学上网2:V2Ray + Caddy + Tls + WebSocket

注意:查看v2ray状态后,SSH窗口的命令输入光标可能消失,即:没有了 root@vultr:~#(本例如此,你的服务器vultr这个名会不同),无法输入下一个命令
这时,请参考前文:SSH连接软件-Xshell下载及使用教程 - 美博园 之 3、“打开”建立的SSH连接
即:重新打开SSH连接到服务器,就会在新建的SSH连接中出现 root@vultr:~#  ,可以输入下一个命令了。

8-4、若V2Ray不能启动的几项检查

注:若V2Ray正常启动,不需要此步检查;若不能启动,可用下面几项命令,检查问题出在哪里?

检查V2Ray配置文件是否正确
输入:

/usr/bin/v2ray/v2ray -test -config=/etc/v2ray/config.json

如无问题,应该看到一条消息,“配置成功”"Configuration OK."。若有问题,请查看其中说明问题出在哪里?并在网上搜索找寻解答。

root@vm:~# /usr/bin/v2ray/v2ray -test -config=/etc/v2ray/config.json
V2Ray 4.21.3 (V2Fly, a community-driven edition of V2Ray.) Custom
A unified platform for anti-censorship.
Configuration OK.

也可输入下面命令检查 journal 日志:

journalctl -u v2ray

8-5、修改 V2Ray 配置会用到的相关命令 -- 此节只是说明

注:此节内容不需要接上下步骤操作,只是修改配置文件时才需要

若v2ray没有正常启动,或检查到前面的步骤中某一步骤有输入错误等,要修改 v2ray配置文件 config.json,那么就会用到如下的一些命令:

修改前,
一般要先停止v2ray服务:

systemctl stop v2ray

然后,進入编辑状态進行修改v2ray配置文件config.json,保存退出编辑。

修改完成后:

重载systemd使其检测到新安装的v2ray服务

systemctl daemon-reload

启动v2ray服务:

systemctl start v2ray


重启v2ray服务:

systemctl restart v2ray

查看启动状态

systemctl status v2ray

若不需要、或安装错误v2ray服务,可卸载再重新安装
卸载v2ray服务:

systemctl uninstall v2ray

九、配置 Caddy

9-1、加入Caddy配置文件

输入:

nano /etc/caddy/Caddyfile

请注意,先要修改下面紫红色标记处内容,即:域名、信箱、路径、端口,这4项要改为你自己的特定配置(下面有详细说明)

然后,再将内容粘贴到编辑器的 #绿色光标处。

这里举例用域名:abcdef.com

https://abcdef.com {
    redir https://abcdef.com{url}
}
https://abcdef.com {
    tls 12345@gmail.com
    log /var/log/caddy.log
    root /var/www/html
    proxy /vv22 127.0.0.1:33888 {         
      websocket
      header_upstream -Origin
    }
}

然后,同时按 Ctrl + X,再按y,再按 Enter(回车),退出nano编辑状态。

说明:
1)abcdef.com:改为你自己的域名,域名前要不要加www都可,即abcdef.com和www.abcdef.com都可以,但在所有配置中一定要一致就行;
2)12345@gmail.com:改为你自己的邮箱,Caddy将自动与Let's Encrypt联系以获取SSL证书并在90天到期后自动更新证书;
3)proxy /vv22 127.0.0.1:33888
此行的含义是:路径分流,流量转发,将443端口在/v2ray路径收到的流量转发给33888端口,在后面我们会让v2ray监听33888这个端口;
/vv22 是路径,这个路径可以是/,也可自己指定的任何字母数字组合,但一定要与上面v2ray服务器配置文件中的路径相同,以及后面的客户端配置路径相同;
33888 这个端口也要改成你自己在"8-1、安装V2Ray"时生成的端口;
4)Caddy将自动与Let's Encrypt联系以获取SSL证书。它将证书和密钥放在“/etc/ssl/caddy/acme/acme-v02.api.letsencrypt.org/sites/你自己的域名/”目录中;
5)此文件保存后,Caddy会随即向Let's Encrypt发出SSL证书申请,一般很快在一分钟就可完成,但可能有人会遇到特殊情况比较久一些才会完成。
5)其中的mail,是申请证书用的,用真实的mail可以得到到期通知等,当然Caddy是自动续期,随意填一个mail,注意mail的格式,也是可以的。

这里补充说明关于证书安装的问题:
caddy安装证书一般都没有问题,美博在测试教程和实用已经安装过很多次都没有遇到过证书安装问题,基本上也是即刻生效。但有时网友还是会遇到问题,如:
有时候网友遇到证书安装问题,就在短时间内反复安装,但证书安装是有时间次数限制的,请参考:Let’s Encrypt 证书颁发的速率及次数限制
如果一个域名的证书反复安装有问题,美博建议可以换一个域名(或二级域名)再行安装,当然这个二级域名等事先解析好;
少数情况会遇到域名解析很长时间(几个小时甚至更长)还没有生效,这样的域名(二级域名)也是无法安装证书的,为避免这种情况发生,在安装完系统得到主机ip后,建议网友即刻先進行域名解析,多做几个二级域名一起解析,这样到后面这些步骤时就可以多几个选用。

9-2、赋予Caddy配置文件权限

#给它适当的所有权和权限:
输入:

chown root:root /etc/caddy/Caddyfile

输入:

chmod 644 /etc/caddy/Caddyfile

9-3、启动Caddy

输入:

systemctl start caddy

9-4、检查Caddy启动状态

#检查Caddy是否正在运行并且正在侦听端口80和443上的输入:
输入:

systemctl status caddy

你应该看到这样子的结果,如看到如下绿色字 active (running),表明 caddy已经启动:
自建最强科学上网2:V2Ray + Caddy + Tls + WebSocket

9-5、检查SSL证书是否生效及效果

上面Caddy配置是否生效,SSL证书是否已经生成,到这里要进行检查,这在trojan构建时是需要做的。因为SSL证书没有生成,后面是不能成功搭建trojan代理的。而且,上面这一步的Caddyfile配置是专为你的域名生成证书,在后面会删除这个设置,所以,这一步一定要检查SSL证书已经生成才可以往下面的步骤走。

检查很简单:

1)、在浏览器中用 https://你的域名,即:
https://abcdef.com 注:要改为你的域名
我们设置有转向,http也测试:
https://abcdef.com 注:要改为你的域名

2)、如果要進一步看看SSL效果,可以在 SSL Labs网站查看

https://www.ssllabs.com/ssltest/

在其中输入自己的域名,可以检测一下https配置评分。

9-6、自启动Caddy

若上一步启动无问题则可启用开机自启动Caddy
输入:

systemctl enable caddy

显示为:
Created symlink /etc/systemd/system/multi-user.target.wants/caddy.service → /etc/systemd/system/caddy.service.

9-7、Caddy没有正常启动的记录查看

注:若上面caddy已正常启动,不用操作此步;若有错,再用此步查原因

# 检查Caddy配置文件Caddyfile是否有错
输入:

caddy -agree -conf /etc/caddy/Caddyfile

# 如果Caddy无法正常启动,则可以查看日志数据以帮助找出问题:
输入:

journalctl --boot -u caddy.service

# 如果启动失败,下面命令也可以查看Caddy日志:

tail -f /var/log/caddy.log
注:这个会显示最后10行的日志记录
tail -n 30 /var/log/caddy.log
注:这个会显示最后30行的日志记录,30数字自己可据情况改变

9-8、修改 Caddy 配置会用到的相关命令 -- 此节只是说明

注:此节内容不需要接上下步骤操作,只是修改配置文件时才需要

若caddy没有正常启动,检查到前面的步骤中某一步骤有输入错误等,要修改 Caddyfile、caddy.service等等文件,那么就会用到的一些命令:

修改前,
一般要先停止Caddy服务:

caddy -service stop

然后,重复9-1、加入Caddy配置文件,进入编辑状态进行修改。
修改完成后:

重载systemd使其检测到新安装的Caddy服务

systemctl daemon-reload

启动Caddy服务:

caddy -service start


重启Caddy服务:

caddy -service restart

查看启动状态

systemctl status caddy

若不需要、或安装错误Caddy服务,可卸载再重新安装
卸载Caddy服务:

caddy -service uninstall

十、防火墙简易设置

为了增强安全性,下面介绍防火墙的简易设置,请接着上面的步骤继续完成下面的设置。

请根据你的系统是 Ubuntu 或 debian 来选择设置,二者防火墙设置方式不同。

10-1、Debian 系统 开启防火墙及端口设置

如果你使用的是 Debian 系统,请按照下面的设置,不适用于Ubuntu系统和Centos系统

1)安装UFW
Debian默认不安装UFW,使用apt安装:

apt install ufw

2)设置默认策略
要设置UFW使用的默认值,使用以下命令:
输入:

ufw default deny incoming

再输入:

ufw default allow outgoing

3)允许SSH连接
允许端口22上的所有连接

ufw allow 22

如果有的VPS服务器的SSH使用其他端口,则必须指定相应的端口。例如,除了常用的22外,也有些使用2222 ,则可以使用此命令允许该端口上的SSH连接:

ufw allow 2222

4)启用UFW
在允许了SSH后,才启用UFW,不然SSH连接会断开
要启用UFW,使用以下命令:

ufw enable

会询问是否安装,
Command may disrupt existing ssh connections. Proceed with operation (y|n)?

输入 y

完成安装会显示:
Firewall is active and enabled on system startup

5)打开常用端口

翻墙会用到 端口80、443
依次输入【每输入一行都要回车(按[Enter])】:

ufw allow 80
ufw allow 443
特别说明:
关于你自己的端口(本教程例举为 3388833888 / TCP(出站):连接到GPG密钥服务器端口
按理是不需要打开这个v2ray服务器端口的,美博在测试时曾经遇到过不打开这个端口就不能上网的情况,因没有重复确定原因,就写上了这一句。如果你的上网不打开这个端口,先不设置打开这个端口,可以上网就不要打开。如果打开后才能上网,才开启这个端口。
ufw allow 33888
 (这里的33888改为自己的v2ray服务器端口)

至此,Debian 系统 防火墙设置完成

10-2、Ubuntu 系统 开启防火墙及端口设置

如果你使用的是 Ubuntu 系统,请按照下面的设置,不适用于Debian系统和Centos系统

因我们只是用于翻墙,需要打开这几个端口 port: 22, 80, 443

    22 / TCP(入站/出站):标准SSH端口
    80 / TCP(入站/出站):标准HTTP端口
    443 / TCP(入站/出站):标准HTTPS端口

用下面的命令打开这几个 port

依次输入【每输入一行都要回车(按[Enter])】以下指令:

ufw allow 22
ufw allow 80
ufw allow 443
特别说明:
关于你自己的端口(本教程例举为 3388833888 / TCP(出站):连接到GPG密钥服务器端口
按理是不需要打开这个v2ray服务器端口的,美博在测试时曾经遇到过不打开这个端口就不能上网的情况,因没有重复确定原因,就写上了这一句。如果你的上网不打开这个端口,先不设置打开这个端口,可以上网就不要打开。如果打开后才能上网,才开启这个端口。
ufw allow 33888
 (这里的33888改为自己的v2ray服务器端口)

再输入命令启用防火墙

ufw enable

会提问:
root@vultr:~# ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)?

问是否真的启用防火墙 enable firewall,并警告如果设定不当会断线。因我们已经启用 allow port 22 ,所以没有问题,

按下 y  再回车

就可以了。

至此,Ubuntu 系统 防火墙设置完成

9-6、退出SSH

至此,前面所有设置完成,可以退出 SSH连接了
输入:

exit

或者 直接关闭 X-shell

至此,所有服务器端设置全部完成,下面進行客户端和浏览器设置

十三、客户端配置 - V2RayN

先说明一件事,因v2ray日渐成熟,其可用的客户端软件也比trojan和NaiveProxy要多,选择余地比较大。

前文:
v2ray客户端代理上网 - Windows、Android、Mac、ios 
介绍了一些主要的各个系统的v2ray客户端软件,关于前文内容有几点说明:
1)该文是几年前介绍客户端专文,可参考,其中参数设置不能照做;
2)有些客户端软件已经比较长时间没有更新,而v2ray要求客户端版本要等于或高于服务器端版本,所以,新安装v2ray网友,因你的服务器端是最新版本,那么你的客户端(电脑端)软件版本也必须更新到最新版本。如果是旧版本的客户端就“有可能”无法正确联网。所以,参照前文中的客户端介绍选择时,请务必看看它们的更新时间。
3)v2ray的配置文件设置很多样化,前文中介绍的配置文件参数,不一定适合我们更新后的各个版本教程的设置。所以,本教程的参数设置必须按照本教程的说明设置,不能参考前文進行设置。

本教程,我们选择用 V2RayN 作为windows电脑端的客户端使用程序来说明,手机及Mac电脑端设置参数也要参考下面介绍的设置。

13-1、V2RayN 客户端软件下载,

1) 要下载v2ray官方提供的核心程序 v2ray-core
下载地址:

https://github.com/v2ray/v2ray-core/releases

根据自己的系统选择相应的版本下载,如windows 64位系统,就选择 v2ray-windows-64.zip

是绿色软件,无需安装,可解压到任何地方使用。官方文件压缩包解压时最好先要生成一个文件夹,如:v2ray,或解压成文件夹,将下载的v2ray-windows-64.zip全部解压到这个文件夹,但官方版没有图形界面,只有核心程序。

为了便于直观操作,还需要下载图形界面程序,如下

2) 下载图形界面程序V2RayN

v2rayN 图形界面客户端下载地址是:

https://github.com/2dust/v2rayN/releases

现在v2rayN发布有二个文件,供网友自己选择其一使用:

一个是:v2rayN-Core.zip
这个里面已经包含有v2rayN发布时最新的v2ray官方核心程序 v2ray-core,如果下载此文件,就不需要上面一步下载v2ray官方核心程序;
这一个版本的优点是方便,已经整合了全部文件;缺点是有可能 v2ray官方核心程序 v2ray-core不是最新的;

另一个是:v2rayN.zip
这个里面没有v2ray官方核心程序 v2ray-core,需要把其解压到上一步v2ray-core的同一个文件夹中,如v2ray,即将二个压缩包文件 v2rayN.zip 和 v2ray-windows-64.zip 解压整合在同一个文件夹中。
这一个版本缺点是需要自己整合,优点是v2ray官方核心程序 v2ray-core和图形界面v2rayN程序都会是最新版的;

请注意:本程序运行需要.NET Framework 4.6及以上,若没有请下载:

https://docs.microsoft.com/zh-cn/dotnet/framework/install/guide-for-developers

3)启动客户端
在v2ray文件夹中找到 v2rayN.exe
双击v2rayN.exe,即可启动v2ray

启动之前,需要先配置各项参数才能使用。

13-2、配置参数:

主要有二个页面需要设置:

1)服务器参数设置

打开(启动)v2rayN程序,“服务器”栏目设置,如下图:

自建最强科学上网2:V2Ray + Caddy + Tls + WebSocket

本方法的客户端配置参数,略有修改,如图所示:

自建最强科学上网2:V2Ray + Caddy + Tls + WebSocket

按照上图填写好自己的v2ray参数后,点“确定”,就会生成客户端的配置文件config.json。

请注意:
其中的参数填写,必须与上面服务器配置的参数完全相同,即:域名、端口、路径、UUID等要完全一致。
关于加密方式(security): 
加密方式,是客户端将使用配置的加密方式发送数据,服务器端自动识别,无需配置。
加密方式有4种:"aes-128-gcm" | "chacha20-poly1305" | "auto" | "none"
"aes-128-gcm":推荐在 电脑(PC)上使用
"chacha20-poly1305":推荐在手机端使用
"auto":默认值,将自动选择加密方式(运行框架为 AMD64、ARM64 或 s390x 时为aes-128-gcm加密方式,其他情况则为 Chacha20-Poly1305 加密方式)
"none":不加密,不推荐
推荐使用"auto"加密方式,这样可以永久保证安全性和兼容性。
关于额外ID(alterId): 
这是为了进一步防止被探测,用户可以在主 ID 的基础上,再额外生成多个 ID。这里只是指定额外的 ID 的数量。
alterId 取值的大小和流量特征没有必然联系。
官方原则要求:这个值在客户端的配置不能超过服务器端所指定的值。即:若服务器端 alterId 为 64,客户端的 alterId 就必须 ≤64 
这个值可以自行设置,对于一般使用,其 16 以内的值已经够用了,推荐值为 32 或 16。不指定的话,默认值是 0 ,最大值 65535。一般设置为 64、32 的居多,基本上以前大家多设置为64。
对于小内存的客户端设备(路由器等)可视情况调低alterid减少内存消耗。
这里要说明:
官方说这个值在客户端不能超过服务器端所指定的值。
但事实上,美博测试过客户端alterid低于服务器是可以正常使用的,如服务器端设为32,客户端设为64,代理完全可以正常运行。当然美博还是建议按照官方要求的设置,设置为一致。

2)“参数设置”栏自定义设置浏览器代理端口

仍然在v2rayN打开状态下,点上面的“参数设置”,只有一处自己设置,就是设置本地监听端口,即浏览器的v2ray代理端口,v2rayN程序默认的这个端口是 10808,这个端口需要修改为你自己的。

如,本教程中设置的端口是 1080,这里需要修改为 1080

如下图所示,记住设置完成后要点最下面的 “确认”

自建最强科学上网2:V2Ray + Caddy + Tls + WebSocket

附注:
Mux 多路复用
默认是开启的。一般建议开启。
Mux 功能是在一条 TCP 连接上分发多个 TCP 连接的数据。Mux 是为了减少 TCP 的握手延迟而设计,而非提高连接的吞吐量。使用 Mux 看视频、下载或者测速通常都有反效果。Mux 只需要在客户端启用,服务器端会自动适配。

3)“设为活动服务器”

如果你自建有多个v2ray,可以在v2rayN界面上“服务器”一栏选择自己要用的那个“设为活动服务器”,并且可以测试其速度等几项联网数据。
如图所示:
自建最强科学上网2:V2Ray + Caddy + Tls + WebSocket

十四、浏览器设置与代理上网

14-1、浏览器代理参数设置

在浏览器中设置 v2ray代理为: socks5 127.0.0.1:1080

本系列教程中,v2ray、trojan、NaiveProxy的代理都是默认 socks5 127.0.0.1:1080

请注意:v2ray 代理 支持广泛的协议,并不像 trojan只单独承认socks5协议,那么在设置 socks5 127.0.0.1:1080 代理时,可选也可不选同时设置http、https等代理类型,设置了也不会报错。

基本代理设置方式,如图所示:

自建最强科学上网2:V2Ray + Caddy + Tls + WebSocket

请注意:

1)、在firefox68版,很多代理调度扩展不能再使用(如 Gproxy代理扩展),美博的Firefox纯净绿色版、chrome纯净版,都已经用另外的代理扩展,如 Little Proxy 或/和 Proxy SwitchyOmega设置有这个端口的v2ray、trojan、NaiveProxy代理,如果默默使用美博的浏览器,就不用另外设置了,请参考:

火狐浏览器_Firefox_68.8.0esr_美博纯净中文绿色版(20200513)
Google Chrome浏览器_v81.0.4044.138_美博园纯净绿色版(20200513)
火狐浏览器_Firefox_68.0.1esr_美博园纯净中文绿色版(更新)

2)、其他浏览器设置 v2ray代理,请参考上图设置代理。

3)、firefox57版之前的旧版firefox,可以使用以下介绍的方法设置firefox浏览器代理, 但是, 切记:在新版57版以后的firefox中,下面的代理扩展gproxy已经不起作用,请特别注意它可以设置代理却不起作用,这很糟糕!

请参考:firefox57版(含)之后都不能使用下面的:

GProxy:火狐(firefox)浏览器简便的代理调度扩展(v2.1) - 美博园
GProxy Plus 3.0和 3.1 版:Firefox浏览器简便的代理调度扩展(20180523) - 美博园

14-2、上网,查看ip

代理是不是设置好了?代理起作用没有,一般在“每次”使用时都应该自己先验证确认一下。
方法很多,如:

美博园主页右侧栏有上网ip显示
美博园上网代理IP地址查询检测
美博园IP地理信息查询
点進去就可以看到自己当前上网的代理ip地址及相关参数。

当然,你也可以通过其他方法检验。
其他方法请参考:如何查看自己上网的ip地址? - 美博园

十五、手机设置

前文介绍了很多可以在手机上使用的客户端软件,请参考:

v2ray客户端电脑和手机代理上网教程 - Windows/Android/苹果Mac/ios - 美博园

请注意:可以参考上文选择安卓、苹果手机上可使用的客户端,但是,不要按照那篇教程的设置参数去填写,因为每种代理方式的设置参数是不太一样的。只要是同方法,苹果手机的设置参数与安卓手机设置一样。

本方法以安卓手机的 v2rayNG 为例,说明设置参数如下:

自建最强科学上网2:V2Ray + Caddy + Tls + WebSocket

***
=== 自建最强代理 v2ray、trojan、NaiveProxy 系列文章参考 ===

美博点评:V2Ray、trojan、NaiveProxy代理的异同及相关问题 - 美博园
自建最强科学上网5:V2Ray + Caddy + Tls + HTTP/2 - 美博园
自建最强科学上网4:NaiveProxy + Caddy - 美博园
自建最强科学上网3:trojan + Caddy - 美博园
自建最强科学上网2:V2ray+Caddy+Tls+WebSocket - 美博园
自己搭建代理服务器:VPS的选择 - 美博园
自己搭建代理服务器:Vultr VPS 购买图文教程 - 美博园
自己搭建代理服务器:Vultr VPS 系统安装图文教程 - 美博园
自己搭建代理服务器:检测ip是否被墙及更换ip - 美博园
自己搭建代理服务器:域名购买及设置与ip服务器关联 - 美博园
SSH连接软件-Xshell下载及使用教程 - 美博园
WinSCP:连接远端服务器的管理传输工具的使用教程 - 美博园
其它参考:
v2ray客户端代理上网 - Windows、Android、Mac、ios - 美博园
谷歌Google搜索显示异常流量需进行人机身份验证的解决办法 - 美博园
Let’s Encrypt 证书颁发的速率及次数限制 - 美博园
Let's Encrypt SSL 证书安装不了的若干问题解决 - 美博园
如何开启Google TCP BBR 加速 - 美博园
V2ray自建代理遇到的一些问题及解决 - 美博园
原文链接:https://allinfa.com/v2ray-caddy-http2-websocket.html
原文标题:自建最强科学上网2:V2Ray + Caddy + Tls + WebSocket - 美博园
美博园文章均为“原创 - 首发”,请尊重辛劳撰写,转载请以上面完整链接注明来源!
软件版权归原作者!个别转载文,本站会注明为转载。

网 友 留 言

78条评论 in “自建最强科学上网2:V2Ray + Caddy + Tls + WebSocket”
  1. 哥哥我还要

    v2ray的安装脚本失效了 本文又又又又又要更新了 辛苦啦

  2. maka

    大佬,按你的教程搭建成功后不能使用tor浏览器,请问该怎么配置

    • 美博园

      @maka
      有这个问题,我们也遇到了,Toranger作者有过测试,v2ray的服务器会因为代理到某些tor的中继地址,如果连接不了或者连接速度过慢而断开重连,所以一直连不上,这是v2ray服务的问题,tor 这边没任何问题。

  3. lili

    一次成功,感谢大神,不知可不可以备份在github上

  4. 王文文

    您好,非常感谢您的最强科学上网系列文章,非常受用。能否写一个v2ray-http2的教程呢,貌似在中国大陆某些网络环境下v2ray+ws可以轻而易举的被阻断

  5. xiecheng

    caddy报错,这个是啥原因嘞

    root@instance-1:~# systemctl status caddy
    ● caddy.service - Caddy
    Loaded: loaded (/etc/systemd/system/caddy.service; enabled; vendor preset: enabled)
    Active: failed (Result: exit-code) since Thu 2020-05-14 13:16:34 UTC; 7s ago
    Docs: https://caddyserver.com/docs/
    Process: 31305 ExecStart=/usr/bin/caddy run --environ --config /etc/caddy/Caddyfile (code=exited, status=217/USER)
    Main PID: 31305 (code=exited, status=217/USER)

    May 14 13:16:34 instance-1 systemd[1]: Started Caddy.
    May 14 13:16:34 instance-1 systemd[31305]: caddy.service: Failed to determine user credentials: No such process
    May 14 13:16:34 instance-1 systemd[31305]: caddy.service: Failed at step USER spawning /usr/bin/caddy: No such process
    May 14 13:16:34 instance-1 systemd[1]: caddy.service: Main process exited, code=exited, status=217/USER
    May 14 13:16:34 instance-1 systemd[1]: caddy.service: Failed with result 'exit-code'.

  6. 俺认为,【习近平】必须【死亡】,【法轮功】必须【清除】,【郭文贵】必须【被抓】!周永康万岁,江泽民万万岁!

    • 美博园

      @编程随想
      糊涂呀,你已经被魔鬼附体了,才会说出这种鬼话!
      周永康是已经“万岁”了呀,你还不知道吗?在监狱、在地狱里万岁了!
      江鬼折命,更是会在地狱里进无生之门,永远万万岁!你要一起去吗?

    • 小狸猫

      @编程随想 要爱你们的仇敌.为那逼迫你们的祷告。这样、就可以作你们天父的儿子.因为他叫日头照好人、也照歹人、降雨给义人、也给不义的人。

  7. goldxpx

    博主,我在启动caddy的时候报错了,oot@instance-98:~# systemctl status caddy
    ● caddy.service - Caddy
    Loaded: loaded (/etc/systemd/system/caddy.service; enabled; vendor preset: enabled)
    Active: failed (Result: exit-code) since Thu 2020-04-09 11:07:28 HKT; 30s ago
    Docs: https://caddyserver.com/docs/
    Process: 30105 ExecStart=/usr/bin/caddy run --environ --config /etc/caddy/Caddyfile (code=exited, status=217/USER)
    Main PID: 30105 (code=exited, status=217/USER)

    Apr 09 11:07:28 instance-98 systemd[1]: Started Caddy.
    Apr 09 11:07:28 instance-98 systemd[30105]: caddy.service: Failed at step USER spawning /usr/bin/caddy: No such process
    Apr 09 11:07:28 instance-98 systemd[1]: caddy.service: Main process exited, code=exited, status=217/USER
    Apr 09 11:07:28 instance-98 systemd[1]: caddy.service: Unit entered failed state.
    Apr 09 11:07:28 instance-98 systemd[1]: caddy.service: Failed with result 'exit-code'.
    root@instance-98:~# lsof -i :80|grep -v "PID"
    google_ne 688 root 7u IPv4 88039 0t0 TCP instance-98.asia-east2-b.c.fleet-radar-273006.internal:52958->metadata.google.internal:http (ESTABLISHED)
    google_cl 689 root 5u IPv4 87975 0t0 TCP instance-98.asia-east2-b.c.fleet-radar-273006.internal:52954->metadata.google.internal:http (ESTABLISHED)
    google_cl 689 root 6u IPv4 87718 0t0 TCP instance-98.asia-east2-b.c.fleet-radar-273006.internal:52950->metadata.google.internal:http (CLOSE_WAIT)
    google_ac 692 root 5u IPv4 87967 0t0 TCP instance-98.asia-east2-b.c.fleet-radar-273006.internal:52952->metadata.google.internal:http (ESTABLISHED)
    caddy 28958 root 6u IPv6 74309 0t0 TCP *:http (LISTEN)
    root@instance-98:~# journalctl --boot -u caddy.service
    -- Logs begin at Thu 2020-04-09 09:26:03 HKT, end at Thu 2020-04-09 11:09:23 HKT. --
    Apr 09 10:23:45 instance-98 systemd[1]: Started Caddy.
    Apr 09 10:23:45 instance-98 systemd[28944]: caddy.service: Failed at step USER spawning /usr/bin/caddy: No such process
    Apr 09 10:23:45 instance-98 systemd[1]: caddy.service: Main process exited, code=exited, status=217/USER
    Apr 09 10:23:45 instance-98 systemd[1]: caddy.service: Unit entered failed state.
    Apr 09 10:23:45 instance-98 systemd[1]: caddy.service: Failed with result 'exit-code'.
    Apr 09 10:30:39 instance-98 systemd[1]: Started Caddy.
    Apr 09 10:30:39 instance-98 systemd[29115]: caddy.service: Failed at step USER spawning /usr/bin/caddy: No such process
    Apr 09 10:30:39 instance-98 systemd[1]: caddy.service: Main process exited, code=exited, status=217/USER
    Apr 09 10:30:39 instance-98 systemd[1]: caddy.service: Unit entered failed state.
    Apr 09 10:30:39 instance-98 systemd[1]: caddy.service: Failed with result 'exit-code'.
    Apr 09 11:07:28 instance-98 systemd[1]: Started Caddy.
    Apr 09 11:07:28 instance-98 systemd[30105]: caddy.service: Failed at step USER spawning /usr/bin/caddy: No such process
    Apr 09 11:07:28 instance-98 systemd[1]: caddy.service: Main process exited, code=exited, status=217/USER
    Apr 09 11:07:28 instance-98 systemd[1]: caddy.service: Unit entered failed state.
    Apr 09 11:07:28 instance-98 systemd[1]: caddy.service: Failed with result 'exit-code'.

    麻烦帮我分析下好吗?

    • goldxpx

      @goldxpx 我用的系统版本是debian9 因为用的google云 debian10不能连接ssh 我还没找到解决办法

    • 美博园

      @goldxpx
      再仔细检查一下配置文件包括标点符号和空格等。
      这应该是caddy.servic文件配置错误。
      也检查一下域名是否已经正确解析
      如果找不到原因,就重新安装系统,在干净系统上重新安装。caddy.service的安装路径,教程前几天有更新。

    • submarine

      @goldxpx 我有遇到了同样的问题
      Caddy.service 无法启动
      Loaded: loaded (/etc/systemd/system/caddy.service; enabled; vendor preset: en
      Active: failed (Result: exit-code) since Thu 2020-04-16 23:41:43 UTC; 6s ago
      Docs: https://caddyserver.com/docs/
      Process: 2291 ExecStart=/usr/bin/caddy run --environ --config /etc/caddy/Caddy
      Main PID: 2291 (code=exited, status=217/USER)

      按照教程检查过几遍,也安装过几遍,最后系统重装在干净的系统上配置,还是遇到这个问题。麻烦指教一下可能出现的问题可以吗

      • submarine

        @submarine 排查了一下原因,因为通过教程下载的caddy.service 是以caddy 2 的语法来写的,而这里使用的Caddy仍然是1 (1.04), 因此通过这里下载的caddy.servie (caddy 2的语法和caddy 1并不兼容)来启动caddy是不不会成功的。
        因此要对caddy.serice里面的命令做修改,或者用原来的1版本的caddy.service

    • submarine

      @goldxpx @submarine 排查了一下原因,因为通过教程下载的caddy.service 是以caddy 2 的语法来写的,而这里使用的Caddy仍然是1 (1.04), 因此通过这里下载的caddy.servie (caddy 2的语法和caddy 1并不兼容)来启动caddy是不不会成功的。
      因此要对caddy.serice里面的命令做修改,或者用原来的1版本的caddy.service

  8. gotoschool

    我也是配置好了, 网页可以正常访问,但是v2ray不能连接
    后来发现原来是自己把 客户端软件 端口写错了, 不是那个自己配置的端口:例如33888, 而是固定的 443, 这个教程截图是对的,
    但是这个其他客户端的 那个 连接的教程说的有点含糊, 说的是配置自己的端口
    https://allinfa.com/v2ray-client-windows-android-mac-ios.html
    折腾了好久
    其实是刚开始就一次搞定了, 谢谢站长

    • 美博园

      @gotoschool
      是的,二种方法的端口不同,自建2里面已经有客户端配置的教程图。原来那个客户端教程是与自建1配合写的。已经在原来那个自建1里面加上注释了。

  9. pata

    站长您好,我按照教程操作后,伪装的网页可以正常访问,但是v2ray不能连接
    caddy日志报错
    Feb 05 11:44:50 takune caddy[31359]: http: TLS handshake error from x.x.x.x:38292: tls: client offered only unsupported versions:Feb 05 11:44:51 takune caddy[31359]: http: TLS handshake error from x.x.x.x:38500: EOF
    Feb 05 11:44:51 takune caddy[31359]: http: TLS handshake error from x.x.x.x:38576: EOF
    Feb 05 11:44:51 takune caddy[31359]: http: TLS handshake error from x.x.x.x:38628: EOF
    Feb 05 11:44:51 takune caddy[31359]: http: TLS handshake error from x.x.x.x:38696: tls: client offered only unsupported versions:
    显示tls握手失败,不知道该如何解决

    • 美博园

      @pata
      这是说,你的客户端版本不支持。
      用最新版的教程中的客户端软件试试

      • gotoschool

        @美博园 我也遇到了这个问题,
        后来又 运行了 几行命令就好了
        ufw allow 33888
        systemctl restart caddy
        systemctl restart v2ray
        systemctl status caddy

        PS:我的端口也不是 33888, 而是其他值, 不知道设置这个33888有啥用

        不知是因为又设置 33888端口, 还是重启了服务,
        反正就没有那几个错误信息了
        TLS handshake error from x.x.x.x:25408: EOF

  10. qota

    看来另外一条回复丢了,我的环境是CentOS 7.7.1908
    在执行这条命令后,caddy -agree -conf /etc/caddy/Caddyfile
    caddy开始自动申请证书,但是最后出错了,报错信息如下
    acme: Obtaining bundled SAN certificate 2020/01/01 [INFO] [example.com] AuthURL: https://acme-v02.api.letsencrypt.org/acme/authz-v3/123
    2020/01/01 [INFO] [example.com] acme: Could not find solver for: tls-alpn-01 2020/01/01 [INFO] [example.com] acme: use http-01 solver
    2020/01/01 [INFO] [example.com] acme: Trying to solve HTTP-01 2020/01/01 [INFO] Deactivating auth: https://acme-v02.api.letsencrypt.org/acme/authz-v3/123
    2020/01/01 [INFO] Unable to deactivate the authorization: https://acme-v02.api.letsencrypt.org/acme/authz-v3/123
    2020/01/01 [INFO] [example.com] acme: Obtaining bundled SAN certificate
    2020/01/01 failed to obtain certificate: acme: error: 429 :: POST :: https://acme-v02.api.letsencrypt.org/acme/new-order :: urn:ietf:params:acme:error:rateLimited :: Error creating new order :: too many failed authorizations recently: see https://letsencrypt.org/docs/rate-limits/

  11. 阿龙

    您好,能否出一个v2ray-caddy-http2的教程
    非常感谢!

  12. Mikhail

    请教个问题,如果想让caddy不自动申请证书,而是使用cloudflare的origin certificates(搭配cloudflare使用,并确保只有cloudflare能访问服务器,其他人访问都会出现证书错误),改如何配置

  13. Kim

    ufw allow 33888,为什么要加上这条命令,不太明白,不加也正常运行

    • 美博园

      @Kim
      这个很奇妙,我们在测试时,有的服务器不用这个ufw allow 33888也行,但是有的服务器非要打开这个端口才能连接,所以,就写上了,其原因未知,那位网友知道呢?

  14. qota

    我以前都是手动申请配置证书的,自动的出错了完全不知道该怎么解决

    • 美博园

      @qota
      你说自动的出错了……,那就在nona写配置文件那一步,删除或修改原来的配置文件,重新写入新的配置文件就行。修改配置后,记得重新启动caddy和v2ray。

  15. qota

    我的系统是CentOS 7.7.1908 已yum upgrade更新过
    当我尝试运行这条命令时caddy -agree -conf /etc/caddy/Caddyfile
    caddy开始申请证书,结果申请失败,记录如下:
    acme: Obtaining bundled SAN certificate 2020/01/01 [INFO] [example.com] AuthURL: https://acme-v02.api.letsencrypt.org/acme/authz-v3/123
    2020/01/01 [INFO] [example.com] acme: Could not find solver for: tls-alpn-01 2020/01/01 [INFO] [example.com] acme: use http-01 solver
    2020/01/01 [INFO] [example.com] acme: Trying to solve HTTP-01 2020/01/01 [INFO] Deactivating auth: https://acme-v02.api.letsencrypt.org/acme/authz-v3/123
    2020/01/01 [INFO] Unable to deactivate the authorization: https://acme-v02.api.letsencrypt.org/acme/authz-v3/123
    2020/01/01 [INFO] [example.com] acme: Obtaining bundled SAN certificate
    2020/01/01 failed to obtain certificate: acme: error: 429 :: POST :: https://acme-v02.api.letsencrypt.org/acme/new-order :: urn:ietf:params:acme:error:rateLimited :: Error creating new order :: too many failed authorizations recently: see https://letsencrypt.org/docs/rate-limits/

    请问应该怎么解决?

  16. pope

    经过本人多次摸索,网上找资料,多次重装系统,终于搞定了,总结一下自己的经验:
    1、时间调整:先用命令 dpkg-reconfigure tzdata 调整好系统时间,再用 date -R 确认与电脑一致;
    2、升级系统及安装相关软件包(关键步骤):本人用的是网上找的教程里的命令 apt-get -y update && apt-get -y install unzip zip wget curl nano sudo ufw socat ntp ntpdate gcc git ,全程安装顺利,反馈下本站教程中的 apt upgrade 命令,单独使用的话,每次都有报错记录提示,不知具体是什么原因;
    3、本站教程中:“9-1、加入Caddy配置文件”中的详细配置文本 proxy /vv22 127.0.0.1:33888 后应该是少了一个 { ,建议站长检查下 (本人对照了多个网上相似教程的配置文本);
    4、另外建议站长可以考虑在以后教程中增加CDN的设置(比如cloudflare之类),进一步增加安全性。
    最后再次感谢站长的热心分享和耐心解答,也希望站长以后能出更多好的教程。

    • 美博园

      @pope
      1、非常感谢,很抱歉,一个小失误耽搁了大家不少时间,是少了一个括号,已经更正了。下次教程得更小心检查了!
      2、时间调整问题,后来感觉这个问题很少了,就忽略了,看来还是应该补上完整的更好,减少网友遇到问题的可能;
      3、apt-get -y update && apt-get -y install unzip zip wget curl nano sudo ufw socat ntp ntpdate gcc git 这个命令很强大,想来这也是一个好办法,把一些相关组件(尽管有些系统是有的、有的本教程是用不到的)都先安装上,减少系统问题带来的安装出错的几率。
      这几条都很好,谢谢补充完善。

      4、CDN(cloudflare)有利有弊,所以一直没有加上。

  17. pope

    站长你好,我试了好多次,后来还重装了debian10系统,每次在 “ 7-1、安装SystemD服务配置,然后重新加载SystemD” 这一步输入那4条命令,都会出现下面的提示:
    wget https://raw.githubusercontent.com/caddyserver/caddy/master/dist/init/linux-systemd/caddy.service
    -bash: wget: command not found

    cp caddy.service /etc/systemd/system/
    cp: cannot stat 'caddy.service': No such file or directory

    chown root:root /etc/systemd/system/caddy.service
    chown: cannot access '/etc/systemd/system/caddy.service': No such file or directory

    chmod 644 /etc/systemd/system/caddy.service
    chmod: cannot access '/etc/systemd/system/caddy.service': No such file or directory
    不知道是什么原因?

    • 美博园

      @pope
      这个是提示你的系统没有 wget这个下载工具,后面的问题是这个引起的,美博没有遇到这个没有wget的情况。
      你用下面这个命令先安装 wget,然后再运行那些命令。

      apt-get install wget
      • pope

        @美博园 运行了一下,显示 -bash: yum: command not found,我是debian10的系统

      • pope

        @美博园 apt-get install yum运行后,再运行yum -y install wget
        出现 There are no enabled repos.
        Run "yum repolist all" to see the repos you have.
        You can enable repos with yum-config-manager --enable ,后面运行命令重复出现
        wget https://raw.githubusercontent.com/caddyserver/caddy/master/dist/init/linux-systemd/caddy.service
        -bash: wget: command not found

        cp caddy.service /etc/systemd/system/
        cp: cannot stat 'caddy.service': No such file or directory

        chown root:root /etc/systemd/system/caddy.service
        chown: cannot access '/etc/systemd/system/caddy.service': No such file or directory

        chmod 644 /etc/systemd/system/caddy.service
        chmod: cannot access '/etc/systemd/system/caddy.service': No such file or directory
        太折腾了。

    • 美博园

      @pope
      用这个命令安装 wget
      apt-get install wget
      你的VPS提供的系统可能有问题

      • pope

        @美博园 请教一下站长,前面的问题解决了,最后一步:
        9-4、检查Caddy启动状态,显示运行失败,然后9-5、Caddy没有正常启动的记录查看
        输入命令
        root@Bu:~# journalctl --boot -u caddy.service

        -- Logs begin at Tue 2019-12-31 12:19:07 UTC, end at Tue 2019-12-31 16:22:39 UTC. --
        Dec 31 16:20:03 Bule-666 systemd[1]:Started Caddy HTTP/2 web server.
        Dec 31 16:20:03 Bule-666 caddy[7656]: [INFO] Caddy version: v1.0.4
        Dec 31 16:20:03 Bule-666 caddy[7656]: /etc/caddy/Caddyfile:10 - Error during parsing: Unknown directive 'header_upstream'
        Dec 31 16:20:03 Bule-666 systemd[1]: caddy.service: Main process exited, code=exited, status=1/FAILURE
        Dec 31 16:20:03 Bule-666 systemd[1]: caddy.service: Failed with result 'exit-code'.

        不知这是什么问题?

        • 美博园

          @pope
          不能解析 'header_upstream'
          你用 https://你的域名
          可以正常访问网站吗?

          同时,仔细检查一下Caddyfile配置文件,特别注意空格、符号

          • 美博园

            @美博园

            先停止v2ray试试,用命令:
            systemctl stop v2ray

            然后,再接着你原来的步骤 Caddy启动

            如果Caddy正常启动了,

            到最后再启动v2ray:systemctl start v2ray

            ----------------------------------------------------
            如果还是不行,建议重新安装系统reinstall,系统在全新状态下,再安装。
            现在已经熟悉过程了,操作就快了。
            原来的操作记录,可用右键点黑框,全选,复制出来保存,做一个记录,下次对照。

            • 美博园

              @美博园
              或者安装另外二种方法 trojan或naiveproxy,效果都很好,比v2ray安装简单一些,naiveproxy更简单,只是手机不能用
              有的VPS对系统做了一些处理。

              • pope

                @美博园 站长你好,我昨天把caddy和v2ray服务器端装好了,都显示正常运行,然后配置v2ray客户端的时候,弄了好久都上不了网,请教下本教程中“ 12-2、配置参数”中的 1)服务器参数设置中,添加[Vmess]服务器图示中的端口是443还是安装v2ray时自动生成的端口号,还有客户端的配置文件config.json是否需要单独配置(网上有很多配置文件config.json的设置教程),另外客户端版本是否要最新版本,我目前更新到了最新版本,谢谢。

                • 美博园

                  @pope
                  你使用V2rayN客服端,把参数设置進去就好了,安装本文方法端口是443,不需要另外配置客户端config.json
                  当你新装服务器后,客户端要用最新版本。

                  • pope

                    @美博园 你好,我重新下载安装了新的客户端,重新按本教程图示设置了,还是上不了网,之前用本站发布的nginx教程设置的节点在这个新客户端运行很正常,但caddy的这个节点服务器延迟显示正常,服务器测速显示:远程服务器返回错误,(503)服务器不可用。不知是什么原因?

                    • 美博园

                      @pope
                      再检查服务器的启动状态
                      仔细检查将客户端的配置参数与服务器端配置文件参数对比,检查是否一致?
                      实在不行,因为现在熟悉操作了,重新安装系统,重新制作一次,注意每一个细节,这样可能更快一些

                  • pope

                    @美博园 你好,我又查了一下,发现虽然caddy正常运行,但命令行底部显示:caddy[xxxx]: [ERROR 502 /56789ottttyr] dial tcp 127.0.0.1:12345: connect: connection refuse,这是有问题吗?如果有的话,怎么解决,谢谢。

  18. Stiven

    Caddy 跑不起来,在反向代理那里报错。

  19. jijkijkm mh

    太麻烦,有没有布置好的,公开出来让大家用

这里是你留言评论的地方


请留言


3 + 8 =
【您可以使用 Ctrl+Enter 快速发送】
Copyright © 2007 - 2024 , Design by 美博园. 版权所有. 若有版权问题请留言通知本站管理员. 【回到顶部】