跳到主要内容

Fedora 是喜欢新软件的人常用的桌面系统,开箱就带有一套设计合理的网络组件。但正因为这套组件,在 Fedora 上使用 VPN 的体验与针对其他发行版写的教程会有些出入。NetworkManager 管理所有连接,systemd-resolved 负责 DNS,firewalld 把网络接口分进不同区域,SELinux 则限制每个程序能碰哪些东西。Fedora 上 VPN 出问题时,原因多半就在这四者之一,而不是 VPN 本身。

本文专门讲 Fedora 上的 VPN:先检查什么,如何用 dnf 添加 VPN 支持,firewalld 和 SELinux 会在哪里挡路,以及版本升级之后要看什么。基础概念(VPN 是什么)不在这里重复。如果你只想要 VPNclient 桌面应用的安装步骤,请看 Linux 设置指南。

Fedora 与其他发行版有什么不同

三项默认设置让 Fedora 与众不同,每一项都会改变 VPN 的表现。

  • 默认使用 systemd-resolved 解析 DNS。 从 Fedora 33 起,/etc/resolv.conf 是指向 127.0.0.53 的存根文件的链接。VPN“设置 DNS”的方式,是按接口告诉 systemd-resolved。直接改写 /etc/resolv.conf 的工具会被忽略或覆盖。
  • firewalld 默认开启并按区域管理。 每个网络接口都属于某个区域,例如 FedoraWorkstation 或 public。新出现的 VPN 接口(如 wg0、tun0)可能落入比你预想更严格的区域。
  • SELinux 处于 enforcing 模式。 由系统启动的程序必须遵守带标签的规则。从主目录复制到错误位置的配置文件,可能带着让 VPN 服务无法读取的标签。

这些都不是缺陷,而是 Fedora 默认更安全的原因。代价是照搬别的发行版的教程,有时会悄无声息地失败。知道该看哪一层,原本折腾一晚上的问题十分钟就能解决。

先检查你的 Fedora 版本和网络组件

安装任何东西之前,先确认当前系统的状态。打开终端,运行下面这些只读命令。

cat /etc/fedora-release
nmcli general status
resolvectl status | head -30
firewall-cmd --get-active-zones
getenforce

输出的含义如下。

命令 正常结果 如果不同
nmcli general status 状态为 connected NetworkManager 可能没有运行,先启动再添加配置
resolvectl status 能看到 Wi-Fi 或以太网链路及其 DNS 服务器 Server 版可能使用普通的 resolv.conf
firewall-cmd --get-active-zones 你的接口属于某个区域 firewalld 可能已停用,此时应查看 nftables 规则
getenforce Enforcing Permissive 仍会记录拒绝事件,对排查有帮助

版本也有影响。Workstation 和 KDE Plasma 版默认使用 NetworkManager。Server 版也可能使用 NetworkManager,但通常没有桌面小程序,需要用 nmcli 管理 VPN 配置。Silverblue、Kinoite 等 atomic 版本的基础系统是只读的,添加软件包的方式不同,下文单独说明。

方式一:使用 VPNclient 桌面应用

如果你持有 XPASS 通行证,最简单的路径是 VPNclient,这是免费应用。Linux 版本是图形界面的桌面应用,从官方链接下载 .run 文件,设为可执行后在终端启动,然后用 My Pass 页面显示的用户名和密码登录,而不是 XPASS 网站的登录邮箱。完整步骤和官方链接见 Linux 设置指南。

这条路径在 Fedora 上有几点需要注意。

  1. 应用商店说明和我们的指南把 Linux 版描述为适用于 Ubuntu 及其他发行版的桌面应用。我们不能保证它在每个 Fedora 版本上表现一致,所以请在有时间排查的时候安装,不要在会议开始前几分钟才装。
  2. 安装程序可能会要求 sudo 密码,这是你本机 Fedora 账户的密码。
  3. 如果安装完成但应用无法启动网络辅助程序,先用 sudo journalctl -b | grep -i denied 查看拒绝信息,并参考下文 SELinux 一节,再考虑重装。
  4. 除非客服另有建议,请保留应用的默认连接设置。

想先比较方案,可以在下载页面查看支持的平台,在价格页面查看通行证时长。

方式二:通过 NetworkManager 和 dnf 添加 VPN 配置

很多 Fedora 用户手上已经有来自别处的配置文件,比如公司、学校、家里的路由器,或自己搭建的服务器。NetworkManager 可以保存这些配置,连接时只需在系统菜单里点一下。每种 VPN 类型的插件是单独的软件包。

VPN 类型 需要安装的软件包 说明
WireGuard wireguard-tools NetworkManager 原生支持 WireGuard,该包提供 wg 和 wg-quick
OpenVPN NetworkManager-openvpn 和 NetworkManager-openvpn-gnome 后者提供 GNOME 设置界面
IPsec / IKEv2 NetworkManager-strongswan 用 dnf search networkmanager 搜索,因为名称可能变化
L2TP NetworkManager-l2tp 常与 IPsec 搭配,用于较旧的企业网关
OpenConnect NetworkManager-openconnect 部分企业网关使用

