跳转至内容

Private Internet Access

来自 ArchWiki

本文或本节需要在语言、wiki 语法或风格方面进行改进。请参阅 Help:Style 获取参考。

原因:页面格式不常规,此页面需要完全重写 (请在 Talk:Private Internet Access 讨论)。

Private Internet Access 是一家订阅制 VPN 服务。

注意 2019 年,PIA 与 Kape Technologies 合并,此事件引起了大量争议,尤其是在 reddit 帖子中。然而,自合并以来,PIA 基础设施已做出以下改进:
  • 所有 PIA 应用程序均已开源:https://github.com/pia-foss
  • WireGuard 已添加到 VPN 服务器和 VPN 应用中
  • VPN 服务器已从 Ubuntu 14.04 LTS 迁移到 Arch Linux
  • 所有 VPN 服务器现在都通过 dm-crypt 加密,遵循 Arch Linux 开发人员的建议
  • 所有 VPN 服务现在都在内存中通过 ramdisk 运行

手动

  • 禁用 IPv6,因为它不受 PIA 支持。[1]
  • 确保您使用的是 PIA 的 DNS 服务器,该服务器列在其网站上。

NetworkManager 小程序方法

安装

从 PIA 下载 OpenVPN 配置文件。将 ZIP 文件解压到您的用户主目录下的某个位置,或者其他方便记忆的地方。值得注意的是,即使 WireGuard 可以在 Linux 二进制文件和应用程序上使用,PIA 尚未提供 WireGuard 配置文件。换句话说,在使用 NetworkManager 方法时,只能使用 OpenVPN。

安装并配置 NetworkManager 以及 NetworkManager 小程序和 OpenVPN 插件。

配置

  1. 右键单击桌面环境中的 NetworkManager 小程序,然后单击“编辑连接”。在出现的网络连接窗口的左下角,单击加号 (+)。
  2. 选择连接类型时,单击下拉菜单,一直滚动到底部,直到找到“导入保存的 VPN 配置”。选择该选项。然后,单击“创建”。
  3. 导航到您之前解压所有 OpenVPN 文件的目录,然后打开该文件夹中的一个文件。总的来说,您应该打开与您具体想要连接的连接相关联的文件。
  4. 打开一个 OpenVPN 文件后,出现的窗口应该是“编辑 <连接类型>”。输入您的 Private Internet Access 提供的用户名和密码。密码框中有一个图标指示凭据的用户权限;根据需要更改设置。
  5. 现在,单击“高级”。在“使用 LZO 数据压缩”旁边,单击下拉菜单选择“自适应”,在“设置虚拟设备类型”旁边,单击菜单并确保选择了“TUN”。
  6. 接下来,转到安全选项卡,选择“AES-128-CBC”作为加密算法,选择“SHA-1”作为 HMAC 身份验证。
  7. 单击窗口左下角的“确定”按钮以保存此更改。
  8. 转到“IPv6 设置”选项卡,选择“忽略”作为“方法”,因为 PIA 会阻止 IPv6 地址。[2]
  9. 单击“编辑 <连接类型>”窗口右下角的“保存”。

用法

左键单击 NetworkManager 小程序。有一个 VPN 连接菜单。您保存的 VPN 连接应该在里面。单击它以连接到 Private Internet Access。

当 NetworkManager 小程序上出现金色锁时,您已成功连接到 Private Internet Access。访问 Private Internet Access,并通过查看其主页顶部的状态消息来确认您已连接。

注意 如果 VPN 要求输入密码,而您想避免每次尝试连接时都输入密码,请确保单击先前关于凭据权限的说明中提到的密码框中的图标,并将其更改为“所有用户”。

OpenVPN 命令行方法

安装

从 PIA 下载 OpenVPN 配置。解压文件并将所有文件移动到 /etc/openvpn/client。确保文件所有者为 root

提示 要能够使用 OpenVPN#systemd 服务配置 (例如 启动 openvpn-client@config),请重命名所有文件,并将 .opvn 扩展名替换为 .conf,并将配置文件名中的空格替换为下划线。

