侧边栏壁纸
博主头像
Fonda's Lab 博主等级

关山难越,谁悲失路之人?萍水相逢,尽是他乡之客。

  • 累计撰写 50 篇文章
  • 累计创建 27 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

使用docker重新部署trojan和hysteria2

LouisFonda
2025-07-10 / 0 评论 / 0 点赞 / 9 阅读 / 0 字 / 正在检测是否收录...

使用docker重新部署trojan和hysteria2

引言

最近的服务器不知道为什么访问443端口越来越卡,时好时坏,找不到原因真的非常难受,但是我ping的时候,发现延迟非常底,而且我使用hysteria2也非常快,也是用443端口,只不过hysteria使用的是udp,所以我猜测是我之前使用nginx对sni分流导致的。而且最近1panel也出2.0了,干脆直接重装一下服务器吧!既然都重装服务器了,那干脆把服务器上用systemd管理的两个反审查协议改成docker部署吧!,自从用了docker之后再也接受不了在宿主机上跑任何服务😁。

解决方案

我原本想自己编写Dockerfile的,但是在一个容器里面管理多个服务麻烦不说,也不符合应用容器的规范,docker也不建议这么做,所以直接用docker compose来编排,这样能统一管理这两个服务。由于这两个服务都需要tls证书,这里原本先引入acme.sh统一管理的,但是acme.sh还需要手动输入命令,后期还要install安装证书,这里我直接使用hysteria2的证书管理服务,hysteria2原生就支持自动申请证书,只需写在配置文件中即可,直接用volume共享给trojan所在的容器即可。

配置过程

1. 编写docker-compose

services:
  hysteria:
    image: tobyxdd/hysteria
    container_name: hysteria
    restart: always
    network_mode: "host"
    volumes:
      - acme:/acme # hysteria 申请的证书会保存在这里
      - ./hysteria.yaml:/etc/hysteria.yaml
    command: ["server", "-c", "/etc/hysteria.yaml"]
  trojan-go:
    image: p4gefau1t/trojan-go
    container_name: trojan-go
    restart: always
    network_mode: "host"
    volumes:
      - acme:/acme # trojan会从这个volume读取证书
      - ./trojan-go.json:/etc/trojan-go.json
    command: ["/etc/trojan-go.json"]
volumes:
  acme: # 创建一个保存证书的volume

2. 编写服务的配置文件

hysteria的配置文件

listen: 0.0.0.0:8443

acme:
  domains:
    - hysteria.domain # hysteria需要的域名 必填
    - trojan.domain # 共享给trojan的域名  必填
  email: @exapmle.com # 填写你的邮箱 必填
  type: dns
  dns:
    name: cloudflare
    config:
      cloudflare_api_token: jMVW8u4qUp-a8Y13335KK1rKXwlyIofg5ANfI # 你自己的apikey,不要想了,这个被我修改了🤣

auth:
  type: password
  password: 12345678 # 用于hysteria的密码
  userpass:
    user1: 123456789 # 基于用户的验证,具体参考hysteria的文档
    user2: 123456890

# 伪装,别人访问将会看到这个网站,防止gfw主动检测
masquerade:
  type: proxy
  proxy:
    url: https://git.icoding.fun
    rewriteHost: true
    insecure: false

# 出站,把所有流量交给clash做分流处理,可以解锁奈飞
# outbounds:
#   - name: clash
#     type: socks5
#     socks5:
#       addr: 127.0.0.1:7890

# 流量统计
# trafficStats:
#   listen: 127.0.0.1:2446
#   secret: 12345678

这个配置文件申请了两个tls证书,一个给自己使用,一个共享给trojan使用,出站的部分被我注释了,因为我发现我的服务器已经原生解锁了手机端的chatgpt,所以这一部分我就不需要了,如果你的服务器没有解锁,请给服务器套warp解锁,具体可以参考我的另一批文章 Trojan的搭建和使用(解锁奈飞)

trojan的配置文件

{
  "run_type": "server",
  "local_addr": "0.0.0.0",
  "local_port": 8443,
  "remote_addr": "127.0.0.1",
  "remote_port": 3000,
  "password": [
    "12345678",
    "12345678"
  ],
  "ssl": {
    "cert": "/acme/certificates/acme-v02.api.letsencrypt.org-directory/free.icoding.fun/free.icoding.fun.crt",
    "key": "/acme/certificates/acme-v02.api.letsencrypt.org-directory/free.icoding.fun/free.icoding.fun.key",
    "fallback_port": 1234
  }
}

