自建最强科学上网3+:trojan + Caddy(SSL证书自动续期)

【美博翻墙2021.3.8】(3月10日18点有更新,之前看过的网友请留意更新)编注:trojan+Caddy翻墙代理的前教程【自建最强科学上网3:trojan + Caddy】存在SSL证书三个月到期后不能自动续期的问题,这是一个普遍存在的问题,目前网上基本上是采用外加acme脚本来续期,近期重新研究了一遍trojan,终于找到了修改Caddyfile配置来自动续期的方法,因为本方法为美博研究首创,证书要三个月后才能知道是否真的有效,是否代码中还有考虑不周的地方,还请热心网友来帮忙测试是否会自动续期,以及修改补充完善。当然此法建立trojan代理一样是成功的。先谢谢了。

有关这次修改方法的原理、思路及解决办法,请参考:
“trojan+Caddy”SSL证书自动续期的Caddyfile配置解决方案

以下根据前教程进行修改,本教程的修改之处,会在相应位置说明。

说明:本教程,仍然是完整的新教程,按照本教程是可以完成trojan代理的构建,所以,并不需要网友参考对照前教程。只要按照本教程的先后顺序,不要打乱,一步一步走下去,就会自建成功。

以前的介绍:trojan是较新的代理项目,目前网上trojan+Caddy的构建详细教程极少,美博测试后发布此方法与网友分享。

trojan 采用常见的协议HTTPS,没有使用特别的协议,trojan监听443端口,其思路是把 trojan代理数据伪装成正常的 HTTPS 通信,对于其他访问数据则直接转发到80端口,通过caddy、Nginx等web服务器提供网页访问服务,当trojan客户端连接到服务器时,首先执行真正的 TLS 握手,若握手成功,则所有后续流量都将受到保护TLS; 否则服务器就立即关闭连接,就像任何HTTPS服务器一样。这样VPS更像一个正常的web服务器,使得 GFW 认为是 正常HTTPS。trojan反侦查采用主动检测与被动检测,而不会被识别出来。caddy+trojan一起合用是很好的组合,trojan绑定在0.0.0.0:443上,转发非trojan流量到 caddy 达到掩护的目的。caddy绑定在0.0.0.0:80上,并自动重定位到https加密浏览。

据网友和我们实际使用,trojan的速度的确是相当的不错。

官方项目主页:

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

本方法代理构建的系统要求: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/地区过滤等功能。

本文有关的几个概念介绍:

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

本教程按照实际制作过程进行描述,请网友按照顺序做。

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

购买VPS并安装系统,请见教程:

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

请记住VPS安装系统后得到的: ip地址 密码 用户名(默认是root),后面会用到。

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

请参考教程:

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

域名是为了建立网站(网页)用的,本方法实际建立一个网站(网页),将翻墙代理隐身其中,翻墙就像是实实在在的在浏览网站,消除代理的特征信号,提高翻墙代理安全性,这样的思路一直以前的翻墙软件难以实现的,trojan也实现了这个愿望,成为目前最好的翻墙方法系列之一。

有条件的网友,建议按照本系列教程“购买”属于自己的域名,不要使用网上能够找到的“免费域名”。

对新手的建议:

对于初期自建代理的网友,其域名可以多设置几个二级域名,同时先做好解析备用。可以先拿一个二级域名,测试方法,如果一次安装成功就可以继续使用;如果几次安装不成功,因为反复同一(二级)域名申请SSL证书次数太多,可能会被拒绝SSL证书,那么后面的步骤就无法进行。这时,可以换已经解析好的另外的二级域名来申请证书和构建代理。

检查域名解析是否生效

在上文教程中已经说明了域名解析的方法,这里再强调,你要做代理的域名,在这一步一定要已经解析正确,这是前提,下面的步骤才能正确完成。

如果你的域名或二级域名,解析正确且生效,那么你看到的结果是,输入你的域名后,显示的IP就是你的VPS主机的IP。

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

用SSH工具连接VPS服务器后,可以输入各种指令(命令)来安装系统、安装各种应用程序

在自家电脑上通过安全的SSH连接到远端的VPS服务器,就可以发出各种指令(命令)来安装系统、安装各种应用程序,包括建立代理的各种组件等等。在电脑上安装XShell软件来实现SSH连接非常方便,美博园推荐这个工具。

请参考:SSH连接软件-Xshell下载及使用教程

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

===========关于输入命令的几点说明 =========

#  不是很熟悉代码的网友,请采用“复制”教程各步骤的输入命令,而且复制时注意不要增减空格,新手很容易出错的地方就是代码的空格、格式、符号等等无意中输入错误。
#  本文方法以默认的root用户来构建,建议不熟悉改变命令的网友不要自建用户,否则此法的很多命令将不可用。
#  新手注意:一下输入命令都是在“英文半角”输入完成,电脑的输入法“不要”处于中文输入状态,以免无意输入中文全角字符而出错。
#  在执行下面各种输入命令时,都是用Xshell软件以root用户登录SSH连接VPS服务器,然后输入各种命令来执行。(教程中有说明)
#  下面的步骤,如果不明白其中命令的含义没有关系,请按照下面的全部顺序,有的步骤是不能变动先后到,一步一步输入命令完成即可成功建立代理。

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