用法

参见 OpenVPN#启动 OpenVPN

提示 要自动登录,请在配置文件中的 auth-user-pass 后面直接添加包含您的用户名和密码的文件名。有关更多信息,请参阅 openvpn(8) 中的此选项。

要测试您是否已成功连接到 VPN,请参阅 本文档,其中推荐了以下四种工具:

AUR 方法

官方安装脚本

Private Internet Access 提供了一个安装脚本,该脚本设置 NetworkManager 以便与 VPN 一起使用。在此处 下载脚本,然后运行以进行设置。

注意 需要 Python 2,该版本已不再在官方仓库中提供。请先安装 python2AUR 或将脚本打补丁以支持 Python 3。

官方 Linux 客户端

Private Internet Access 现在有一个官方的 Linux 客户端,支持 Arch。从 此页面下载客户端,解压文件 (例如 pia-v81-installer-linux.tar.gz),然后运行安装脚本 (例如 # ./pia-v81-installer-linux.sh)。

软件包

提示 您需要 启用并启动 piavpn.service
  • piavpn-bin — 自动化官方安装程序
|| piavpn-binAUR
|| private-internet-access-vpnAUR

安装

安装 private-internet-access-vpnAUR

注意 此包不应通过 python-pip 直接安装。请参阅 [3] 了解更多信息。

该软件包提供了一个工具,该工具下载 OpenVPN 配置文件并将其存储在 /etc/openvpn 中。但是,它会更新文件名,以便更好地支持在命令行中使用它们。

软件包的配置存储在 /etc/private-internet-access 中。

安装后

如果您在使用 connman 时遇到连接问题,请 重启 connman-vpn.service

用法

启用自动登录

注意 这是 OpenVPN 的一个限制。请参阅 PIA 的支持中心:如何让 OpenVPN 记住我的用户名和密码?[死链接 2021-05-17—HTTP 404]

启用自动登录允许用户连接到 VPN 服务,而无需在命令行中输入任何密码 (在使用 networkmanager 时需要)。要进行此设置,您必须执行以下操作:

  • 创建 /etc/private-internet-access/login.conf
  • 在文件中添加您的用户名和密码。请确保第一行是您的用户名,第二行是您的密码。不要在该文件添加任何其他文本,否则将不起作用 (这是 OpenVPN 的一个限制)。
/etc/private-internet-access/login.conf
USERNAME
PASSWORD
  • 将文件的权限更改为 0600,所有者更改为 root:root
# chmod 0600 /etc/private-internet-access/login.conf
# chown root:root /etc/private-internet-access/login.conf

这可以防止非 root 用户访问该文件。有关更多信息,请阅读 文件权限和属性。启用自动登录时必需

  • 以 root 身份运行 pia -a
    • 如果您安装了 networkmanager,它将为 networkmanager 创建配置文件。请确保 重启 networkmanager 以查看它们。
    • 如果您安装了 connman,它将为 connman 创建配置文件。如果 connman-vpn.service 未运行,请 启动它。它将自动加载配置文件。
    • 无论如何,它都会在 /etc/openvpn/client 中创建 OpenVPN .conf 文件。
提示 通过在 /etc/private-internet-access/pia.conf 中添加 openvpn_auto_login = False 并运行 pia -a 来禁用自动登录。

手动连接 VPN

# openvpn --config /etc/openvpn/client/{config_file_name}

{config_file_name} 将在 /etc/openvpn 目录中列出,或运行 pia -l

自动连接 VPN

对于 connman

  • 启用 connman-vpn.service
  • 以 root 身份运行 pia -a (如果您尚未运行)
# pia -a
  • 获取所有 connman 服务列表,并在第二列中找到 VPN 配置的名称 (例如,Finland)。
connmanctl services
...

*   Finland_VPN          vpn_fi_privateinternetaccess_com_privateinternetaccess_com
...
  • 连接到您选择的 VPN 配置以创建其 connman 设置文件。
# connmanctl connect vpn_fi_privateinternetaccess_com_privateinternetaccess_com
  • 编辑相关的设置文件,例如 /var/lib/connman/vpn_fi_privateinternetaccess_com_privateinternetaccess_com/settings
  • AutoConnect=false 行更改为 AutoConnect=true,保存,退出,重启。
提示
  • 您还可以通过 cmstAUR 的“详细信息”选项卡配置自动连接。
  • VPN 在从挂起状态唤醒后仍将继续工作,与标准的 openvpn 不同 (见下文)。

对于 openvpn,您可以参考这里:OpenVPN#systemd 服务配置

高级选项

警告 协议和端口组合在 3.1 版本后不再有效。请参阅 Github Issue #17 或 PIA 的支持 - 为我们的网关端口应该使用哪种加密/身份验证设置?
  • 创建 /etc/private-internet-access/pia.conf
  • 对于 [pia] 部分
选项 选项值 描述
openvpn_auto_login True,False 默认:True;配置 OpenVPN 配置文件是否应启用自动登录。请参阅 #启用自动登录
  • 对于 [configure] 部分
选项 选项值 描述
apps cm, nm 默认:all;此配置指定要配置哪些应用程序。该应用程序将配置所有已安装的应用程序;但是,如果用户只需要 Conman 的配置,则将其设置为 'cm' 将仅生成这些配置,即使他们安装了 NetworkManager。OpenVPN 配置始终生成。cm = Conman;nm = NetworkManager
port 请参阅列表:PIA 的支持 -
为我们的网关端口应该使用哪种加密/身份验证设置?
默认:1198

示例配置

配置启用自动登录,仅配置 Connman 和 OpenVPN,使用 UDP 上的 8080 端口,并且仅配置美国东部、美国西部、日本、英国伦敦和英国南安普顿 VPN 端点。OpenVPN 始终进行配置。

/etc/private-internet-access/pia.conf
[pia]
openvpn_auto_login = True

[configure]
apps = cm
port = 8080
hosts = US East, US West, Japan, UK London, UK Southampton

故障排除

使用 NetworkManager 的小程序

为了使用 network-manager-applet 进行连接

  1. 右键单击系统托盘中的 NetworkManager 图标
  2. 然后单击“配置网络连接...”
  3. 然后单击“添加”
  4. 选择“导入 VPN...”
  5. 浏览到 /etc/openvpn/client/CA_Toronto.conf 或您想使用的任何其他配置
  6. 然后单击“打开”
  7. 仅删除 Gateway: (如果存在) 中的 :1198,因为此框中应该只有域名
  8. 对于 Username:,输入您的 p1234567 用户名
  9. 对于 Password:,输入与您的 p-xxxxx 用户名匹配的密码
  10. 然后单击“高级...”
  11. 设置 自定义网关端口: 并将其设置为 1198
  12. 单击“安全”选项卡
  13. Cipher: 设置为 AES-128-CBC
  14. HMAC Authentication: 设置为 SHA-1
  15. 单击“确定”
  16. 再次单击“确定”

DNS 泄露

关于 DNS 泄露 (参见 python-pia/#13),NetworkManager 会因 /etc/resolv.conf 的设置方式而泄露信息。下面的脚本由 @maximbaz 发布,用于解决该问题。如果仍然出现泄露,您可能需要 禁用 IPv6

/etc/NetworkManager/dispatcher.d/pia-vpn
#!/bin/bash
#/etc/NetworkManager/dispatcher.d/pia-vpn

interface="$1"
status=$2

case $status in
  vpn-up)
    if [[ $interface == "tun0" ]]; then
      chattr -i /etc/resolv.conf
      echo -e "nameserver 209.222.18.222\nnameserver 209.222.18.218" > /etc/resolv.conf
      chattr +i /etc/resolv.conf
    fi
    ;;
  vpn-down)
    if [[ $interface == "tun0" ]]; then
      chattr -i /etc/resolv.conf
    fi
    ;;
