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”,将 HMAC 身份验证设置为“SHA-1”。
  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 一起使用。在此处下载脚本 here,然后运行以进行设置。

注意: 需要 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 ⓘ]

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

  • 创建 /etc/private-internet-access/login.conf
  • 在文件中添加您的用户名和密码。确保第 1 行是您的用户名,第 2 行是您的密码。不要在文件中添加任何其他文本,否则将无法工作(这是 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 文件。
提示: 通过将 openvpn_auto_login = False 添加到 /etc/private-internet-access/pia.conf 并运行 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] 部分
选项 选项值 描述
应用程序 cm, nm 默认值:全部;这配置要配置哪些应用程序。该应用程序将配置所有已安装的应用程序;但是,如果用户只需要 Conman 的配置,则即使他们安装了 NetworkManager,将其设置为“cm”也只会生成这些配置。始终生成 OpenVPN 配置。cm = Conman;nm = NetworkManager
端口 请参阅列表:PIA 支持 -
我应该为网关上的端口使用哪些加密/身份验证设置?
默认值:1198

配置示例

该配置启用自动登录,仅配置 Connman 和 OpenVPN,使用端口 8080 over UDP,并且仅配置美国东部、美国西部、日本、英国伦敦和英国南安普顿 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. 仅从 网关: 中删除 :1198(如果存在),因为此框中应仅包含域名
  8. 对于 用户名:,键入您的 p1234567 用户名
  9. 对于 密码:,键入与您的 p-xxxxx 用户名关联的密码
  10. 然后单击高级...
  11. 设置 自定义网关端口: 并将其设置为 1198
  12. 单击安全选项卡
  13. 密码: 设置为 AES-128-CBC
  14. HMAC 身份验证: 设置为 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 运行守护程序和服务器,而系统的其余部分不受影响。

参见

技巧和窍门

Internet “终止开关”

以下 iptables 规则仅允许通过 tun 接口的网络流量,但允许访问 PIA 的 DNS 服务器和端口 1197 的流量除外,端口 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