只安装你需要的类型,然后重启 NetworkManager,让它识别新插件。

sudo dnf install wireguard-tools NetworkManager-openvpn NetworkManager-openvpn-gnome
sudo systemctl restart NetworkManager

接着打开“设置”,进入“网络”,点击 VPN 旁边的加号,选择 Import from file(从文件导入),载入 .ovpn 或 WireGuard 的 .conf 文件。KDE 版在网络小程序里的流程类似。如果缺少插件,对应类型就不会出现在列表里。等你熟悉基础之后,可以继续阅读在 NetworkManager 中添加 VPN,了解配置的构成。

如果你要为自己掌控的配置在 WireGuard 与 OpenVPN 之间选择,WireGuard 与 OpenVPN 对比客观地列出了各自的取舍。

firewalld 与 SELinux:Fedora 特有的两个麻烦

firewalld 区域。 VPN 接口能收发数据却上不了网,常常是因为它所在的区域丢弃了转发或外发的数据包。先看接口落在哪个区域。

firewall-cmd --get-zone-of-interface=wg0
sudo firewall-cmd --zone=trusted --add-interface=wg0

第二条命令是临时的,重新加载后失效。如果这样能解决问题,并且你确认这个接口确实可信,再加上 --permanent 使其永久生效。对普通客户端机器来说,默认区域通常就够了,只有在共享连接或通过隧道提供服务时才需要调整。千万不要为了让 VPN 工作,把正常的 Wi-Fi 接口移到 trusted 区域。

SELinux。 如果连接失败并提示权限问题,去找拒绝记录,而不是靠猜。

sudo ausearch -m avc -ts recent
sudo journalctl -t setroubleshoot --since "10 minutes ago"

典型原因是把证书或密钥复制到了错误的文件夹。通过 NetworkManager 导入时,文件会被放到标签正确的位置;如果你手动放置文件,可以用 sudo restorecon -Rv /path/to/folder 恢复默认标签。不要为了让错误消失就把 SELinux 设为 disabled。为了证明问题出在 SELinux,临时用一次 permissive 是可以的(sudo setenforce 0,然后 sudo setenforce 1),但必须记得改回来。

Silverblue、Kinoite 等不可变版本

在 atomic 版本上,基础系统是只读的,软件包通过 rpm-ostree 叠加,重启后生效。

rpm-ostree install NetworkManager-openvpn-gnome
systemctl reboot

Flatpak 应用无法添加系统级网络插件,所以插件必须来自这种叠加的软件包。重启后,照常在“设置”里导入配置。只叠加真正需要的包,因为每个叠加包都会让升级稍微变慢,并且每次新镜像都要重新构建。对一台很少用 VPN 的笔记本,一个插件还算划算,五个就不值得了。

Fedora 上的 DNS:避免悄悄泄露

由于是 systemd-resolved 决定由哪个 DNS 服务器应答,VPN 配置必须在 VPN 链路上登记 DNS 服务器,并让这条链路成为域名解析的默认路径。连接之后请检查。

resolvectl status wg0
resolvectl query example.org

你应该看到 VPN 链路上有 DNS 服务器,且 DefaultRoute 为 yes,或搜索域为 ~.。如果 VPN 链路上没有 DNS 服务器,域名查询仍会发给路由器,这就抵消了 VPN 的一部分作用。可以阅读 DNS 泄漏是什么,以及关于 split DNS 的文章,如果你只想让内部域名走隧道。同时运行本地 DNS 缓存或使用 DNS over TLS 的用户,建议每次只改一项再测试。

IPv6 也值得再看一眼。如果你的网络服务商提供 IPv6,而 VPN 配置只承载 IPv4,访问支持 IPv6 的网站时流量可能绕过隧道。在 NetworkManager 中,如果隧道不承载 IPv6,把 VPN 配置的 IPv6 方法设为 Ignore 或 Disable,或者确认隧道确实承载 IPv6。

大版本升级后要重新检查什么

Fedora 大约每年发布两个版本,很多人用 dnf system-upgrade 就地升级。/etc/NetworkManager/system-connections 里的配置通常能完整保留。升级后花两分钟做下面的检查。

  1. 运行 nmcli connection show,确认 VPN 配置还在。
  2. 运行 dnf list installed | grep -i networkmanager,确认插件包仍然安装。升级中被移除的插件会让配置报出含糊的错误。
  3. 重新连接,并检查 VPN 链路的 resolvectl status。
  4. DNS 检查通过之后,再做速度或泄露测试。
  5. 如果应用是用 .run 文件安装的,确认它还能启动;系统库发生大变化时,有时需要用同一个官方链接重新安装。

