Mullvad

出自 ArchWiki

Mullvad 是一家位于瑞典的 VPN 服务,它使用 OpenVPNWireGuard

安装

官方 GUI 客户端mullvad-vpnAURmullvad-vpn-binAUR 的形式提供。

安装完成后,您只需 启动/启用 mullvad-daemon.service 即可。

或者,请参阅 #手动配置 手动设置 Mullvad VPN 连接,而无需官方 GUI。

手动配置

此文章或章节已过时。

原因: 仍然指的是 iptables 而不是 nftables,关于 dnsmasq/DNS 的信息需要验证,关于旧版 OpenVPN 的内容可能过多,应该更侧重于 wireguard。交叉引用 WireGuard 页面,以获取有关 VPN 配置的最新信息。(在 Talk:Mullvad 中讨论)

如果您不想使用官方应用程序,您可以手动设置 Mullvad VPN 连接,可以使用 OpenVPNWireGuard,Mullvad 官方均支持这两种协议。Mullvad 推荐 使用 WireGuard,因为它是一种更现代的协议,并且与内核深度集成,从而实现更好的性能和更可靠的连接。

如果您使用 NetworkManager,您可能需要设置 dnsmasq 以减少 DNS 查找时间并降低 DNS 泄漏的风险。请按照 DNS_caching_and_conditional_forwarding 下的步骤操作。

注意:dnsmasq 与官方应用程序一起使用会导致性能较差,因为 NetworkManager 无法通过 dnsmasq 管理每个接口的配置。

使用 OpenVPN

首先确保已安装软件包 openvpnopenresolv,然后从 他们的网站 下载 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

注意: 确保在 Mullvad 网站上生成 Android/ChromeOS 配置,而不是 Linux 配置。

使用 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-toolsopenresolv 软件包。使用您的帐户登录 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

此文章或章节是与 Wireguard 合并的候选对象。

注意: 不特定于 Mullvad(在 Talk:Mullvad 中讨论)

KDE 设置 (`systemsettings kcm_networkmanagement`) 是 Network Manager 的前端,可以导入您从 mullvad 网站(linux 配置)下载的单个文件,也可以打开这些文件并手动添加值。

必需字段为

Wiguard 配置文件字段到 KDE 连接的转换
设置选项卡 字段 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 连接。

参见