四、更新及优化系统

接前,已经购买域名,设置了域名解析,已经有VPS服务器并安装了系统,基本硬件已经具备完成。

因购买VPS时已经选择了安装系统,我们下面的建立代理首先就是要输入指令更新系统,因为VPS服务器提供的系统并非是最新发布的系统。

4-1、更新系统

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

apt update
apt -y upgrade

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

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

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

输入

nano /etc/sysctl.conf

编辑器打开后会有一个#绿色光标,这是可输入内容的位置,都是象这样子:
自建最强科学上网3+:trojan + Caddy(SSL证书自动续期)

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

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

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

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

退出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

若询问 Do you want to continue? [Y/n]
就按字母 y
继续安装直到完成。

--- 补充说明 开始 ---
有网友提醒:在谷歌云(GCP,Google Cloud Platform)上的debian系统没有自带wget。
如果你使用的是谷歌云,在这里安装caddy之前,在此步需要先安装wget
若你使用的其它VPS也遇到无法安装caddy,提示:wget: command not found
也可以试用下面方法:
输入:

sudo apt-get install yum

再输入:

yum -y install wget

--- 补充说明 结束 ---

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

显示为:
[email protected]:~# 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

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

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

cat /etc/group | grep www-data

显示为:
[email protected]:~# cat /etc/group | grep www-data
www-data:x:33:

输入:

cat /etc/passwd | grep www-data

显示为:
[email protected]:~# 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、方法1:创建网站

为了安全,不同样一个模子,这里给朋友们提供一个实际可操作的思路去自己处理:

本方法的掩护网站建立的位置在 /var/www/html/ 目录中,其中网页启动文件是 index.html。

了解网站的网友知道,你自己可以在网上找到很多网站模板(主题)程序,到处都有网站模板(主题)演示。

在Google上,用关键词“website template” 或 “website themes free” 或 “网页模板” 或 “网页主题”,等等,可以找到很多提供网页模板的网站,里面很多免费模板,选一个就好,比如:wordpress官方网站(https://wordpress.org/themes/)就提供有很多免费的网站模板

最好选英文的,中文的尽量不要用。

下载一个模板(主题)后,把其全部文件(只要里面的内容文件,不要模板(主题)名目录)复制到 /var/www/html/ 目录中,其中的 启动文件 index.html 一定要在 html/ 目录下,不要放在其它子目录中,就OK了。

比如:下载的是一个压缩文件 abcdef.1.2.3.zip,解压缩得到文件夹 abcdef,在abcdef文件夹中就有全部的网站文件,文件多少不一,其结构大致是:

自建最强科学上网3+:trojan + Caddy(SSL证书自动续期)

也就是说,不要连同abcdef文件夹一起传到/var/www/html/ 目录中,只是将abcdef文件夹中的那些文件复制到html/ 目录中就行了。

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

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

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

6-2-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 lang="zh-CN">
  <head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
<title>
Hello 这里是您创建的网页(站)的名称,文字可任意,但前后代码不要动
</title>
</head>
<body>
<h1 style="font-family: sans-serif">
这里是标题,文字可改为任何语言的任何内容,但前后代码不要动
</h1>
这里是网站(页)的正文内容,
<br />
这些文字可改为你自己的任何语言的任何内容<
<br />
添加多少内容都可以
<br />
代码部份不要改动,
<br />
这是一个简易网页的结构
<br />
</body>
</html>


说明:
<br /> 是分行符号,可以加在任何一个想分行断句的地方;
图片加入的格式为:<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

八、配置 Caddy

8-1、加入Caddy配置文件Caddyfile

Caddyfile配置文件是与上一版教程最大不同的地方。

输入:

nano /etc/caddy/Caddyfile

请注意,先要修改下面紫红色标记的“域名”、“信箱”为你自己的资料(下面有详细说明)

然后再将内容粘贴到 #绿色光标处

这里举例用一个二级域名 tro.abcdef.com

https://tro.abcdef.com:8080 {
    tls 12345@gmail.com
    root /var/www/html
    gzip
    timeouts none
    log /var/log/caddy.log
}
http://tro.abcdef.com {
    root /var/www/html
    gzip
    log /var/log/caddy.log
}
:80 {
    redir https://tro.abcdef.com
}

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

