由于 pfSense 的软件仓库在国外,在国内网络环境中,pfSense 经常遇到下载或更新失败的情况。pfSense 自带代理支持,可以让系统更新和软件包下载通过 HTTP 代理进行。
pfSense WebGUI 中的代理支持不是透明代理,也不是局域网全局代理。它主要供系统更新、软件包管理等支持代理的 pfSense 组件使用,不会自动代理ping、普通 Shell 命令、防火墙转发流量、局域网客户端流量、所有由 pfSense 发起的网络连接。
准备代理
本文假设代理信息如下:
代理地址:proxy.example.com 代理端口:8080 用户名:proxyuser
代理必须支持 HTTPS 连接,因为 pfSense 软件仓库使用 HTTPS。
升级前可以进入诊断 → 命令工具,或者通过 SSH 进入 Shell,验证代理端口是否可达:
nc -z -v -w 8 proxy.example.com 8080
配置代理
导航到系统 → 高级选项 → 其他 → 代理支持,输入各项代理参数,如下图所示:
代理地址只填写主机名或 IP,不要附加路径。保存后,代理配置会保存到 /conf/config.xml 。
应用补丁
设置完代理参数后,应该就可以使用代理进行系统更新了,但在 pfSense Plus 26.03 测试环境中,在更新系统时出现了以下了出错提示:
pfSense-repoc-static: failed to fetch the repo data failed to read the repo data. failed to update the repository settings!!!
代理服务器、端口和账号均正常,但升级仍然失败。如果碰到这种情况,还需要修改升级脚本生成的认证变量。找到/usr/local/libexec/pfSense-upgrade文件,用文本程序打开并查找:
HTTP_PROXY_AUTH="${HTTP_PROXY_USER}:${HTTP_PROXY_PASS}"
export HTTP_PROXY_AUTH
替换为:
HTTP_PROXY_AUTH="basic:*:${HTTP_PROXY_USER}:${HTTP_PROXY_PASS}"
export HTTP_PROXY_AUTH
并保存。
检查测试
升级开始后,通过另一个 SSH 会话执行:
sockstat -46c | grep -E 'pkg-static|fetch'
如果正在通过代理下载,远端地址应是代理服务器及其端口,例如:proxy.example.com:8080。如果看到 pkg-static 直接连接软件仓库的公网 IP 和 443端口,则说明当前任务没有使用代理。
也可以查看更新进程:
ps auxww | grep -E 'pfSense-upgrade|pkg-static|fetch' | grep -v grep
以及升级日志:
tail -f /cf/conf/upgrade_log.txt
其他问题
pfSense-upgrade属于系统文件,升级后可能被软件包覆盖。每次完成大版本升级后都应检查:
grep -n 'HTTP_PROXY_AUTH=' /usr/local/libexec/pfSense-upgrade
如果官方新版本已经修复,则保留官方实现。如果仍然是旧格式,并且认证代理再次失败,再根据实际版本评估是否重新应用补丁。
