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 文件解压到您的用户主目录下的某个位置,或者其他方便记忆的地方。值得注意的是,即使 WireGuard 可以在 Linux 二进制文件和应用程序上使用,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,并将配置文件名中的空格替换为下划线。用法
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.service- 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文件。
/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,保存,退出,重启。
对于 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 自动生成配置。
它默认包含终止开关支持,以及从网络命名空间转发和代理端口到主机的支持,以便您可以将守护进程和服务器通过 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
接下来通过键入以下命令重新生成 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