说明:
1)tro.abcdef.com:要改为你自己的域名,若是本例举中的二级域名,其正确解析请参考前文【自己搭建代理服务器:域名购买及设置与ip服务器关联】;
2)12345@gmail.com:要改为你自己的邮箱,Caddy将自动与Let's Encrypt联系以获取SSL证书并在90天到期后自动更新证书;这个信箱不一定要真实,若考虑安全,随便填写一个mail格式的就行;若是真实的mail,到期时会有来信提示更新。
3)Caddy将自动与Let's Encrypt联系以获取SSL证书。它将证书和密钥放在“/etc/ssl/caddy/acme/acme-v02.api.letsencrypt.org/sites/你自己的域名/” 目录中;
4)Caddy向Let's Encrypt发出SSL证书申请,一般很快在几分钟内就可完成,但可能有人会遇到特殊情况比较久一些才会完成。
前面已经提到:同一(二级)域名,不能连续多次申请证书,次数太多会被拒绝,此时,可以换另外的(二级)域名来重新建立代理。
证书安装若遇到问题,可参考:
Let’s Encrypt 证书颁发的速率及次数限制 - 美博园
Let's Encrypt SSL 证书安装不了的若干问题解决 - 美博园

特别说明:上述Caddyfile配置中的8080端口,是可以自己任意设定的,只要没有被占用就可以。如果改为自己设定的端口,请记得在最后面步骤的防火墙设置中,要对应设置该端口的防火墙规则。

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

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

chown root:root /etc/caddy/Caddyfile

输入:

chmod 644 /etc/caddy/Caddyfile

8-3、启动Caddy

#启动Caddy
输入:

systemctl start caddy

8-4、检查Caddy启动状态

要检查Caddy是否正在运行并且正在侦听端口80和443,可输入:

systemctl status caddy

你应该看到这样子的结果,如看到如下绿色字 active (running),表明 caddy已经启动:
自建最强科学上网3+:trojan + Caddy(SSL证书自动续期)

8-5、检查网页是否可以打开

本教程此步可以检查一下你的域名(若是新域名或新主机)是否已经解析成功,进而再检查一下你上面建立的http网页(站)是否可以打开了。

因为到此步,前端Caddy已经启动,若无问题,其网页(站)就可以打开了。此检查也是一种验证,若网站正常运行了,说明前端Caddy也正常在运行。

浏览器中输入地址:http://你的域名,即:上面例举中就是:
http://tro.abcdef.com

请注意:本方法在这一步,因443并没有启用、trojan没有启动,https加密网页(站)在此时是打不开的,要到后面再验证这个https的部份。此步不用检查 https//tro.abcdef.com

8-6、自启动Caddy

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

systemctl enable caddy

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

此节附注1:若Caddy没有正常启动的记录查看

注意:如果Caddy无法正常启动,则可以查看日志数据以帮助找出问题。如果已经启动,不需要此步检查。
输入:

journalctl --boot -u caddy.service

此节附注2:修改 Caddy 配置会用到的相关命令 -- 此节只是说明

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

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

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

caddy -service stop

修改完成后:

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

systemctl daemon-reload

启动Caddy服务:

caddy -service start


重启Caddy服务:

caddy -service restart

查看启动状态

systemctl status caddy

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

caddy -service uninstall

九、安装trojan

trojan官网(Github 页面)
https://github.com/trojan-gfw/trojan

注意trojan在不同的系统及不同版本的安装命令不同,请参考官方命令说明:
https://github.com/trojan-gfw/trojan/wiki/Binary-&-Package-Distributions

但,我们可以方便使用trojan的官方一键脚本(Quickstart Script),适用于所有系统:
输入:

bash -c "$(curl -fsSL https://raw.githubusercontent.com/trojan-gfw/trojan-quickstart/master/trojan-quickstart.sh)"

显示:

……
Unpacking trojan 1.15.1...
Installing trojan 1.15.1 to /usr/local/bin/trojan...
Installing trojan server config to /usr/local/etc/trojan/config.json...
Installing trojan systemd service to /etc/systemd/system/trojan.service...
Reloading systemd daemon...
Deleting temp directory /tmp/tmp.67e2QFtgnb...
Done!

注意:在下面配置完成后,再启动trojan。

十一、服务器端配置文件

(一)服务器配置文件修改

因按照本方法的配置文件,美博已经修改好了,就直接给出修改内容。

# 先备份原没有设置的服务器配置文件

输入:

cp /usr/local/etc/trojan/config.json /usr/local/etc/trojan/config.json.bak

# 再删除原配置

输入:

rm /usr/local/etc/trojan/config.json

# 打开nano编辑器

输入:

nano /usr/local/etc/trojan/config.json

将下面的内容复制、粘贴到绿色光标处

请注意,先要修改下面紫红色标记的“你设定的密码”、“你的域名”改为你自己的资料,请先看下面的详细说明

然后,再将内容粘贴到 #绿色光标处

(注:此部份配置已经根据官方版本更新)

