在 Fedora 上配置代理,很多人遇到的困扰是:浏览器能走代理,但终端里的 curl、wget 却直连;dnf 更新软件包时又单独失败。原因很简单,Linux 下并没有一个真正覆盖所有程序的“全局代理开关”,不同工具读取代理配置的渠道各不相同。想让整个系统尽量统一走代理,需要从环境变量、桌面环境设置、包管理器配置等多个层面同时入手。本文就以 Fedora 为例,把系统范围代理配置的完整方案讲清楚。

一、通过环境变量配置代理(最通用的方式)
环境变量是 Linux 下代理配置的基础方案。绝大多数命令行工具,包括 curl、wget、git、pip 等,都会读取标准的环境变量来判断代理地址。常用的变量有四个:http_proxy、https_proxy、ftp_proxy 和 no_proxy。注意大小写,有些工具只认小写,有些则大小写都支持,建议两组都设置以确保兼容。
如果只是临时在当前终端会话使用,直接执行 export 即可:
export http_proxy="http://192.168.1.100:8080" export https_proxy="http://192.168.1.100:8080" export no_proxy="localhost,127.0.0.1,192.168.0.0/16"
这种写法关闭终端后失效,适合临时调试。如果要永久生效,需要把配置写入 ~/.bashrc(仅当前用户)或者 /etc/profile.d/proxy.sh(所有用户)。推荐使用后者,写成独立的脚本文件,便于管理:
sudo tee /etc/profile.d/proxy.sh <<'EOF' export http_proxy="http://192.168.1.100:8080" export https_proxy="http://192.168.1.100:8080" export ftp_proxy="http://192.168.1.100:8080" export no_proxy="localhost,127.0.0.1,.internal.ippipp.com" EOF sudo chmod +x /etc/profile.d/proxy.sh
写入后执行 source /etc/profile.d/proxy.sh 立即加载,或者重新登录。这里有个细节:no_proxy 中写 192.168.0.0/16 这种 CIDR 格式并非所有工具都识别,curl 新版本支持,但一些老工具只认后缀形式(如 .internal.ippipp.com),稳妥起见可以两种都写上。
如果代理需要用户名密码认证,格式是把凭据写在 URL 中:
export http_proxy="http://用户名:密码@192.168.1.100:8080"
需要注意的是,密码中如果包含 @、: 等特殊字符,必须做 URL 编码,例如 @ 要写成 %40,否则解析会出错。另外环境变量方式对图形界面应用基本无效,GNOME 应用读取的是另一套配置,这就引出第二种方案。
二、GNOME 桌环境的系统代理设置
Fedora 默认桌面环境是 GNOME,它的系统代理配置存储在 dconf 数据库中,图形界面应用(如 GNOME 自带的 Web 浏览器、Evolution 邮件客户端等)会遵循这套设置。打开路径为:设置 -> 网络 -> 网络代理,可以选择手动模式,然后填入 HTTP、HTTPS、SOCKS 代理地址和忽略主机列表。
命令行操作 dconf 也一样有效,方便脚本化部署:
gsettings set org.gnome.system.proxy mode 'manual' gsettings set org.gnome.system.proxy.http host '192.168.1.100' gsettings set org.gnome.system.proxy.http port 8080 gsettings set org.gnome.system.proxy.https host '192.168.1.100' gsettings set org.gnome.system.proxy.https port 8080 gsettings set org.gnome.system.proxy ignore-hosts "['localhost','127.0.0.1','192.168.0.0/16']"
这套配置与环境变量互不干扰,各管各的领域。想让两边行为一致,建议同时配置。此外,GNOME 还支持 PAC 自动代理模式,把 mode 设为 auto 并指定 PAC 脚本 URL 即可,企业环境中常用这种方式统一管控。
需要说明的是,dconf 设置只对遵循 GNOME 规范的应用生效,Firefox、Chrome 等浏览器通常有自己的代理设置项(Firefox 默认使用系统代理,Chrome 在 Linux 上命令行启动时可加 --proxy-server 参数),遇到个别应用不走代理时,优先检查它自身的代理配置项。
三、dnf 包管理器的代理配置
dnf 在更新软件包时有时并不读取环境变量(尤其是通过 PackageKit 或系统服务触发时),因此官方推荐在配置文件中单独指定代理。编辑 /etc/dnf/dnf.conf,在 [main] 段落下添加:
[main] gpgcheck=1 installonly_limit=3 clean_requirements_on_remove=True proxy=http://192.168.1.100:8080
如果代理需要认证,dnf 支持单独的账号密码字段,避免把明文密码暴露在环境变量里:
proxy=http://192.168.1.100:8080 proxy_username=你的用户名 proxy_password=你的密码
除了全局配置,也可以只给某个仓库单独设置代理,编辑 /etc/yum.repos.d/ 下对应的 repo 文件,在特定仓库段中加入 proxy= 行即可。这样能实现只有某些仓库走代理、其余直连的精细控制,在混合网络环境中非常实用。
配置完成后用 sudo dnf update 验证,如果报连接超时,先确认代理服务器地址端口是否可达,可以用 curl -x http://192.168.1.100:8080 http://mirrors.fedoraproject.org 单独测试代理链路。
四、其他工具与常见问题排查
还有一些工具完全不遵循上述任何配置,需要单独处理。git 可以通过 git config --global http.proxy http://192.168.1.100:8080 设置;wget 读取环境变量,但也支持在 ~/.wgetrc 中写 use_proxy=on 和 http_proxy;pip 可以用 --proxy 参数或环境变量;Docker 拉取镜像的代理则要在 /etc/systemd/system/docker.service.d/http-proxy.conf 中为守护进程单独配置。
排查代理不生效时,可以按这个顺序检查:第一,确认环境变量是否真的加载了,执行 env | grep -i proxy 查看;第二,注意 sudo 默认会重置环境变量,通过 sudo 运行的命令可能读不到代理设置,解决方法是在 /etc/sudoers 中使用 Defaults env_keep += "http_proxy https_proxy no_proxy" 保留变量;第三,systemd 服务不继承用户 shell 的环境变量,服务类程序必须在 unit 文件中显式声明环境。
最后提一个实用技巧:如果只是希望终端里的工具临时关闭代理,可以用 unset http_proxy https_proxy,或者写一个别名快速切换。对于经常在内外网之间切换的用户,把代理配置封装成 shell 函数,通过参数控制开启和关闭,会比每次手动 export 舒服得多。
总结一下,Fedora 的系统范围代理没有单一开关,正确姿势是:环境变量管命令行,GNOME 设置管图形应用,dnf.conf 管包管理器,三者配合才能真正实现全局生效。理解了各层配置的分工,遇到任何工具不走代理的问题都能快速定位到对应的配置点。
Fedora代理配置系统范围代理环境变量修改时间:2026-09-07 14:14:39