使用docker快速部署trojan协议 作者: 毕世平 时间: 2020-09-22 分类: 默认分类 前言:`trojan`是一款“很有想法”的翻墙协议,它自称是采用了无法被识别机制来帮助你绕过gfw的,它采取基于tls的协议以避免被DPI识别和QOS,它在某种程度上模仿互联网上最常见的网络协议,至今为止还未发现有被识别的案例。 原理粗浅理解:假定`trojan-server`监听在了服务端的443端口,那么对于来自`trojan-client`客户端的正常请求,它将直接连接到互联网,如果是其它的443端口数据请求,它将在服务端将数据转发到本机的`80`端口所运行的服务,再去访问互联网数据。 本文主要是介绍使用docker部署此`trojan`协议,其中使用`acme.sh`脚本申请证书,使用`caddy`作为web服务来接收trojan转发来的请求数据。 ### 条件准备: - 一台墙外VPS - 一个域名 - 一台电脑 # 一、配置证书 ## 1.1 安装acme.sh脚本 本文使用`acme.sh`脚本申请证书。以Debian系为例,以root用户登录vps,执行以下命令安装脚本。 apt-get update && apt-get -y install socat //安装socat wget -qO- get.acme.sh | bash //安装脚本 source ~/.bashrc # 设置默认CA为letsencrypt acme.sh --set-default-ca --server letsencrypt ## 1.2 给域名申请证书 在你的域名解析服务提供商那里添加好解析记录,假定你的域名是`yourdomain.com`,然后执行下面命令申请证书。 acme.sh --issue --standalone -d yourdomain.com -k ec-256 **说明**:脚本申请的证书和密钥都存放在 `/root/.acme.sh/yourdomain.com_ecc`目录下。 ## 1.3 安装证书到指定位置 mkdir /etc/trojan //创建trojan目录 acme.sh --installcert -d yourdomain.com --fullchain-file /etc/trojan/trojan.crt --key-file /etc/trojan/trojan.key --ecc //安装证书和私钥到指定位置 # 二、安装配置Caddy ## 2.1 安装caddy # 下载然后重命名放到/usr/bin目录下,这里感谢秋水逸冰释出的编译成果 wget -O /usr/bin/caddy https://dl.lamp.sh/files/caddy_linux_amd64 # 赋予权限 chmod 755 /usr/bin/caddy > **说明**:之前给出的安装caddy的脚本好像已经不能用了,里面caddy1的下载链接404了,这里使用秋水逸冰编译好的caddy1版本,具体使用方法还跟之前一样。 ## 2.2 创建caddy的配置文件 ### 2.2.1 创建caddy目录 mkdir /root/caddy && cd /root/caddy //创建caddy目录并切换至此 ### 2.2.2 创建caddy配置文件Caddyfile vim Caddyfile //创建并开始编辑文件 //以下是文件内容,请稍作修改后添加至文件 0.0.0.0:80 { gzip log /root/caddy/caddy.log proxy / http://baidu.com } //以上是文件内容,请稍作修改后添加至文件 **说明**:此处用`proxy / http://baidu.com`来反代别的网站,你也可以去掉此行,用`root /path/to/website`来指定网站根目录。 ## 2.3 注册caddy服务 cd /etc/systemd/system && vim caddy.service //切换到此目录下,创建并开始编辑服务文件 //以下是文件内容,请添加至文件 [Unit] Description=Caddy Service After=network.target [Service] ExecStart=/usr/bin/caddy -conf /root/caddy/Caddyfile Restart=on-abort LimitNOFILE=1048576 [Install] WantedBy=multi-user.target //以上是文件内容,添加至文件 systemctl daemon-reload //重载守护进程 systemctl start caddy //启动caddy.service服务 systemctl status caddy //查看caddy服务运行状况 systemctl enable caddy //将此服务加入开机自启动 # 三、用docker启动trojan服务 ## 3.1 安装配置docker 以root用户执行下面命令安装docker wget -qO- get.docker.com | bash //安装docker systemctl start docker //启动docker服务 systemctl status docker //查看docker运行状态 docker -v //查看docker版本 systemctl enable docker //将docker服务加入开机自启动 ## 3.2 拉取trojan镜像 docker pull teddysun/trojan ## 3.3 创建trojan服务端配置文件 ### 3.3.1 切换到trojan目录并开始编辑配置文件 cd /etc/trojan && vim config.json ### 3.3.2 编辑配置文件 { "run_type": "server", "local_addr": "0.0.0.0", "local_port": 443, "remote_addr": "127.0.0.1", "remote_port": 80, "password": [ "trojanuser1", "trojanuser2" ], "log_level": 1, "ssl": { "cert": "/etc/trojan/trojan.crt", "key": "/etc/trojan/trojan.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" ], "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": "" } } > **说明**:password可以设置多个,方便多用户使用,关于具体的配置文件,trojan项目给出了详细的解释:[点我直达](https://trojan-gfw.github.io/trojan/config "点我直达")。 ## 3.4 启动docker容器 docker run -d --name trojan --restart always --net host -v /etc/trojan:/etc/trojan teddysun/trojan **说明**:这里使用`--net host`指定容器使用宿主机网络,为的是让其访问`127.0.0.1`是访问服务端,是转发数据到`caddy`。也有另外一种方法,这里不用`--net host`,使用`-p 443:443`映射443端口,但是在上一步的配置文件里需要修改`"remote_addr":"127.0.0.1"`,将其改为`"remote_addr":"你的服务器IP"`。 # 四、客户端配置 ## 4.1 Windows电脑端 先到`trojan releases`下载适用于windows端的包,解压缩后,配置目录下的`config.json`文件。其中`releases`地址是:[点我访问](https://github.com/trojan-gfw/trojan/releases "点我访问")。 配置文件格式如下: { "run_type": "client", "local_addr": "127.0.0.1", "local_port": 1080, "remote_addr": "yourdomain.com", "remote_port": 443, "password": [ "trojanuser1" ], "log_level": 1, "ssl": { "verify": true, "verify_hostname": true, "cert": "", "cipher": "ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA:AES128-SHA:AES256-SHA:DES-CBC3-SHA", "cipher_tls13": "TLS_AES_128_GCM_SHA256:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_256_GCM_SHA384", "sni": "", "alpn": [ "h2", "http/1.1" ], "reuse_session": true, "session_ticket": false, "curves": "" }, "tcp": { "no_delay": true, "keep_alive": true, "reuse_port": false, "fast_open": false, "fast_open_qlen": 20 } } > **说明**:此处需要修改一下"remote_addr"为你的域名,还有设置的password。配置好后,启动trojan,如果报错请先安装同目录下的 VC_redist.x64.exe 程序文件,再启动trojan,目前trojan客户端还比较简陋,需要搭配浏览器插件做分流。 ## 4.2 Android端 trojan作者为Android端也做出了一款软件,名为`Igniter`,可以使用它来添加使用trojan节点,具体下载地址:[点我访问](https://github.com/trojan-gfw/igniter/releases "点我访问")。 虽然此软件还处于测试阶段,作者已经释出了好多预编译好的版本,可以下载上述链接里的`app-release.apk`文件进行安装使用。 - 服务器:yourdomain.com - 端口:443 - 密码:trojanuser1 - Enable IPv6:可以不启用 - Verify Certificate:校验证书,因为使用的是CA证书,这里推荐打开,如果是自签证书,这里可以不开启 - Bypass China With Clash:默认开启,建议开启,它类似于白名单,中国的站点走直连,别的都走代理。 # 五、总结 本文也是粗浅的介绍了`trojan`的部署方法,`trojan`客户端还不是很完善,但听说这款协议很稳定,表现很出色。另外本文如有哪里书写错误,欢迎留言讨论或者提出疑问。 ### 参考链接: - [github上trojan项目](https://github.com/trojan-gfw/trojan "github上trojan项目") - [github上igniter项目地址](https://github.com/trojan-gfw/igniter/releases "github上igniter项目地址") - [介绍trojan详细配置页](https://trojan-gfw.github.io/trojan/config "介绍trojan详细配置页") - [秋水逸冰为之制作的trojan镜像](https://hub.docker.com/r/teddysun/trojan "秋水逸冰为之制作的trojan镜像") - [acme.sh项目地址](https://github.com/acmesh-official/acme.sh "acme.sh项目地址") - [trojan原理解释(推荐)](https://trojan-tutor.github.io/2019/04/10/p41.html "trojan原理解释(推荐)") - [Android端配置Igniter](https://www.rultr.com/tutorials/vps/3825.html "Android端配置Igniter") 标签: none
站长你好!之前你的网站没换域名之前有篇文章《使用docker快速部署v2ray协议》内有docker trojan与v2ray走caddy tls共存443端口的实例教程,如今文章没有被收录望恢复下文章,给予有需要的网友一些些帮助,万分感谢!
之前忘记做备份了,抱歉,现在源文件已经丢失了