Mullvad
Mullvad 是一家位于瑞典的 VPN 服务,它使用 OpenVPN 和 WireGuard。
安装
官方 GUI 客户端 以 mullvad-vpnAUR 和 mullvad-vpn-binAUR 的形式提供。
安装完成后,您只需 启动/启用 mullvad-daemon.service
即可。
或者,请参阅 #手动配置 手动设置 Mullvad VPN 连接,而无需官方 GUI。
手动配置
如果您不想使用官方应用程序,您可以手动设置 Mullvad VPN 连接,可以使用 OpenVPN 或 WireGuard,Mullvad 官方均支持这两种协议。Mullvad 推荐 使用 WireGuard,因为它是一种更现代的协议,并且与内核深度集成,从而实现更好的性能和更可靠的连接。
如果您使用 NetworkManager,您可能需要设置 dnsmasq 以减少 DNS 查找时间并降低 DNS 泄漏的风险。请按照 DNS_caching_and_conditional_forwarding 下的步骤操作。
使用 OpenVPN
首先确保已安装软件包 openvpn 和 openresolv,然后从 他们的网站 下载 Mullvad 的 OpenVPN 配置文件包,并将下载的文件解压缩到 /etc/openvpn/client/
。从这里,如果您使用 NetworkManager,则可以使用 NetworkManager 前端,或者您可以使用 systemd 在启动时自动启动 openvpn。
或者,下载配置文件包后,将目录更改为您解压缩文件的目录,然后运行
# openvpn --config mullvad_<LOCATION>.conf
然后在此处检查您的连接: https://mullvad.net/en/check
使用 NetworkManager 前端
请参阅 OpenVPN#NetworkManager-native VPN configuration。
使用 systemd
重命名 mullvad_linux.conf
以获得更短的名称,以便稍后与 systemd 服务一起使用
# mv /etc/openvpn/client/mullvad_linux.conf /etc/openvpn/client/mullvad.conf
为了使用 Mullvad 提供的名称服务器,在启动和停止与 OpenVPN 的连接时,将调用 update-resolv-conf 脚本 来修改 resolv.conf,以包含正确的 IP 地址。此脚本也包含在 Mullvad 配置文件 zip 文件中,但应将其移动到 /etc/openvpn/
以匹配 Mullvad 配置文件中指定的路径
# mv /etc/openvpn/client/update-resolv-conf /etc/openvpn/
确保该脚本是 可执行的。
可以使用 openvpn-update-resolv-conf 脚本保持脚本更新,该脚本还包含 DNS 泄漏的修复程序。
配置完成后,可以使用 openvpn-client@mullvad.service
管理 VPN 连接。如果服务启动失败,并出现类似 Cannot open TUN/TAP dev /dev/net/tun: No such device (errno=19)
的错误,您可能需要重启系统以启用 OpenVPN,从而为该任务创建正确的网络设备。
启用 Kill Switch
要启用 Kill Switch 功能以防止 VPN 连接断开时的数据泄漏,您可以使用 iptables,如 Mullvad OpenVPN on Linux 页面中“启用 Kill Switch”下所述。
使用 WireGuard
使用 WG-Quick
安装 wireguard-tools 和 openresolv 软件包。使用您的帐户登录 Mullvad,然后转到 WireGuard 配置文件生成器。在生成 WireGuard 密钥下,单击生成密钥以生成私钥,或者您可以发出以下命令来生成私钥并导入它。
# wg genkey
填写生成器上选择一个或多个出口位置下的下一步,然后下载文件。解压 您下载的文件,以获取一个或多个配置文件,具体取决于您的选择。将配置文件移动到 /etc/wireguard
。
在本示例中,我们选择了瑞典马尔默 (se-mma-wg-001) 作为我们的服务器位置,因此下载的配置文件名为 se-mma-wg-001.conf
。
以 root 身份运行以下命令。将 se-mma-wg-001 替换为您选择的服务器。
# wg-quick up se-mma-wg-001
要停止它,请运行以下命令。
# wg-quick down se-mma-wg-001
要使其在启动时自动运行,启用/启动 wg-quick@se-mma-wg-001.service
。
使用 NetworkManager
要从配置文件添加 WireGuard 连接,请在终端中发出以下命令
# nmcli connection import type wireguard file configuration_file
如果文件名为 WG1.conf,则应已添加名为 WG1 的连接。
如果您在任何时候想要删除连接,请发出命令
# nmcli connection delete connection_name
要实际启动 WireGuard 隧道,请发出命令
# nmcli connection up connection_name
运行 nmcli 时,请确保连接已列出
# nmcli
您可能需要验证私钥和公钥是否正确,并与您从 VPN 提供商处获得的密钥一致
# WG_HIDE_KEYS=never wg
Mullvad 提供了一个 shell 脚本 来自动化此过程 - 但需要注意的是:自动生成的配置文件不包含 kill switch,如果需要,需要手动添加。
使用 KDE
KDE 设置 (`systemsettings kcm_networkmanagement`) 是 Network Manager 的前端,可以导入您从 mullvad 网站(linux 配置)下载的单个文件,也可以打开这些文件并手动添加值。
必需字段为
设置选项卡 | 字段 | mullvad 配置文件 |
---|---|---|
IP V4 | 方法:手动 | 不适用 |
IP V4 | 地址/网络掩码 | Interface.Address(必须按 `,` 分割并解释掩码值。IPV6 相同) |
IP V6 | 方法:手动(或忽略) | 不适用 |
Wireguard 接口 | 私钥 | Interface.PrivateKey |
Peers | 公钥 | Peer.PublicKey |
Peers | 允许的 IP | Peer.AllowedIPs |
Peers | 端点地址 | Peer.Endpoing(必须按 `:` 分割) |
Peers | 端点端口 | Peer.Endpoing(必须按 `:` 分割) |
请注意,“Wireguard 接口”选项卡中有一个容易被忽略的“Peers”按钮,用于打开 Peers 部分。
要使用多个 peer,您必须打开 `zip` 文件,并在 Peers 对话框中从每个单独的文件添加一个 peer。请注意,“Wireguard 接口”和 IP 选项卡对于您从 mullbad 获取的 `zip` 存档中的所有文件都是相同的。
使用 systemd-networkd
/etc/systemd/network/99-wg0.netdev
[NetDev] Name=wg0 Kind=wireguard Description=WireGuard VPN [WireGuard] FirewallMark=0x8888 ListenPort=51820 RouteTable=off PrivateKey=<private key> [WireGuardPeer] PublicKey=<public key> AllowedIPs=0.0.0.0/0 AllowedIPs=::0/0 Endpoint=<ip>:<port>
/etc/systemd/network/99-wg0.network
[Match] Name=wg0 [Network] Address=<ipv4 addr>/32 Address=<ipv6 addr>/128 DNS=<dns> DNSDefaultRoute=yes Domains=~. [RoutingPolicyRule] Family=both SuppressPrefixLength=0 Priority=999 Table=main [RoutingPolicyRule] Family=both FirewallMark=0x8888 InvertRule=true Table=1000 Priority=1000 [Route] Gateway=0.0.0.0 Table=1000 [Route] Gateway=:: Table=1000
对于基本的 kill-switch 功能,您可以使用 iptables 阻止所有传出连接,但 fwmark 0x8888 的连接除外
iptables incomplete example
-A OUTPUT -m mark --mark 0x8888 -j ACCEPT -A OUTPUT -j DROP
DNS 泄漏
默认情况下,Mullvad OpenVPN 配置允许 DNS 泄漏,对于常见的 VPN 用例,这是一个不利的隐私缺陷。Mullvad 的 GUI 客户端通过从系统配置中删除每个 DNS 服务器 IP,并将其替换为指向 Mullvad 自己的非日志 DNS 服务器的 IP,从而自动阻止 DNS 泄漏,这在 VPN 连接期间有效。通过配置 resolv.conf 仅使用其 网站 上指定的 Mullvad DNS 服务器 IP,也可以将此修复应用于纯 OpenVPN 方法。
openvpn-update-resolv-conf 中的 resolv.conf 更新脚本版本通过在使用 resolvconf
命令时使用独占接口开关 -x
来实现对泄漏的不同修复,但这可能会导致另一种形式的 DNS 泄漏,即使得每个本地网络地址都通过 Mullvad 提供的 DNS 服务器解析,如 脚本的 GitHub 问题页面 中所述。
如果您将 Mullvad 与 wireguard 一起使用,请记住安装 openresolv 软件包以防止 DNS 泄漏。
IPv6
Mullvad 的 Wireguard 服务器完全支持 IPv6,无论是在隧道内部还是外部。GUI 应用程序的用户可以在VPN 设置中启用隧道 IPv6,并在VPN 设置 > WireGuard 设置 > IP 版本中启用通过 IPv6 运行隧道本身。这可以通过允许/鼓励 WireGuard 隧道中更大的数据包大小来在一定程度上提高性能。对于手动用户,可以在 WireGuard 配置生成器上选择这些首选项。
首选隧道内的 IPv6
由于 VPN 分配了 唯一本地地址 并执行网络地址转换(一种不寻常的配置 IPv6 连接到公共互联网的方式),getaddrinfo(3) 降低了隧道内 IPv6 的优先级,并且仅在它是连接的唯一可用选项时才使用它。要解决此问题并首选隧道内的 IPv6(就像标准连接上的默认设置一样),请编辑 gai.conf(5) 文件并添加以下行
/etc/gai.conf
label fc00:bbbb:bbbb::/48 1
自动配置
vopono 支持自动生成 Mullvad 的配置文件,允许您通过临时网络命名空间中的 Mullvad 连接立即运行应用程序。
OpenVPN 和 Wireguard 连接均受支持。Shadowsocks 支持 OpenVPN 连接,端口转发支持 Wireguard 连接。