{
    "run_type": "server",
    "local_addr": "0.0.0.0",
    "local_port": 443,
    "remote_addr": "127.0.0.1",
    "remote_port": 80,
    "password": [
        "你设定的密码",
        ""
    ],
    "log_level": 1,
    "ssl": {
"cert": "/etc/ssl/caddy/acme/acme-v02.api.letsencrypt.org/sites/你的域名/你的域名.crt",
"key": "/etc/ssl/caddy/acme/acme-v02.api.letsencrypt.org/sites/你的域名/你的域名.key",
        "key_password": "",
        "cipher": "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384",
        "cipher_tls13": "TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384",
        "prefer_server_cipher": true,
        "alpn": [
            "http/1.1"
        ],
        "alpn_port_override": {
            "h2": 81
        },
        "reuse_session": true,
        "session_ticket": false,
        "session_timeout": 600,
        "plain_http_response": "",
        "curves": "",
        "dhparam": ""
    },
    "tcp": {
        "prefer_ipv4": false,
        "no_delay": true,
        "keep_alive": true,
        "reuse_port": false,
        "fast_open": false,
        "fast_open_qlen": 20
    },
    "mysql": {
        "enabled": false,
        "server_addr": "127.0.0.1",
        "server_port": 3306,
        "database": "trojan",
        "username": "trojan",
        "password": "",
        "key": "",
        "cert": "",
        "ca": ""
    }
}

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

说明:上面配置文件只有二处需要修改:

1)“你设定的密码”:可任意设定任何“数字”和“字母”(建议不要用符号易出错)组合,可任意长度,越长越好,这是一个安全设置,一般设置16位以上,32位就很好,只要自己记住,并与后面的客户端设置一样的密码就好。
若自己想不到好的密码,也可在下面网站随机生成
https://strongpasswordgenerator.com/
2)"cert"和"key",是Caddy为你自动申请的SSL证书文件及密钥文件,在上面的配置文件中需将“你的域名”改为你上面设置的域名
3)请注意:不同系统的具体证书、密钥路径可能不同。

是否开启 "fast_open": true?

有网友建议开启,据美博所知:trojan目前只在Linux中支持TCP_FASTOPEN_CONNECT,而在Windows中则不提供,TFO并未有重大改进,容易受到某种形式的攻击,美博不建议启用它。

(二)重新加载配置文件

修改好上述服务器配置文件后,需要加载
输入:

systemctl daemon-reload

(三) 赋予trojan监听443端口能力

赋予trojan监听1024以下端口的能力,使得trojan可以监听到443端口。
输入:

setcap CAP_NET_BIND_SERVICE=+eip /usr/local/bin/trojan

(四)启动trojan

# 启动trojan

输入:

systemctl start trojan

# 查看启动是否成功

输入:

systemctl status trojan

如图,若显示为绿色的“active”表示trojan已经成功启动

自建最强科学上网3+:trojan + Caddy(SSL证书自动续期)

# 设置自启动

若启动成功运行,可以加入开机自启
输入:

systemctl enable trojan

显示为:
[email protected]:~# systemctl enable trojan
Created symlink /etc/systemd/system/multi-user.target.wants/trojan.service → /etc/systemd/system/trojan.service.

# 此节附注:若不能启动,请查看错误日志

(已经正常启动不需此输入)
输入:

journalctl -fu trojan

# 检查网站SSL网页(网站)是否正常

本方法在启动trojan后,才能开启SSL的443访问。这时可以检查https加密浏览网站的情况,这步检查也是要验证全部设置是否正确,也顺便查看一下ssl的有关记录。

检查很简单:

1)、在浏览器中地址栏输入网址:https://你的域名,如:https://tro.abcdef.com

如果显示的是你自己建的网站内容,就表明SSL已经可以正常使用浏览网页(网站)。

2)、网站访问验证

在浏览器地址栏,直接输入你的服务器IP,如:123.123.123.123,该IP将转向到你的网站:https://tro.abcdef.com
在浏览器地址栏,输入https://ip,即:https://123.123.123.123,也将转向到你的网站:https://tro.abcdef.com (但这个转向浏览器可能会提示不安全,这是正常的);
在浏览器地址栏,直接输入 tro.abcdef.com ,不带https,也将转向到你的网站:https://tro.abcdef.com

如果这几项都正确,说明SSL加密访问和前面的Caddyfile和trojan配置完全正确。

3)、如果要进一步看看SSL效果,可以在 SSL Labs网站查看(注:此步不是必须)
https://www.ssllabs.com/ssltest/

在其中输入自己的域名,可以检测一下https配置评分。用本方法,美博多次测试都是A级的评分,说明该方法的SSL设置效果很好。

(五)通知trojan更新证书的定时任务

在Caddy更新续签Let's Encrypt SSL 证书后,要通知trojan去识别新ssl证书,如果手动重新启动也可以让trojan识别新证书。但是,你得每三个月SSH发出启动trojan命令,比较麻烦。

