FreeBSD Podman 部署 g4f,Codex 的 Base URL 填 TaoToken 排查 PF 规则
2026/9/20 15:58:28 网站建设 项目流程

1. FreeBSD 上跑 g4f,为什么最后卡在 PF 规则和端口映射

FreeBSD 15.1 上用 Podman 部署 GPT4Free(g4f),本身不算复杂:pkg 装 Podman 5.8.4、挂 fdescfs、加载 pf 内核模块、把/usr/local/etc/containers/pf.conf.sample复制成/etc/pf.conf、确认 nat-anchor 和 rdr-anchor 都在,然后podman run把容器 8080 映射到宿主机 8088。真正让人头疼的是容器起来之后网络不通——podman ps显示 Up,浏览器却打不开http://192.168.0.88:8088/chat/,日志里也没有明显报错。

这类问题的排查点其实很集中:PF 模块有没有真正加载、PF 服务是不是在跑、anchor 规则有没有被 pfctl 读进去、端口映射有没有被防火墙拦掉。传统做法是挨个敲kldstat | grep pfservice pf statuspfctl -f /etc/pf.conf,靠经验判断下一步。但如果你手上有一个能读懂命令输出、还能对照配置给出排查顺序的模型通道,整个过程会快很多。

这篇就按这个思路写:先在 TaoToken 上创建 Key,把 Codex 的模型通道配通,Base URL 填https://taotoken.net/api,然后把 FreeBSD 终端里的真实输出丢给 Codex,让它对照 PF 规则和端口映射给出排查顺序。适合已经在 FreeBSD 上折腾 Podman、被容器网络卡住的运维和自建玩家。

2. 前置:在 TaoToken 创建 Key,给 Codex 配一条模型通道

这一步的目标很简单:让 Codex 能发出模型请求,并且请求走的是你配置的通道。Key 的来源是 TaoToken 官网,Base URL 用 API 地址,两者要配套。

打开https://taotoken.net/?utm_source=taotoken_aicg_blog_end,注册后进入控制台创建 API Key。创建完先复制保存,后面配置里要用到。注意 Base URL 填https://taotoken.net/api,不要带/v1,也不要加任何 UTM 参数——这一点很多人第一次会填错,把/v1拼上去之后请求路径就变成/api/v1/...,通道直接报 404。

Codex 侧的配置核心就两个字段:模型通道的 Base URL 和 Key。不同版本的 Codex 配置入口略有差异,但本质都是把这两项写进它的模型配置里。配好之后先别急着排查 FreeBSD,先让 Codex 返回一次模型响应,确认通道本身是通的。通道没通就去查 PF,等于在错误的层面上找问题。

如果你后面还要长期用 Codex 做编码或 Agent 任务,可以顺带看一下 Coding Plan 的入口,把额度规划好;只是临时排查的话,按量用就行。

3. 可复制配置:Codex 通道 + FreeBSD 排查命令

3.1 Codex 模型通道配置

把下面两个值填进 Codex 的模型配置里:

# Codex 模型通道配置(示意,字段名以你本地版本为准) base_url = https://taotoken.net/api api_key = sk-你的TaoTokenKey model = 你需要的模型名

要点重复一遍:base_url结尾是/api,不带/v1api_key用官网生成的那把,不要自己拼。填完保存,重启 Codex 或重新加载配置。

3.2 FreeBSD 侧要采集的三组输出

排查容器网络,先把这三组命令的输出拿到手,后面直接喂给 Codex:

# 1. 确认 PF 内核模块是否加载 kldstat | grep pf # 2. 查看 PF 服务状态 sudo service pf status # 3. 查看 g4f 容器日志(末尾 50 行) sudo podman logs --tail 50 g4f

再补两组,信息更完整:

# 4. 确认容器端口映射 sudo podman ps -a # 5. 确认 PF 配置里的 anchor 行 grep -n 'anchor' /etc/pf.conf

/etc/pf.conf里必须能看到这三行(顺序和写法按样例来):

nat-anchor "cni-rdr/*" rdr-anchor "cni-rdr/*" anchor "cni-rdr/*"

如果复制样例后手改过,确认这三行没被注释掉、没被写错引号。改完执行sudo pfctl -f /etc/pf.conf重新加载。

3.3 把输出交给 Codex 的提问模板

把上面采集到的输出贴进 Codex,用类似这样的提问:

我在 FreeBSD 15.1 上用 Podman 5.8.4 部署 g4f, 容器 8080 映射到宿主机 8088,podman ps 显示 Up, 但访问 http://192.168.0.88:8088/chat/ 不通。 以下是终端输出: [kldstat | grep pf 的输出] [service pf status 的输出] [pf.conf 里 anchor 相关行] [podman logs g4f 的输出] 请对照 PF 规则和端口映射,给出排查顺序和每一步的预期结果。

