Podman部署Clash与Yacd
Podman 部署 Clash 与 Yacd 局域网代理配置笔记
一、环境概述
- 宿主机:Linux(ARM架构)
- 容器运行时:Podman
- 代理核心:Clash(dreamacro/clash:dev)
- 管理面板:Yacd(Yet Another Clash Dashboard)
- 客户端:Windows 11 火狐浏览器
二、目录结构
/data/clash/
├── podman-compose.yml
└── config/
└── config.yaml三、Podman Compose 配置文件
文件路径:/data/clash/podman-compose.yml
services:
clash:
image: docker.io/dreamacro/clash:dev
container_name: clash
network_mode: bridge
logging:
driver: none
ports:
- "7895:7890"
- "7896:7891"
- "7897:9090"
volumes:
- ./config/config.yaml:/root/.config/clash/config.yaml:ro
environment:
- TZ=Asia/Shanghai
restart: unless-stopped
yacd:
image: docker.io/haishanh/yacd:master
container_name: yacd
network_mode: bridge
ports:
- "1234:80"
restart: unless-stopped端口说明
| 宿主机端口 | 容器端口 | 用途 |
|---|---|---|
| 7895 | 7890 | HTTP/SOCKS5 代理端口 |
| 7896 | 7891 | 混合代理端口 |
| 7897 | 9090 | 外部控制 API 端口(Yacd 连接用) |
建议:为了便于记忆,可将 "7897:9090" 改为 "9090:9090"。
四、Clash 配置文件关键字段
文件路径:/data/clash/config/config.yaml
allow-lan: true
external-controller: 0.0.0.0:9090
secret: ""字段说明
| 字段 | 正确值 | 错误值 | 说明 |
|---|---|---|---|
| allow-lan | true | false | 允许局域网设备连接代理 |
| external-controller | 0.0.0.0:9090 | 127.0.0.1:9090 | API 监听地址,0.0.0.0 表示接受所有来源连接 |
| secret | "" 或 "密码" | - | API 访问密码,空字符串表示无需认证 |
关键点:external-controller 必须设置为 0.0.0.0:9090,否则外部无法访问 API。
五、Yacd 面板配置
访问地址
http://宿主机IP:1234三个字段的填写
| Yacd 字段 | 填写内容 | 说明 |
|---|---|---|
| API Base URL | http://宿主机IP:7897 | 宿主机 IP + Clash API 映射端口 |
| Secret | 留空 | 对应 config.yaml 中的 secret 字段 |
| Label | 任意名称 | Yacd 本地标签,用于标识不同配置 |
填写示例
假设宿主机 IP 为 192.168.1.100:
| 字段 | 填写内容 |
|---|---|
| API Base URL | http://192.168.1.100:7897 |
| Secret | (留空) |
| Label | 办公Clash |
常见错误
| 错误填写 | 原因 |
|---|---|
http://127.0.0.1:9090 | 127.0.0.1 指向 Yacd 容器自身 |
http://localhost:7897 | localhost 同样指向 Yacd 容器自身 |
http://宿主机IP:9090 | 端口错误,宿主机 9090 未映射 |
六、常用命令
查看端口映射
podman port clash预期输出:
7890/tcp -> 0.0.0.0:7895
7891/tcp -> 0.0.0.0:7896
9090/tcp -> 0.0.0.0:7897查看配置文件中的关键字段
grep -E "external-controller|secret|allow-lan" /data/clash/config/config.yaml修改配置文件中 external-controller 的 IP
sed -i.bak 's/external-controller: 127.0.0.1:9090/external-controller: 0.0.0.0:9090/' /data/clash/config/config.yaml启动所有服务
cd /data/clash
podman-compose up -d单独启动或重启 Clash
podman-compose up -d clash
podman-compose restart clash查看容器状态
podman-compose ps查看日志
podman logs clash
podman-compose logs -f测试 API 是否可访问
curl http://127.0.0.1:7897正常响应应返回 404 page not found 或 JSON 格式内容。
七、故障排查
问题:curl 返回 Connection refused
可能原因:external-controller 设置为 127.0.0.1:9090
解决方案:
修改配置文件:
external-controller: 0.0.0.0:9090重启容器:
podman-compose restart clash
问题:容器启动失败
排查步骤:
查看日志:
podman logs clash- 确认配置文件格式正确(YAML 格式)
- 检查
config.yaml是否完整
问题:Yacd 面板连接失败
排查步骤:
在宿主机测试 API:
curl http://127.0.0.1:7897- 检查宿主机防火墙是否开放对应端口
- 确认 Yacd 中 API Base URL 填写正确
八、火狐浏览器代理配置
配置步骤
- 火狐浏览器 → 设置 → 搜索"代理" → 设置
- 选择"手动代理配置"
- HTTP 代理:宿主机 IP,端口:7895
- 勾选"将此代理服务器用于所有协议"
- 点击确定保存
配置示例
| 配置项 | 值 |
|---|---|
| HTTP 代理 | 192.168.1.100 |
| 端口 | 7895 |
| 所有协议使用相同代理 | 勾选 |
九、原理说明
Yacd 与 Clash 的关系
| 组件 | 角色 | 功能 |
|---|---|---|
| Clash | 核心引擎 | 处理网络流量、执行代理规则 |
| Yacd | 控制面板 | 通过 API 读取和修改 Clash 运行状态 |
节点切换原理
- Clash 启动时读取
config.yaml,将配置加载到内存 - Clash 完全按照内存中的配置运行
- 用户在 Yacd 面板点击节点
- Yacd 通过 API 向 Clash 发送 HTTP PATCH 请求
- Clash 更新内存中的节点选择状态
- 硬盘上的
config.yaml文件内容保持不变
关键结论
- Yacd 修改的是 Clash 的运行时内存状态,不是配置文件
- 重启 Clash 容器会重新从硬盘读取配置,之前的选择会丢失
- 如需要持久化节点选择,需在
config.yaml中直接配置默认节点
十、资源占用说明
- Clash 核心:主要资源消耗者,优化后可控制在 100MB 以内
- Yacd 面板:纯静态前端页面,几乎不消耗服务器资源
- Yacd 可以不持续运行,仅在需要切换节点时启动
资源优化建议
- 日志级别设为
error或warning - 关闭 TUN 模式(如仅需浏览器代理)
- 精简分流规则集
- 使用 Clash Meta (mihomo) 内核以获得更好内存优化
十一、配置文件镜像源说明
# 官方镜像
image: docker.io/haishanh/yacd:master
# 镜像加速服务(等同于官方镜像)
image: docker.1ms.run/haishanh/yacd:latestdocker.1ms.run 是镜像加速服务,拉取的是 Docker Hub 官方镜像的副本,功能完全一致。