因 trojan 已有 reload certificate and private key 功能,只需要在ssl证书更新后给 trojan 发送 SIGUSR1 消息,trojan 收到 SIGUSR1 消息后,便会自动加载新的证书和密钥文件,这样可以不再手动重新启动trojan,完全自动读取更新的证书了。现在我们添加一个定时通知任务来实现这一功能。

按照下面的步骤设置:

---先安装一个组件---

本教程在设定这项定时通知任务时,会用到一个命令killall,美博在测试时系统有自带。

据网友Winxin提醒:有些系统中可能没有killall命令,而这个定时通知任务要三个月后在续签证书时才起作用,这个killall命令是属于psmisc组件的,所以,不管系统中有没有,我们都执行一次psmisc安装任务,以确保到时这个命令起作用。

若系统已经有,此命令就是将此组件更新到最新版,若已经是最新版也会有显示说明。这个命令本来是Debian等系统本身自带的,可能有些VPS商家提供的是缩小版。所以,运行一次这个命令并没有额外多安装附加组件。

输入:

apt-get install psmisc

因美博测试时系统已经有这个,所以显示为:
[email protected]:~# apt-get install psmisc
Reading package lists... Done
Building dependency tree
Reading state information... Done
psmisc is already the newest version (23.2-1).这里显示是最新版本(23.2-1)
psmisc set to manually installed.
0 upgraded, 0 newly installed, 0 to remove and 0 not upgraded.

安装之后,下面开始正式设置通知任务。

1)创建并编辑一个新的crontab文件

输入

crontab -e

第一次可能会弹出问话:使用何种编辑器?
no crontab for root - using an empty one
Select an editor. To change later, run 'select-editor'.
1. /bin/nano <---- easiest
2. /usr/bin/vim.basic
3. /usr/bin/vim.tiny
Choose 1-3 [1]:

选择 1 ,这是我们习惯使用的 nano编辑器,所以,按 1,然后 回车

接着会弹出有文件内容的编辑框。

2)编辑定时发送信号的命令

在上述命令弹出的编辑框中,按“向下方向键”将绿色光标移动到文件末尾最底下的空行处,然后,复制、粘贴下面的命令:

30 12 15 * * killall -s SIGUSR1 trojan

含义:每个月15号12点30分的时候运行命令通知trojan

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

重要说明:

A:这一行命令的前5五位(30 12 15 * *)是定时任务的定时时间设定,前五位的依次顺序为:

任务执行时间的前五位依次为:

第1位 分钟 可设置数值范围为 0~59
第2位 小时 可设置数值范围为 0~23
第3位 日 可设置数值范围为 1~31
第4位 月 可设置数值范围为 1~12
第5位 天/周 可设置数值范围为 0~6(0=周日)

B:你要根据自己建代理的时间来修改这个时间,即前五位数字要修改,不能照搬上面的时间设置,要让这个时间点稍稍落在你建立好代理的时间点之后的时间。

3)查看crontab是否建立生效

输入

crontab -l

会显示你刚刚建立的这行命令:

30 12 15 * * killall -s SIGUSR1 trojan

修改定时任务

重复上述1)、2)步骤,输入新的时间即可,其它命令不要动

删除定时任务

如不想要这个定时任务了,也可以删除
输入:

crontab -r

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

至此,恭喜大家,trojan代理已经构建完成,已经可以使用了

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

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

如何更新 trojan

每隔一段时间后,需要手动更新trojan最新版本,请参考教程:

如何更新 trojan 版本 - 美博园
https://allinfa.com/trojan-update.html

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

十二、防火墙简易设置

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

12-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

例外:22端口是多数服务器使用的SSH端口,但是,有的VPS服务器的SSH使用其他端口,如使用2222 或其它端口 ,这在你的VPS服务器上可以查到,若是其它非22端口,则需要将上面的22改为2222或其他端口。

4)打开常用端口

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

ufw allow 80
ufw allow 443

本方法使用了8080,只是用于申请证书,为了安全,该端口可阻止外部访问,所以,再添加如下规则:
输入:

ufw allow from 127.0.0.1 to any port 8080

5)启用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

若要检查UFW防火墙的设置状态
输入:ufw status verbose
或输入:ufw status numbered
二者一样,后者会在每一个规则前加上数字编号

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

12-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

本方法使用了8080,只是用于申请证书,为了安全,该端口可阻止外部访问,所以,再添加如下规则:
输入:

ufw allow from 127.0.0.1 to any port 8080

再输入命令启用防火墙

ufw enable

会提问:
Command may disrupt existing ssh connections. Proceed with operation (y|n)?
问是否真的启用防火墙 enable firewall,并警告如果设定不当会断线。因我们已经启用 allow port 22 ,所以没有问题,
按下

y

再 Enter(回车)。

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

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

附注1、退出SSH

退出 SSH 连接
输入:

exit

或者 直接关闭 X-shell

附注2、关于修改服务器配置