这两个服务的配置非常简单,就不过多赘述了,trojian直接使用了acme这个volume共享的证书,这样就没必要再起一个certbot或者acme.sh的服务了。

启动服务

将上面所有配置文件都放在同一个配置文件夹然后启动服务

docker compose up -d

查看运行状态

docker ps

一切都顺利的话,服务就会稳定的在后台运行。

客户端连接

之前一直使用的是clash verge,自从使用了2.3版本之后hysteria连接总是断流,起初我还以为是我服务器的问题,后面使用hysteria原生的客户端非常稳定,在这里我也非常推荐大家选择一个自己喜欢的协议,使用一个原生的客户端,这样体验会更好,缺点就是部分协议无法原生支持分流,不过这对我来说问题不大,我自己的服务器流量够大,管饱,这就不是我考虑的问题了

hysteria客户端配置

# config.yaml
server: hy.icoding.fun:8443

auth: 123456789

bandwidth:
  up: 30 mbps # 根据自己的服务器带宽自行调节
  down: 30 mbps

socks5:
  listen: 127.0.0.1:1080

http:
  listen: 127.0.0.1:8080 # 需要使用的http代理

启动服务


trojan client -c config.yaml
2025-07-10T21:55:13+08:00       INFO    connected to server     {"udpEnabled": true, "tx": 3750000, "count": 1}
2025-07-10T21:55:13+08:00       INFO    HTTP proxy server listening     {"addr": "127.0.0.1:8080"}
2025-07-10T21:55:13+08:00       INFO    SOCKS5 server listening {"addr": "127.0.0.1:1080"}

设置代理

reg add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 1 /f && reg add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer /t REG_SZ /d "http://127.0.0.1:1080" /f

你也可以手动设置,只不过每次手动打开,手动关闭非常的麻烦,干脆直接写一个批处理文件得了。

@echo off

%设置字符集为 UTF-8%
set LANG=zh_CN.UTF-8
chcp 65001

%获取当前批处理文件所在的目录%
set SCRIPT_DIR=%~dp0

%设置代理地址%
set PROXY_SERVER=http://127.0.0.1:8080

%配置系统代理%
echo 正在设置代理到 %PROXY_SERVER% ...
reg add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 1 /f
reg add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer /t REG_SZ /d %PROXY_SERVER% /f

%设置 Hysteria 可执行文件和配置文件的相对路径%
set HYSTERIA_PATH=%SCRIPT_DIR%hysteria.exe
set CONFIG_PATH=%SCRIPT_DIR%config.yaml

%检查 Hysteria 可执行文件是否存在%
if not exist "%HYSTERIA_PATH%" (
    echo Hysteria 可执行文件未找到: %HYSTERIA_PATH%
    exit /b 1
)

%检查配置文件是否存在%
if not exist "%CONFIG_PATH%" (
    echo 配置文件未找到: %CONFIG_PATH%
    exit /b 1
)

%启动 Hysteria 客户端%
echo 正在启动 Hysteria 客户端...
start /B "" "%HYSTERIA_PATH%" client -c "%CONFIG_PATH%"
echo Hysteria 客户端已启动...

%等待 Hysteria 进程结束(按任意键也会结束)%
echo 按任意键停止 Hysteria 服务...
pause

%Hysteria 进程结束后,清除代理设置%
echo 正在停止 Hysteria 并清除代理设置...
taskkill /IM hysteria.exe /F

%禁用代理%
echo 禁用代理...
reg add "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyEnable /t REG_DWORD /d 0 /f
reg delete "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Internet Settings" /v ProxyServer /f

echo Hysteria 服务已停止,代理已关闭。
pause

将这个文件和客户端配置文件放到同一目录即可,创建快捷方式到桌面即可,每次启动会自己配置代理,按任意键关闭服务之后会关闭代理。

总结

用docker-compose部署之后,即使后面我们换服务器了也不要手动通过systemd配置服务,直接 docker compose up -d 一条命令即可搞定,减少心智负担,上面我并没有配置trojan的客户端,原因很简单,基于quic的hysteria太好用了,要使用trojan同理,你也可以直接使用clash或者v2ray.

0

评论区