
Set up a personal VPN in the cloud
Algo VPN 是一组 Ansible 脚本,用于简化个人 WireGuard 和 IPsec VPN 的设置。它使用了最安全的默认配置,并支持主流云服务提供商。
更多信息请查看我们的发布公告。
获取 Algo 服务器运行的最简单方法是在本地系统上运行,或者从 Google Cloud Shell 运行,让它为您在云中设置一台_新的_虚拟机。
在云托管提供商处注册账户。 Algo 支持 DigitalOcean(最友好)、Amazon Lightsail、Amazon EC2、Vultr、Microsoft Azure、Google Compute Engine、Scaleway、DreamCompute、Linode、其他基于 OpenStack 的云托管、基于 CloudStack 的云托管或 Hetzner Cloud。
获取 Algo 副本。 Algo 脚本将从您的本地系统运行。有两种获取方式:
下载 ZIP 文件。解压文件,创建一个名为 algo-master 的目录,其中包含 Algo 脚本。
使用 git clone 创建一个名为 algo 的目录,其中包含 Algo 脚本:
git clone https://github.com/trailofbits/algo.git
设置配置选项。 使用您喜欢的文本编辑器打开 config.cfg。在 users 列表中指定您要创建的用户。为您计划连接到 VPN 的每台设备创建一个唯一用户。在部署前,您还应检查其他选项,因为之后改变主意可能需要您部署全新的服务器。
就是这样!您现在可以设置客户端连接到您的 VPN。继续下面的配置 VPN 客户端。
"# 恭喜! #"
"# 您的 Algo 服务器正在运行。 #"
"# 配置文件和证书位于 ./configs/ 目录中。 #"
"# 连接后,请前往 https://whoer.net/ 检查 #"
"# 确保所有流量都通过 VPN。 #"
"# 本地 DNS 解析器 172.16.0.1 #"
"# 新用户的 p12 和 SSH 密钥密码为 XXXXXXXX #"
"# CA 密钥密码为 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX #"
"# SSH 访问:ssh -F configs/<server_ip>/ssh_config <hostname> #"
用户需要的证书和配置文件位于 configs 目录中。请务必确保这些文件的安全,因为许多文件包含私钥。所有文件都保存在以新 Algo VPN 服务器 IP 地址命名的子目录下。
IPsec 用户重要提示:如果您以后想要添加或删除用户,必须在服务器部署时对 Do you want to retain the keys (PKI)? 提示选择 yes。这将保留用户管理所需的证书颁发机构。
Apple 设备使用 WireGuard 提供 VPN 服务。Algo 为 config.cfg 中定义的每个用户生成 WireGuard 配置文件 wireguard/<username>.conf 和 QR 码 wireguard/<username>.png。
在 iOS 上,从 iOS App Store 安装 WireGuard 应用。然后,使用 WireGuard 应用扫描 QR 码或通过 AirDrop 将配置文件传输到设备。
在 macOS 上,从 Mac App Store 安装 WireGuard 应用。运行应用后,WireGuard 将出现在菜单栏中。点击 WireGuard 图标,选择 Import tunnel(s) from file...,然后选择相应的 WireGuard 配置文件。
在 iOS 或 macOS 上,您可以通过编辑 WireGuard 应用中的隧道配置来启用“按需连接”和/或排除某些受信任的 Wi-Fi 网络(例如您的家庭或工作网络)。(Algo 无法自动为您完成此操作。)
如果您更希望在 Apple 设备上使用内置的 IPsec VPN,或者需要自动配置“按需连接”或排除的 Wi-Fi 网络,请参阅 Apple IPsec 客户端设置指南 以获取详细配置说明。
Android 使用 WireGuard 提供 VPN 服务。安装 WireGuard VPN 客户端。将相应的 wireguard/<name>.conf 文件导入您的设备,然后使用它设置新连接。有关详细的安装和配置说明,请参阅 Android 设置指南。
Windows 使用 WireGuard 提供 VPN 服务。Algo 为 config.cfg 中定义的每个用户生成 WireGuard 配置文件 wireguard/<username>.conf。
安装 WireGuard VPN 客户端。将生成的 wireguard/<username>.conf 文件导入您的设备,然后使用它设置新连接。有关更详细的操作说明和故障排除,请参阅 Windows 设置说明。
Linux 客户端可以使用 WireGuard 或 IPsec:
WireGuard:WireGuard 与 Linux 客户端配合良好。有关在 Ubuntu 和其他发行版上配置 WireGuard 的逐步说明,请参阅 Linux WireGuard 设置指南。
IPsec:对于 strongSwan IPsec 客户端(包括 OpenWrt、Ubuntu Server 和其他发行版),请参阅 Linux IPsec 设置指南 以获取详细配置说明。
对于使用 WireGuard 的 OpenWrt 路由器,请参阅 OpenWrt WireGuard 设置指南 以获取特定于路由器的配置说明。
对于上面未涵盖的设备或手动配置,您需要特定的证书和配置文件。您需要的文件取决于您的设备平台和 VPN 协议(WireGuard 或 IPsec)。
如果您开启了可选的 SSH 隧道角色,系统将为 config.cfg 中的每个用户创建本地用户账户,并且它们的 SSH authorized_key 文件将位于 configs 目录中(user.pem)。SSH 用户账户没有 shell 访问权限,不能使用密码认证,并且只有有限的隧道选项(例如,需要 ssh -N)。这确保了 SSH 用户拥有设置隧道所需的最小权限,并且无法在 Algo 服务器上执行其他操作。
使用下面的示例命令启动 SSH 隧道,将 <user> 和 <ip> 替换为您自己的。隧道设置好后,您可以将浏览器或其他应用程序配置为使用 127.0.0.1:1080 作为 SOCKS 代理,通过 Algo 服务器路由流量:
ssh -D 127.0.0.1:1080 -f -q -C -N <user>@algo -i configs/<ip>/ssh-tunnel/<user>.pem -F configs/<ip>/ssh_config
您的 Algo 服务器已配置为仅通过密钥进行 SSH 访问以进行管理。打开终端应用,cd 到您最初下载 Algo 的 algo-master 目录,然后使用成功消息中列出的命令:
ssh -F configs/<ip>/ssh_config <hostname>
其中 <ip> 是您 Algo 服务器的 IP 地址。如果您发现自己经常登录服务器,那么自动加载您的 Algo SSH 密钥将会很方便。将以下代码片段添加到 ~/.bash_profile 的末尾,以将其永久添加到您的 shell 环境中:
ssh-add ~/.ssh/algo > /dev/null 2>&1
或者,您可以选择将生成的任何 Algo 服务器的配置包含到您的 SSH 配置中。编辑 ~/.ssh/config 文件,在顶部添加以下指令:
Include <algodirectory>/configs/*/ssh_config
其中 <algodirectory> 是您克隆 Algo 的目录。
Algo 使得在初始部署后轻松添加或删除 VPN 服务器上的用户。
对于 IPsec 用户:您必须在初始服务器部署时对 Do you want to retain the keys (PKI)? 提示选择 yes。这将保留用户管理所需的证书颁发机构。您还应保存部署期间显示的 p12 和 CA 密钥密码,因为它们只显示一次。
要添加或删除用户,首先编辑 config.cfg 文件中的 users 列表。根据需要添加新用户名或删除现有用户名。然后,在终端中导航到 algo 目录并运行:
macOS/Linux:
./algo update-users
Windows:
.\algo.ps1 update-users
过程完成后,将为任何新用户在 configs 目录中生成新的配置文件。Algo VPN 服务器将更新为仅包含 config.cfg 文件中列出的用户。被删除的用户将无法再连接,新用户将拥有全新的证书和配置文件可供使用。
Algo 对隐私采取了务实的态度。默认情况下,我们最小化日志记录,同时保留足够的信息用于安全性和故障排除。
默认情况下记录的内容:
sudo wg 可见 - 显示最后一个端点和握手时间)隐私通过 config.cfg 中的两个主要设置控制:
strongswan_log_level: -1 - 控制 StrongSwan 连接日志记录(-1 = 禁用,2 = 调试)privacy_enhancements_enabled: true - 日志轮转、历史清除、日志过滤和清理的总开关要在故障排除时启用完整调试,请将 strongswan_log_level: 2 和 privacy_enhancements_enabled: false 都设置好。这将捕获详细的连接日志并禁用所有隐私功能。调试完成后请记住恢复这些更改。
部署后,验证您的隐私设置:
ssh -F configs/<server_ip>/ssh_config <hostname>
sudo /usr/local/bin/privacy-monitor.sh
任何 VPN 解决方案都无法实现完美的隐私。无论您的服务器配置如何,您的云提供商都会看到并记录网络流量元数据。当然,您的 ISP 知道您正在连接 VPN 服务器,即使他们无法看到您通过它做什么。
为了获得最高级别的隐私,请将您的 Algo 服务器视为可丢弃的。当您需要时,启动一个新实例,用于您的特定目的,然后完全销毁它。云基础设施的短暂性可以成为一种隐私功能,如果您有意使用它的话。
如果您已阅读所有文档并有进一步的问题,请创建一个新的讨论。
我一直在吐槽 VPN 服务的糟糕状况,也许是时候做一个正式的演讲了。TL;DR:使用 Algo。
-- Kenn White
在选择 VPN 提供商/应用之前,请确保您已做足研究 https://research.csiro.au/ng/wp-content/uploads/sites/106/2016/08/paper-1.pdf ... – 或考虑 Algo
-- The Register
Algo 非常简单且安全。
-- the grugq
我尝试了 Algo VPN,这是一组脚本,即使您对开发不太了解,也可以在很短的时间内设置一个云中的 VPN。我必须说,Trail of Bits 的方法给我留下了深刻的印象。
-- Romain Dillet 为 TechCrunch
如果您不愿意把钱花给匿名的、随机的 VPN 提供商,这是最好的解决方案。
-- Thorin Klosowski 为 Lifehacker
请参阅我们的开发指南,了解以下信息:
所有捐款都用于支持持续开发。感谢!
Algo 在 AGPLv3 下许可和分发。如果您想分发基于 Algo 的闭源修改或服务,请考虑购买例外许可。与上述方法一样,这将有助于支持持续开发。
启动部署。 回到终端。在 Algo 目录中,运行适合您平台的脚本:
macOS/Linux:
./algo
Windows:
.\algo.ps1
首次运行脚本时,它会自动安装所需的 Python 环境(Python 3.11+)。后续运行时会立即启动,并适用于所有平台(macOS、Linux、通过 WSL 的 Windows)。Windows PowerShell 脚本在需要时会自动使用 WSL,因为 Ansible 需要类 Unix 环境。有几个可选功能可用,对于功能完整的 VPN 服务器来说,这些都是非必需的。这些可选功能在部署文档中描述。