上述设置一切都完成后,一般不需要修改就可以稳定运行。
如果你想修改配置,如域名、密码等等,都是可以修改的,但是修改完成后,记得重启trojan服务端即可,同时客户端的资料也要同步修改。

修改前:

一般在修改前也是停止先服务
停止 trojan 服务
输入:

systemctl stop trojan

修改完成后:

修改配置后也需重新加载配置文件

systemctl daemon-reload

启动 trojan 服务
输入:

systemctl start trojan


重启 trojan 服务
输入:

systemctl restart trojan

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

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

十三、trojan客户端下载、配置及使用方法

13-1、trojan客户端软件下载

# 官方客户端软件下载

在服务器端搭建好trojan代理服务器后,我们还需在自己的电脑即客户端上使用。

至今,trojan还没有图形界面的客户端软件,官方发布有一个客户端软件,只有dos黑框,里面会显示数据连接状况,因为trojan设置简单,其实已经够用,美博建议还是用官方的。

trojan客户端下载官方页面:

https://github.com/trojan-gfw/trojan/releases

请根据自己的电脑所装系统,下载对应的软件包,如:Windows系统就下载 trojan-x.xx.x-win.zip, Mac系统就下载 trojan-x.xx.x-macos.zip(中间的x.xx.x是版本号)

# 使用方法

下载后解压,得到trojan文件夹,其中文件包括:
config.json : 这个就是客户端配置文件,设置内容见下面
trojan.exe : 这是trojan执行文件,

自建最强科学上网3+:trojan + Caddy(SSL证书自动续期)

13-2、trojan客户端配置文件及修改

在trojan软件中的config.json就是其客户端配置文件,我们必须对其编辑内容才能使用。

用电脑中的文本编辑器,如:EmEditor,打开这个客户端配置文件config.json,然后将下面内容(需修改)复制进去;

但,这个配置文件里也有二处需要修改为你自己的内容,即:“你的域名”和“你设定的密码”,并与上述“十一、服务器端配置文件之(一)服务器配置文件修改”的相同。

然后,记住“保存”这个配置文件。

{
    "run_type": "client",
    "local_addr": "127.0.0.1",
    "local_port": 1080,
    "remote_addr": "你的域名",
    "remote_port": 443,
    "password": [
        "你设定的密码"
    ],
    "log_level": 1,
    "ssl": {
        "verify": true,
        "verify_hostname": true,
        "cert": "",
        "cipher": "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:RSA-AES128-GCM-SHA256:RSA-AES256-GCM-SHA384:RSA-AES128-SHA:RSA-AES256-SHA:RSA-3DES-EDE-SHA",
        "sni": "",
        "alpn": [
            "h2",
            "http/1.1"
        ],
        "reuse_session": true,
        "session_ticket": false,
        "curves": ""
    },
    "tcp": {
        "no_delay": true,
        "keep_alive": true,
        "fast_open": false,
        "fast_open_qlen": 20
    }
}

13-3、启动trojan

在设置好这个客户端config.json配置文件后,双击 trojan.exe,就可以启动trojan了。

启动后象这样:

自建最强科学上网3+:trojan + Caddy(SSL证书自动续期)

13-4、关闭trojan

启动trojan后,显示上图的窗口,不使用trojan时,按最右上角的 X(关闭)即可。

13-5、启动trojan常遇到的问题

1、trojan客户端无法启动,提示缺少找不到 vcruntime140.dll 或找不到 msvcp140.dll

这是因为你的系统没有安装VC++运行环境(VC_redist.x64.exe 或 vc_redist.x86.exe)

1)现在新版trojan客户端软件包中,已经带有 VC_redist.x64.exe,若是 windows 64位系统,双击 VC_redist.x64.exe安装即可。

2)若你是windows 32位系统,可到微软官方下载vc_redist.x86.exe

https://www.microsoft.com/zh-CN/download/details.aspx?id=48145

其中有两个软件,一个是32位(vc_redist.x86.exe)、一个是64位(vc_redist.x64.exe)。

安装完成后,重新启动trojan,确认trojan没有报错即可。

2)若启动还是有错,也可能缺乏 Windows.NET Framework 4.6.2,请到微软官方下载并安装:

https://support.microsoft.com/zh-cn/help/3151800/the-net-framework-4-6-2-offline-installer-for-windows
2、如果提示 vcruntime140_1.dll 的错误

下载下面的文件放到C:\windows\system32目录下即可:

https://github.com/atrandys/trojan/raw/master/vcruntime140_1.dll
3、如果启动trojan会一闪而过

这应该是你配置文件有错误,请仔细检查。
可以使用控制面板运行trojan,能看到具体是哪一行有错,具体方法:使用"命令提示符"定位到trojan目录,如何运行 trojan 命令,可以看到具体哪一行有错误,如:fatal: config.json(16): invalid code sequence ,说明你的配置文件第16行有错误。然后,用文本编辑器打开客户端配置文件config.json对号检查修正。

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

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

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

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

