# pyxray 使用手册 `pyxray` 是一个轻量级 Xray 控制面板。它负责下载 Xray 运行资源、导入代理节点、生成 Xray 配置、启动/停止 Xray,并可在 Linux/Docker 环境下为宿主机提供透明代理。 当前实现重点: | 能力 | 状态 | 说明 | | --- | --- | --- | | Xray 资源管理 | 已实现 | 下载/检查 `xray`、`geoip.dat`、`geosite.dat`。 | | 节点导入 | 已实现 | 支持 `vless`、`vmess`、`trojan`、`trojan-go`、`shadowsocks`。 | | 配置生成 | 已实现 | 根据选中节点和 `settings.toml` 生成 `config.json`。 | | Xray 运行控制 | 已实现 | Web 内启动/停止由 pyxray 托管的 Xray 子进程。 | | 透明代理 | 已实现 | 生成并执行 `redirect` / `tproxy` / `system_proxy` / `tun` 相关配置和脚本。 | | 订阅 | 未实现 | 当前只支持手动导入节点链接。 | | 登录认证 | 未实现 | 默认不要直接暴露到不可信网络。 | ## 运行机制 ```mermaid flowchart LR UI[Web UI] --> API[Flask/Gunicorn API] API --> Nodes[nodes.toml] API --> Settings[settings.toml] API --> Assets[download.toml + xray assets] API --> Gen[config.json + transparent scripts] Gen --> Xray[Xray process] API --> Runtime[TransparentRuntime] Runtime --> HostNet[iptables/nft/ip rule/resolv.conf] Xray --> Proxy[Selected outbound node] ``` 默认数据目录: | 文件/目录 | 作用 | | --- | --- | | `data/nodes.toml` | 保存节点列表和当前选中节点。 | | `data/settings.toml` | 保存配置页设置。 | | `data/download.toml` | 保存下载页设置。 | | `data/config.json` | 生成给 Xray 使用的配置。 | | `data/xray/` | 保存 `xray` / `xray.exe`、`geoip.dat`、`geosite.dat`。 | | `data/transparent/` | 保存透明代理脚本、nftables 配置和 `tinytun.yaml`。 | | `data/xray.log` | 保存 Xray 输出和 pyxray 运行日志。 | ## Docker 部署 构建镜像: ```bash sh scripts/build.sh ``` 启动服务: ```bash docker compose up -d --build ``` 访问: ```text http://:8080 ``` 当前 `compose.yaml` 使用: | 配置 | 作用 | | --- | --- | | `network_mode: host` | 让容器直接使用宿主机网络,透明代理规则作用于宿主机网络栈。 | | `privileged: true` | 允许执行 `iptables`、`nft`、`ip rule`、写 `/proc/sys/net/...`。 | | `./data:/config` | 持久化 pyxray 数据和 Xray 资源。 | | `/etc/resolv.conf:/etc/resolv.conf` | 允许 DNS 劫持脚本修改宿主机 DNS。 | | `/lib/modules:/lib/modules:ro` | 读取宿主机内核模块信息。 | ## Web 使用流程 1. 打开 Web 控制台。 2. 在“下载”页检查或下载 Xray 资源。 3. 在“节点”页导入节点链接。 4. 选择一个当前节点。 5. 在“配置”页调整入站、路由、DNS、透明代理。 6. 保存设置。 7. 点击“启动 Xray”。 8. 在“日志”页确认 Xray 和透明代理脚本执行结果。 ## CLI 启动 Web 控制台: ```bash pyxray web --host 127.0.0.1 --port 3309 --xray-dir data/xray ``` 查看配置文件: ```bash pyxray configs --download pyxray configs --settings ``` 清理配置/下载资源: ```bash pyxray clear --download pyxray clear --all ``` 直接下载或补齐 Xray 资源: ```bash pyxray download --target all --directory data/xray --force pyxray download --target geoip --geoip-url https://example.invalid/geoip.dat ``` ## 透明代理建议 | 场景 | 建议 | | --- | --- | | 只代理本机 TCP 流量 | `transparent.mode = proxy`,`transparent.type = redirect`。 | | 国内直连、国外代理 | `transparent.mode = whitelist`,`transparent.type = redirect`。 | | 需要 UDP/TProxy | 使用 `transparent.type = tproxy`,确认宿主机内核和防火墙支持。 | | 只想给应用显式设置代理 | 使用 `system_proxy` 或普通 rule HTTP/SOCKS 入站。 | | Docker 容器流量也要透明代理 | 开启 `docker_transparent` 并确认 `docker_transparent_cidrs` 覆盖实际 Docker 网段。 | ## 注意事项 | 项目 | 说明 | | --- | --- | | 端口冲突 | 启动 Xray 前会检查生成配置里的入站端口是否可用。 | | 透明代理权限 | Docker 透明代理部署需要 `network_mode: host` 和 `privileged: true`。 | | DNS 劫持 | `redirect + local_dns_listen` 会改写 `/etc/resolv.conf`。 | | 多 worker | 不要把 Gunicorn 改成多 worker;当前内存任务表和 Xray 子进程状态不能跨进程共享。 | | Web 暴露 | 当前没有认证,建议只在可信局域网使用。 | | 自动订阅 | 当前不支持订阅更新,节点需要手动导入。 | ## 阅读和修改代码 | 路径 | 职责 | | --- | --- | | `pyxray/cli.py` | CLI 入口,默认启动 Web。 | | `pyxray/web/server.py` | Flask app 装配。 | | `pyxray/web/*.py` | Web API:节点、下载、配置生成、服务控制。 | | `pyxray/web/templates/` | Web UI 模板。 | | `pyxray/web/static/` | 前端交互逻辑和样式。 | | `pyxray/libs/nodes/` | 节点链接解析、标准化、持久化。 | | `pyxray/libs/xray_config/` | Xray JSON、透明代理脚本、TinyTun 配置生成。 | | `pyxray/libs/xray_runtime.py` | Xray 子进程生命周期和日志转发。 | | `pyxray/libs/xray_transparent_runtime.py` | 透明代理脚本执行、回滚和本地 CIDR watcher。 | | `tests/` | 单元测试和 Web API 测试。 | 详细结构和调用时序见 [docs/infra.md](docs/infra.md)。 ## 配置文档 配置总览见 [docs/config.md](docs/config.md)。 按分类阅读: | 分类 | 文档 | | --- | --- | | 核心 | [docs/config/core.md](docs/config/core.md) | | 入站 | [docs/config/inbounds.md](docs/config/inbounds.md) | | 路由 | [docs/config/routing.md](docs/config/routing.md) | | DNS | [docs/config/dns.md](docs/config/dns.md) | | 透明代理 | [docs/config/transparent.md](docs/config/transparent.md) | | 透明代理 iptables 排查 | [docs/transparent-iptables.md](docs/transparent-iptables.md) | | 出站和自动更新 | [docs/config/outbounds-auto-update.md](docs/config/outbounds-auto-update.md) | | Xray 资源下载 | [docs/config/assets.md](docs/config/assets.md) |