Cobalt 如何配置 FREEBIND_CIDR 让每次下载使用随机出口 IP?
【免费下载链接】cobaltbest way to save what you love项目地址: https://gitcode.com/GitHub_Trending/cob/cobalt
如果你自托管了一个 Cobalt 实例,希望每一次下载任务都从不同出口 IP 发出请求,可以在 API 实例上配置FREEBIND_CIDR。官方文档说明:设置该变量后,"cobalt to pick a random IP for every download and use it for all requests it makes for that particular download",即每次下载随机取一个 IP,并且该次下载产生的所有外部请求都固定使用这个 IP。适用前提:系统为 Linux,且实例由你自己部署(Docker Compose 或 Node.js 两种运行方式均支持该配置)。
FREEBIND_CIDR 的作用与适用条件
FREEBIND_CIDR是一个 API 实例的环境变量,默认值为空,示例值为2001:db8::/32,含义是"用于为 cobalt 请求随机分配地址的 IPv6 前缀"(见 docs/run-an-instance.md 的环境变量表)。围绕它有三条明确的适用条件:
- 仅支持 Linux:环境变量表中写明 "only supported on linux systems",代码中该配置也只在 Linux 平台被读取(src/modules/config.js),非 Linux 下设置无效。
- 宿主机要先装好 freebind:文档要求先按 freebind.js 包的 setup 说明完成安装,再配置 Cobalt。
freebind也是本项目的依赖之一(package.json 中版本为^0.2.2)。 - 不能与外部代理同时使用:
API_EXTERNAL_PROXY与 freebind 互斥。若两个变量同时设置,API 启动时会抛出错误Freebind is not available when external proxy is enabled(src/core/api.js)。
随机取 IP 的具体逻辑在 src/modules/processing/match.js:配置存在时,每次匹配请求会通过freebind.ip.random(env.freebindCIDR)取一个随机地址,并用它构造该次请求的 dispatcher。
前置准备
- 已按 docs/run-an-instance.md 的推荐方式准备好
docker和docker-compose(本文主路径为 Docker 部署);Node.js 方式则要求 Node.js 18 及以上和git。 - 已按 freebind.js 的 setup 说明在宿主机完成 freebind 安装。这一步在 Docker 场景下是宿主机层面的操作,与容器配置分开进行。
- 准备一个可用的 IPv6 前缀作为
FREEBIND_CIDR的值。文档给出的示例值是2001:db8::/32,实际部署时替换为你自己的前缀。
配置 Docker 实例(主路径)
按 docs/run-an-instance.md 的步骤创建配置目录和docker-compose.yml,从 docs/examples/docker-compose.example.yml 复制示例配置后,只需修改cobalt-api服务:新增FREEBIND_CIDR和API_LISTEN_ADDRESS两个环境变量,并把容器的network_mode设为host。文档原文指出:在 Docker 容器中使用 freebind 时,"you also need to set theAPI_LISTEN_ADDRESSenv to127.0.0.1, and setnetwork_modefor the container tohost"。
cobalt-api服务修改后大致如下(在示例配置基础上调整):
cobalt-api: image: ghcr.io/imputnet/cobalt:7 restart: unless-stopped container_name: cobalt-api init: true network_mode: host environment: # 替换为你自己实例的目标 URL,否则 cobalt 无法正常工作 API_URL: "https://api.cobalt.tools/" API_NAME: "eu-nl" # 你的 IPv6 前缀,用于每次下载随机取出口 IP FREEBIND_CIDR: "2001:db8::/32" # freebind 场景下必须固定为 127.0.0.1 API_LISTEN_ADDRESS: "127.0.0.1" labels: - com.centurylinklabs.watchtower.scope=cobalt需要注意两点:
- 示例配置中
cobalt-api的ports: 9000:9000/tcp段对应常规端口映射;改用network_mode: host后端口映射不再需要,把该段注释或删除。 API_URL必须替换为你实例自己的地址(文档要求 "make sure to replace default URLs with your own or cobalt won't work correctly"),且它是运行 API 的必需项。cobalt-web服务不需要为 freebind 做任何改动,freebind 只作用于 API 发出的下载请求。
改完后在配置目录下启动(或重启)容器:
docker compose up -d替代路径:Node.js 方式运行
如果是本地开发或不用 Docker,走 docs/run-an-instance.md 的 "using regular node.js" 一节:clone 仓库、运行npm run setup并在交互提示中选择 API 实例,最后用npm start启动。freebind 只需在启动前把环境变量注入 shell:
export FREEBIND_CIDR="2001:db8::/32" # 替换为你的 IPv6 前缀 npm startLinux 之外的平台该变量不会被读取,无需配置。
验证配置是否生效
由于 freebind 要求API_LISTEN_ADDRESS为127.0.0.1,配置完成后 API 只监听宿主机本机的 9000 端口。可以从宿主机请求 docs/api.md 中记录的GET /api/serverInfo接口确认服务按新配置正常启动:
curl http://127.0.0.1:9000/api/serverInfo该接口返回application/json,包含version、commit、branch、name、url、cors、startTime字段。能正常返回说明 API 已按127.0.0.1:9000监听并可用。
对于"每次下载是否真的换了 IP",文档没有提供直接查看每次请求所用地址的方法;可依据的是文档对该变量行为的描述——随机 IP 会在该次下载的所有请求中被使用。判断配置是否被启用,以启动日志和环境变量为准:若同时设置了API_EXTERNAL_PROXY,API 会因上面提到的错误拒绝启动,这也是一种快速判断。
限制说明
FREEBIND_CIDR只在 Linux 系统上生效,且前提是宿主机已按 freebind.js 的 setup 说明完成安装;缺少这一步时该变量没有实际作用。- 该变量与
API_EXTERNAL_PROXY互斥,二者只能选其一作为出口控制方式。 - Docker 部署时实例对外暴露方式随之改变:监听地址固定为
127.0.0.1后,公网访问需要文档建议的 reverse proxy(如 nginx)配合,文档未给出 freebind 场景下的具体代理配置。
【免费下载链接】cobaltbest way to save what you love项目地址: https://gitcode.com/GitHub_Trending/cob/cobalt
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考