有时候,前面建立代理步骤都顺利完成,卡在浏览器设置这里。请注意:目前trojan只单独承认socks5协议,请检查一下你的浏览器代理或者代理扩展里面的代理设置是不是 socks5,如同时选择了http、https等代理类型,也会反馈 unknown protocol错误。

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

自建最强科学上网3+:trojan + Caddy(SSL证书自动续期)

请注意:

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

火狐浏览器_Firefox_美博纯净中文绿色版
Google Chrome浏览器_美博园纯净绿色版
选其中的最新版本使用。

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

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、trojan、NaiveProxy 系列文章参考 ===

自建最强科学上网3+:trojan + Caddy(SSL证书自动续期) - 美博园
关于v2fly(V2Ray)更新版本的提醒 - 美博园
自建最强科学上网5+:V2ray + Caddy + Tls + HTTP/2
自建最强科学上网2+:V2Ray + Caddy + Tls + WebSocket
自建最强科学上网4:NaiveProxy + Caddy
“trojan+Caddy”SSL证书自动续期的Caddyfile配置解决方案 - 美博园
美博点评:V2Ray、trojan、NaiveProxy代理的异同及相关问题 - 美博园
自己搭建代理服务器:VPS的选择 - 美博园
自己搭建代理服务器:Vultr VPS 购买图文教程 - 美博园
自己搭建代理服务器:Vultr VPS 系统安装图文教程 - 美博园
自己搭建代理服务器:检测ip是否被墙及更换ip - 美博园
自己搭建代理服务器:域名购买及设置与ip服务器关联 - 美博园
SSH连接软件-Xshell下载及使用教程 - 美博园
WinSCP:连接远端服务器的管理传输工具的使用教程 - 美博园
其它参考:
v2ray客户端代理上网 - Windows、Android、Mac、ios - 美博园
Let’s Encrypt 证书颁发的速率及次数限制 - 美博园
Let's Encrypt SSL 证书安装不了的若干问题解决 - 美博园
如何开启Google TCP BBR 加速 - 美博园
V2ray自建代理遇到的一些问题及解决 - 美博园
原文链接:https://allinfa.com/zh-cn/trojan-caddy-plus.html
原文标题:自建最强科学上网3+:trojan + Caddy(SSL证书自动续期) - 美博园
本文 TinyURL 短网址: https://tinyurl.com/yad2zudu
本文 is.gd 短网址: https://is.gd/weH1tT
美博园文章均为“原创 - 首发”,请尊重辛劳撰写,转载请以上面完整链接注明来源!
软件版权归原作者!个别转载文,本站会注明为转载。

网 友 留 言