Codex 会基于这些真实输出给出排查路径,而不是泛泛而谈。这就是把模型通道用起来的关键:给它真实上下文,它才能对照规则判断。

4. 验证:先确认 Codex 通道跑通,再验证容器网络

4.1 验证 Codex 通道

配置完成后,让 Codex 先返回一次模型响应。最简单的办法是发一句普通提问,比如「返回一句确认信息」。如果它能正常回复,说明 Base URL 和 Key 都生效了,通道跑通。如果报 401,检查 Key 是否复制完整;报 404,检查 Base URL 是不是多带了/v1

4.2 验证 FreeBSD 容器网络

通道确认后,按 Codex 给出的排查顺序逐条执行。典型顺序是这样的:

# 第一步:PF 模块没加载的话,先加载 sudo kldload pf echo 'pf_load="YES"' | sudo tee -a /boot/loader.conf # 第二步:PF 服务没起来的话,启动并设开机自启 sudo sysrc pf_enable=YES sudo service pf start # 第三步:重新加载 PF 配置 sudo pfctl -f /etc/pf.conf # 第四步:确认端口映射和监听 sudo podman ps -a sockstat -l4 | grep 8088 # 第五步:本地回环测试 fetch -o - http://127.0.0.1:8088/chat/ 2>&1 | head -10

每一步都有预期结果:kldstat | grep pf应该能看到 pf 模块;service pf status应该显示 running;sockstat -l4 | grep 8088应该能看到监听;fetch本地回环应该返回页面内容。哪一步不符合预期,就停在那一步深挖。

实测下来,最常见的坑是 PF 模块加载了但服务没启动,或者 pf.conf 改了但没执行pfctl -f重新加载。这两个点确认后,大部分「容器 Up 但访问不通」都能解决。

5. 本篇常见错排查

5.1 Codex 报 404 或 401

404 基本是 Base URL 写错,检查是不是填成了https://taotoken.net/api/v1。401 是 Key 问题,回官网重新生成一把,确认复制时没有多余空格。这两个错误和 FreeBSD 无关,先在通道层面解决。

5.2 kldstat 看不到 pf 模块

说明模块没加载。执行sudo kldload pf立即加载,同时把pf_load="YES"写进/boot/loader.conf保证重启后生效。只加载不写 loader.conf,重启后又回到原点。

5.3 service pf status 显示没运行

PF 服务没启动。sudo sysrc pf_enable=YES设开机自启,sudo service pf start立即启动。启动失败通常是 pf.conf 语法有问题,用sudo pfctl -nf /etc/pf.conf做语法检查。

5.4 anchor 行缺失或写错

grep -n 'anchor' /etc/pf.conf看不到那三行,或者引号、通配符写错,容器网络的 NAT 和端口转发就不会生效。对照样例文件重新确认,改完必须sudo pfctl -f /etc/pf.conf

5.5 端口被占用

podman ps显示 Up 但sockstat -l4 | grep 8088没监听,可能是端口冲突。换一个宿主机端口重新启动容器:

sudo podman rm -f g4f sudo podman run -d --name g4f --os=linux \ -p 8090:8080 \ -v /tmp/g4f_data/har_and_cookies:/app/har_and_cookies \ -v /tmp/g4f_data/generated_media:/app/generated_media \ hlohaus789/g4f:latest-slim

5.6 容器日志里有报错但看不懂

sudo podman logs --tail 50 g4f的输出直接贴给 Codex,让它结合 PF 配置和端口映射一起分析。日志里的报错往往和网络层问题是关联的,单独看容易误判。

6. 把 Key 配好,让 Codex 帮你排 FreeBSD 的坑

回到最开始的目标:你需要的是一条能用的模型通道,加上一套能对照真实输出给排查顺序的方法。Key 在https://taotoken.net/?utm_source=taotoken_aicg_blog_end创建,Base URL 填https://taotoken.net/api,不带/v1、不加 UTM。通道跑通后,FreeBSD 终端里的kldstatpfctlpodman logs输出就是最好的排查素材。

配通之后,遇到容器网络不通,不用再凭记忆挨个试命令。把输出丢给 Codex,让它对照 PF 规则和端口映射给出顺序,你按顺序验证预期结果就行。这套方法不只适用于 g4f,任何 FreeBSD Podman 容器网络问题都能套用。先去把 Key 创建好,通道验证通过,再回来处理 PF 那几行规则。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询