Private Internet Access
Private Internet Access 是一家订阅制的 VPN 服务。
- 所有 PIA 应用程序均已开源:https://github.com/pia-foss
- WireGuard 已添加到 VPN 服务器和 VPN 应用中
- VPN 服务器已从 Ubuntu 14.04 LTS 迁移到 Arch Linux
- 所有 VPN 服务器均已通过 dm-crypt 加密,遵循 Arch Linux 开发人员的建议
- 所有 VPN 服务均在内存中通过 ramdisk 运行
手动
NetworkManager 小程序方法
安装
从 PIA 下载 OpenVPN 配置文件。将 ZIP 文件解压到您的用户主目录中的某个位置,或者其他方便您以后访问的位置。值得注意的是,即使 Linux 二进制文件和应用程序支持 WireGuard,PIA 尚未提供用于配置的 WireGuard 文件。换句话说,在使用 NetworkManager 方法时,只能使用 OpenVPN。
安装并配置 NetworkManager 以及 NetworkManager 小程序和 OpenVPN 插件。
配置
- 右键单击桌面环境中的 NetworkManager 小程序,然后点击“编辑连接”。在出现“网络连接”窗口的左下角点击加号。
- 选择连接类型时,点击下拉菜单,一直滚动到底部,直到找到“导入已保存的 VPN 配置”。选择该选项。然后,点击“创建”。
- 导航到您之前解压所有 OpenVPN 文件的目录,然后打开该文件夹中的一个文件。通常情况下,您会希望打开与您特定想要连接相关的那个文件。
- 打开一个 OpenVPN 文件后,出现的窗口应为“编辑 <连接类型>”。输入您从 Private Internet Access 收到的用户名和密码。密码框中有一个图标指示凭据的用户权限;根据您的意愿更改设置。
- 现在,点击“高级”。在“使用 LZO 数据压缩”旁边,点击下拉菜单选择“自适应”,然后在“设置虚拟设备类型”旁边,点击菜单并确保选择了“TUN”。
- 接下来,转到“安全”选项卡,选择“AES-128-CBC”作为加密算法,选择“SHA-1”作为 HMAC 认证。
- 点击窗口左下角的“确定”按钮以保存此更改。
- 转到“IPv6 设置”选项卡,选择“忽略”作为“方法”,因为 PIA 会阻止 IPv6 地址 [2]。
- 点击“编辑 <连接类型>”窗口右下角的“保存”。
用法
左键单击 NetworkManager 小程序。有一个 VPN 连接菜单。您保存的 VPN 连接应该在其中。点击它以连接到 Private Internet Access。
当 NetworkManager 小程序上出现一个金色锁时,表示您已成功连接到 Private Internet Access。访问 Private Internet Access,并通过查看其主页顶部的状态消息来确认您已连接。
OpenVPN 命令行方法
安装
从 PIA 下载 OpenVPN 配置。解压文件并将所有文件移动到 /etc/openvpn/client。确保文件所有者是 root。
openvpn-client@config),请重命名所有文件,将 .opvn 扩展名替换为 .conf,并将配置文件名中的空格替换为下划线。用法
请参阅 OpenVPN#启动 OpenVPN。
auth-user-pass 之后立即追加包含您的用户名和密码的文件名。有关更多信息,请参阅 openvpn(8) 中的此选项。要测试您是否已成功连接到 VPN,请参阅 本文档,其中推荐了以下四种工具
AUR 方法
官方安装脚本
Private Internet Access 提供了一个安装脚本,用于设置 NetworkManager 以便与 VPN 一起使用。在此处下载脚本 此处,然后运行以进行设置。
官方 Linux 客户端
Private Internet Access 现在有一个官方的 Linux 客户端,支持 Arch。从此页面下载客户端 此页面,解压文件(例如 pia-v81-installer-linux.tar.gz)并运行安装脚本(例如 # ./pia-v81-installer-linux.sh)。
软件包
- piavpn-bin — 自动化官方安装程序
- || piavpn-binAUR
- Private Internet Access/AUR — 安装用于 NetworkManager、ConnMan 和 OpenVPN 的配置文件
安装
安装 private-internet-access-vpnAUR。
该软件包提供了一个工具,用于下载 OpenVPN 配置文件并将其存储在 /etc/openvpn 中。但是,它会更新文件名,以便更好地支持在命令行中使用它们。
该软件包的配置存储在 /etc/private-internet-access 中。
安装后
如果您在使用 connman 时遇到连接问题,请 重启 connman-vpn.service。
用法
启用自动登录
启用自动登录允许用户在不输入密码的情况下连接到 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文件。
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,保存,退出,然后重启。
对于 openvpn,您可以参考这里:OpenVPN#systemd 服务配置。
高级选项
- 创建
/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 进行连接
- 右键单击系统托盘中的 NetworkManager 图标
- 然后点击 配置网络连接...
- 然后点击 添加
- 选择 导入 VPN...
- 浏览到
/etc/openvpn/client/CA_Toronto.conf或您想使用的任何其他配置 - 然后点击 打开
- 仅删除
Gateway:中的:1198(如果存在),因为此框中应只包含域名 - 在
Username:中输入您的p1234567用户名 - 在
Password:中输入与您的p-xxxxx用户名对应的密码 - 然后点击 高级...
- 设置
自定义网关端口:并将其设置为1198 - 点击 安全 选项卡
- 将
Cipher:设置为AES-128-CBC - 将
HMAC Authentication:设置为SHA-1 - 点击 确定
- 再次点击 确定
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 的自动配置生成。
它默认包含断网开关支持,以及支持从网络命名空间转发和代理端口到主机,以便您可以运行守护程序和服务器,而系统的其余部分不受影响。
参见
技巧与提示
互联网“断网开关”
以下 iptables 规则只允许通过 tun 接口的网络流量,但允许流量到达 PIA 的 DNS 服务器和用于建立 VPN 连接的 1197 端口。
/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
接下来,通过键入以下命令重新生成 resolvconf:
# resolvconf -u
最后,将文件设为不可变,以便其他应用程序无法修改它。
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