23条评论 in “自建最强科学上网3+:trojan + Caddy(SSL证书自动续期)”
  1. andygebb

    为何不去使用WinXray,来简便trojan烦嗦配置?且会自动快速扫描链接到最快的服务器。

  2. jack

    感谢您的及时回复,终于成功了!再反馈一下,我这里trojan-1.15.1-win比较稳定,trojan-1.16.0-win频繁断线

  3. jack

    naive这次搭建也没有成功,教程方便更新一下吗?

  4. jack

    请帮忙看看这是什么错误,trojan无法启动,卡在这了,caddy没问题正常,提示缺少文件,试了各个版本的系统操作许多遍了都不行,以前搭建都是成功的,谢谢!
    guest trojan[1204]: [2021-07-17 16:33:40] [FATAL] fatal: use_certificate_chain_file: No such file or directory

    • 美博园

      @jack
      这个是提示你的证书路径没有找到,仔细检查一下配置文件中这一句是否正确:
      "cert": "/etc/ssl/caddy/acme/acme-v02.api.letsencrypt.org/sites/你的域名/你的域名.crt",
      "key": "/etc/ssl/caddy/acme/acme-v02.api.letsencrypt.org/sites/你的域名/你的域名.key",

  5. V the V

    首先谢谢美博园一直以来对墙内有志之士关心。
    贵站的攻略非常详细,谆谆教导之心让人敬佩。

    今年3月份我已根据贵站攻略架设trojan+caddy,由于ip被墙,现在重新架设,遇到caddy无法启动的问题,附上log

    编注:带有个人信息的记录这里不公开就删除了。

    谢谢!

    • 美博园

      @V the V
      您好,不客气。
      从记录来看,是没有申请到SSL证书
      有时候连续多次申请证书,就会出问题。或者是域名没有被正常解析,也无法申请证书。
      可以多设置几个二级域名,换一个新的二级域名来用,先按照教程设置二级域名解析,这一步别着急,要等域名解析成功,这个时间说不准,也许几分钟,也许几个小时,请按教程辨别,然后再申请SSL证书和安装代理。

  6. plans

    十分感谢,受益匪浅。

  7. Winxin

    @美博园 , 谢谢答复!
    1)我觉得不固定在8080是可行的。好处是减少了一个被识别的特征,缺点是使用这个教程的朋友要知道,他选用的口没有被其他进程使用(一般用808x应该没问题)。
    2)我觉得Trojan不会在每次被外部(client)调用时都去取一下证书。如果您安装的系统还在的话,可以试试,不中断trojan,让Caddy申请一个新的证书。再测试trojan是不是使用了新证书。

    • 美博园

      @Winxin
      好办法,很好的思路,这样就不必等三个月了,同时也可以检验关闭8080外联的更新证书的情况

    • 美博园

      @Winxin
      目前测试的结果:

      用不同方法让Caddy申请了4次证书,包括撤销证书再申请,四次证书都有顺利即时申请成功,Caddy的ssl证书目录都有正常的新证书文件更新。

      结果1:8080

      4次申请证书,都有防火墙关闭了8080的外部访问,这说明:Caddy的申请证书是成功的,而且只外发请求,不需要外连访问验证。

      解释:查看了Caddy的说明文件,我的理解是,这应该是Caddy完善的证书申请及证书颁发机构(CA)对Caddy的信任所致,域名第一次由Caddy申请证书时,Caddy会在CA的服务器上创建一个带有域名所有者电子邮件地址的帐户并完成各种认证,包括Caddy对域名网站的管理权限,CA一旦认证完成,就会随即颁发证书,然后Caddy将为每个站点添加证书。也就是说,域名和网站的证书签发,是全权由Caddy中间代理的,而且CA只认Caddy,因为我们并没有将认证引向域名或DNS等。当Caddy再次更新续签该域名证书时,CA在接受到Caddy请求续期时,只与Caddy在CA端完成认证,然后就可以发给Caddy该域名的证书。仅仅是个人的理解。

      结果2:trojan

      trojan一直开着,其中换4次证书,外加一次假证书,trojan都正常使用,查看证书,一直使用的是第一次证书,看来trojan并没有自动调用新证书,而且在某处记忆或缓存了第一次有效证书。

      换证书后,重新启动trojan,trojan调用新证书,若是假证书就不能上网和代理;说明:trojan开启后是会去识别证书的。

      这样看来,您提出的问题,这个部份确实是需要设置一个trojan开关,当Caddy申请新证书后,要给trojan发一个信号,让trojan随即去识别新证书。

      随后会测试定时发送SIGUSR1消息或软链硬链的办法来解决。

      你觉得呢?

      谢谢

    • 美博园

      @Winxin
      建立了一个定时通知trojan去更新读取的通知,一切都自动化了,不需要重新启动trojan,经过测试可行。

      教程已经更新:
      自建最强科学上网3+:trojan + Caddy(SSL证书自动续期) - 美博园
      https://allinfa.com/trojan-caddy-plus.html

      请网友们有空再看看哪些地方还需要完善
      谢谢

      • Winxin

        @美博园 @美博园 :
        您辛苦了。
        觉得现在这样很完美了。目前Caddy触发外部命令的条件只有 "startup" 或 "shutdown",以后若有“更换证书” 就可以用来使trojan重新加载证书了。
        谢谢!

  8. Winxin

    谢谢了。还有两点疑问想请教。

    1) 在12-1 (5) 中,关闭了8080端口。8080端口是Caddy用来向Let's Encrypt申请/延长证书的。Let's Encrypt使用所谓ACME-协议,在发放/延长/取消一个证书时,都会审核申请者的合法性,这些审核需要通过申请的端口进行。可以参见https://letsencrypt.org/how-it-works/。
    所以,以我的理解,8080端口必须保持允许外部存取。

    2) 按这样的方案更新证书之后,Caddy应该知道这一点并会重新加载新证书,但觉得,Trojan应该不知道证书已经更新,需要重新加载。如果这推测对的话,那么尽管证书已经更新,但通过Trojan连接时,仍然会出现证书过期错误。希望有读者用本方法安装三月后,向大家介绍证书更新的情况。

    • 美博园

      @Winxin
      您好,

      关于1)应该是您说的那样,证书续期时,证书机构会进行验证,他们在一个回复中说了,其验证的来访ip是变动的没有公布,那么我们设定ip访问允许已经不行,看来只有全部开启开启8080,已经修改了教程,谢谢

      关于2)因为trojan配置中调用的证书,使用了完整路径直接指向的Caddy申请的证书位置,只要证书更新,原理上trojan会识别证书的有效性。你这么一说,需要再研究一下trojan识别证书的原理。

      毕竟要三个月后才能知道真正的结果,现在希望大家一起来解决一切可以预想到的问题。
      谢谢大家一起来完善。

    • 美博园

      @Winxin
      另外,您的建议让我想到:既然要完全打开一个https端口,按理https的SSL端口是可以任意的,只要没有占用,那么,在教程中我们是不是可以让使用者自行设定这个申请证书的端口,就不固定在8080,如此一来,固定在8080和自行选用任意端口,利弊如何呢?

这里是你留言评论的地方


请留言


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