esac

vopono

vopono 是一个用于通过 VPN 连接运行特定应用程序的工具,它使用临时的网络命名空间。它支持为 PrivateInternetAccess 自动生成配置。

它默认包含终止开关支持,以及从网络命名空间转发和代理端口到主机的支持,以便您可以将守护进程和服务器通过 VPN 运行,而系统的其余部分不受影响。

参见

技巧与提示

网络“终止开关”

以下 iptables 规则仅允许通过 tun 接口的网络流量,除了允许流量到 PIA 的 DNS 服务器和到端口 1197 (该端口用于建立 VPN 连接) 之外。

/etc/iptables/iptables.rules
# Set default policies for INPUT, FORWARD, and OUTPUT chains to DROP
# This means all traffic is blocked by default unless explicitly allowed
-P INPUT DROP
-P FORWARD DROP
-P OUTPUT DROP

# Allow incoming traffic that is related to established connections
-A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
# Allow all traffic on the loopback interface
-A INPUT -i lo -j ACCEPT
-A OUTPUT -o lo -j ACCEPT
# Allow all incoming traffic on tun interfaces
-A INPUT -i tun+ -j ACCEPT
-A OUTPUT -o tun+ -j ACCEPT
# Allow connections to PIA servers
-A OUTPUT -d 209.222.18.222/32 -j ACCEPT
-A OUTPUT -d 209.222.18.218/32 -j ACCEPT
# allow VPN establishing
-A OUTPUT -p udp -m udp --dport 1197 -j ACCEPT
# Reject all other outgoing traffic with an ICMP net unreachable message; catches any traffic not matched by previous rules
-A OUTPUT -j REJECT --reject-with icmp-net-unreachable