在 Fedora 上按顺序排查

  1. 配置是否处于活动状态? 用 nmcli connection show --active。
  2. 能否找到 VPN 服务器? ping 可能被拦截,但 ip route get SERVER_ADDRESS 会显示使用的接口。
  3. 系统时间是否正确? 基于证书的 VPN 在日期错误时会失败,用 timedatectl 查看。
  4. DNS 是否走了隧道? 使用上面的 resolvectl 命令。
  5. 区域是否正确? firewall-cmd --get-zone-of-interface=VPN_INTERFACE。
  6. 有没有 SELinux 拒绝记录? sudo ausearch -m avc -ts recent。
  7. 有没有第二个 VPN 或遗留路由在干扰? ip route 应该只有一条经过隧道的默认路由。
  8. 仍然不行? 阅读通用清单 VPN 无法连接。

每次只改一件事,并记下改了什么。Fedora 上的大多数 VPN 问题,都会在第 4、5、6 步消失。

常见错误

  • 安装了插件却忘了重启 NetworkManager,于是认为该类型不受支持。
  • 在使用 systemd-resolved 的系统上手动编辑 /etc/resolv.conf。
  • 永久关闭 SELinux 或 firewalld,而不是读一条真正相关的拒绝记录。
  • 把证书放在主目录里,却让系统服务去读取。
  • VPN 链路上没有 DNS 服务器,却以为已经受到保护。
  • 保留指向已不存在服务器的旧配置。
  • 直接运行论坛上复制来的脚本,而不先读它改了哪些系统文件。

总结

只要尊重 Fedora 的四项默认设置,VPN 就能很好地工作:用 NetworkManager 管配置,用 systemd-resolved 管 DNS,用 firewalld 管区域,用 SELinux 管标签。用 dnf 装好对应插件,导入或创建配置,确认 DNS 和 IPv6 的行为,遇到 firewalld 或 SELinux 的提示就读懂它,而不是关掉保护。每次大版本升级后,重新检查插件和 DNS 设置。

如果你想要一个简单的预付通行证配合桌面应用使用,可以随时在价格页面了解选项。

常见问题

Fedora 自带 VPN 客户端吗?

Fedora Workstation 自带 NetworkManager,可以保存 VPN 配置,但每种 VPN 类型的插件是单独的软件包,需要用 dnf 安装。WireGuard 由 NetworkManager 和内核直接支持,只需安装 wireguard-tools 获得命令行工具即可。

为什么在 Fedora 上 VPN 已连接却打不开网页?

常见原因有三个:DNS 仍指向路由器,firewalld 的区域拦截了 VPN 接口上的流量,或者 IPv6 流量绕过了隧道。请按这个顺序逐项检查。

SELinux 会阻止 VPN 吗?

会,如果 VPN 程序或配置文件所在位置不符合 SELinux 的预期,审计日志里会出现 AVC denial。正确做法是修正文件标签或位置,而不是关闭 SELinux。

Fedora 升级大版本后 VPN 配置还在吗?

/etc/NetworkManager/system-connections 里的配置通常会保留,但升级后最好检查插件软件包和 DNS 设置,因为插件缺失会让配置看起来像是坏了。

可以在 Fedora 上使用 VPNclient 应用吗?

VPNclient 的 Linux 版本以 .run 安装文件的形式提供给桌面 Linux 使用。应用商店页面没有专门列出 Fedora,所以请先在自己的电脑上试用,并按本站指南中的步骤操作。

关于作者

Bob Kanokphon Thongdee,XPASS VPN 创始人

Bob Kanokphon Thongdee

  • XPASS VPN 创始人
  • eSIMonline.asia 联合创始人
  • 7 年以上网络营销经验
  • Cojourney Visa 与 Cojourney Travel 创始人

短途出行或忙碌的一个月,需要 VPN?

XPASS 提供按天数计算的预付通行证。一次付款,不会自动续费。

查看通行证

继续阅读

设备指南

如何在 Linux 上设置 VPN

分步说明:下载 Linux 版 VPNclient 安装程序,在终端中运行,用 My Pass 上的信息登录并连接。

阅读约 6 分钟

VPN 安全

WireGuard 与 OpenVPN 有什么区别

WireGuard 和 OpenVPN 都能建立加密隧道,但设计、复杂度和灵活性不同。本文用通俗的方式比较,并说明该怎样选择。

阅读约 9 分钟

VPN 安全

什么是 DNS 泄漏?

DNS 泄漏是指设备在 VPN 隧道之外查询网站地址。本文说明它为什么发生、如何检测,以及该怎么处理。

阅读约 10 分钟

故障排除

VPN 连接不上?逐步排查方法

VPN 连接不上时的清晰排查顺序:通行证状态、登录信息、Wi-Fi 与移动数据、权限、防火墙、应用冲突和错误提示。

阅读约 8 分钟

VPN 安全

VPN 的 Split DNS(分流 DNS)是什么

Split DNS 让设备按域名选择不同的解析器:内部名称走 VPN,其他名称走平时的解析器。本文介绍原理、使用场景和检查方法。

阅读约 9 分钟