news 2026/9/10 22:05:55

Cobalt 如何配置 FREEBIND_CIDR 让每次下载使用随机出口 IP?

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Cobalt 如何配置 FREEBIND_CIDR 让每次下载使用随机出口 IP?

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。

前置准备

  1. 已按 docs/run-an-instance.md 的推荐方式准备好dockerdocker-compose(本文主路径为 Docker 部署);Node.js 方式则要求 Node.js 18 及以上和git
  2. 已按 freebind.js 的 setup 说明在宿主机完成 freebind 安装。这一步在 Docker 场景下是宿主机层面的操作,与容器配置分开进行。
  3. 准备一个可用的 IPv6 前缀作为FREEBIND_CIDR的值。文档给出的示例值是2001:db8::/32,实际部署时替换为你自己的前缀。

配置 Docker 实例(主路径)

按 docs/run-an-instance.md 的步骤创建配置目录和docker-compose.yml,从 docs/examples/docker-compose.example.yml 复制示例配置后,只需修改cobalt-api服务:新增FREEBIND_CIDRAPI_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-apiports: 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 start

Linux 之外的平台该变量不会被读取,无需配置。

验证配置是否生效

由于 freebind 要求API_LISTEN_ADDRESS127.0.0.1,配置完成后 API 只监听宿主机本机的 9000 端口。可以从宿主机请求 docs/api.md 中记录的GET /api/serverInfo接口确认服务按新配置正常启动:

curl http://127.0.0.1:9000/api/serverInfo

该接口返回application/json,包含versioncommitbranchnameurlcorsstartTime字段。能正常返回说明 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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/10 22:01:47

溆浦AI短视频:乡村振兴的数字工具

来源:唐sirAI(www.tangsir.cc) | 电话:18874530691━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━怀化溆浦的企业和商家们,您是否还在为高昂的短视频制作费用而烦恼?是…

作者头像 李华
网站建设 2026/9/10 22:01:03

C语言字符串与内存操作函数深度解析与优化实践

1. C语言三大函数家族深度解析 作为一门接近硬件层面的编程语言,C语言对字符、字符串和内存的操作直接反映了计算机系统最基础的工作机制。不同于高级语言的封装处理,C语言要求开发者必须亲自管理每一个字节的生死存亡。本文将带您深入探索strlen()、mem…

作者头像 李华