# Commit the changes to iptables
COMMIT

这确保了如果您在不知情的情况下断开与 VPN 的连接,将不允许任何网络流量进出。

如果您还想访问 LAN 上的设备,您将需要显式地允许它们。例如,要允许访问 192.0.0.0/24 上的设备,请添加以下两条规则 (在任何 REJECT 规则之前)。

-A INPUT -s 192.168.0.0/24 -j ACCEPT
-A OUTPUT -d 192.168.0.0/24 -j ACCEPT

此外,上述规则会阻止 ICMP 协议,这可能不是期望的行为。请参阅 此线程以了解使用这些 iptables 规则的潜在陷阱以及更多详细信息。

设置 PIA DNS

如果您发现 Network Manager 正在控制您主机的 DNS 设置,因此您的主机无法解析任何地址,您将需要手动设置 DNS 服务器和属性。运行以下命令时,您应该会注意到一个符号链接。

$ ls -l /etc/resolv.conf

使用 rm /etc/resolv.conf 删除符号链接,然后创建一个新的 /etc/resolv.conf 并添加以下内容:

/etc/resolv.conf 
nameserver 209.222.18.222
nameserver 209.222.18.218

本文或本章节的准确性存在争议。

原因:在编辑 /etc/resolv.conf 后使用 resolvconf 没有意义。如果使用 openresolv,则应在 /etc/resolvconf.conf 中设置名称服务器,而不应手动编辑 /etc/resolv.conf。(请在 Talk:Private Internet Access 讨论)。

接下来通过键入以下命令重新生成 resolvconf:

# resolvconf -u

本文或本节需要在语言、wiki 语法或风格方面进行改进。请参阅 Help:Style 获取参考。

最后使文件不可变,以便其他应用程序无法修改它。

chattr +i /etc/resolv.conf

故障排除

我无法使用 PIA 管理器连接到 OpenVPN,或者 OpenVPN 不起作用

PIA 管理器仍在后端使用 OpenVPN,所以即使您不直接使用 OpenVPN 方法之一,您仍然需要它。首先,检查它是否已安装。如果您使用了其中一个安装脚本,它应该已经为您完成了。

如果您遇到类似 #<Errno::ECONNREFUSED: Connection refused - connect(2) for "127.0.0.1" port 31749> 的错误,这可能意味着 TAP/TUN 尚未运行。要么您的内核没有它,在这种情况下请安装一个有它的内核 (或编译一个新内核),要么它当前未运行,在这种情况下需要启动它。

# modprobe tun