了解如何使用仅包含基本实用程序的新发布的内核内WG(4)驱动程序,在具有OpenBSD 6.8端点的WireGuard VPN上安全地传输智能手机流量。
当您在笔记本电脑或智能手机上浏览互联网、查看电子邮件、使用社交媒体等时,流量必须从您的设备通过本地网络,然后通过更广泛的互联网,直到最终到达目的地服务器。无论谁运行本地Wi-Fi或手机网络,都可以看到您访问的网站,如果网站连接未加密,您从该网站发送和接收的确切内容。此外,如果Wi-Fi网络未加密(没有密码的开放式不安全网络),则网络上的任何用户也可以读取您的流量!
保护您的浏览和活动不被本地网络上的人访问和保护的一种方法是通过加密的虚拟专用网络(VPN)进行隧道传输。当我在机场、图书馆、餐馆等使用公共Wi-Fi来保护我的互联网流量不被潜在窃听者窃听时,我通常会这样做。获得VPN的方法包括从商业VPN提供商那里购买一个,但这将谁可以查看您的流量的问题从Wi-Fi上的人转移到了这家提供商。相反,我将自己的VPN(使用WireGuard)设置在我在Vultr上拥有的虚拟专用服务器(VPS)上,该服务器运行在我最喜欢的操作系统OpenBSD上。
WireGuard正在成为创建VPN的首选软件。与常见的替代方案(OpenVPN、IPsec)相比,它更简单、更快,并且使用现代加密技术(可以说它更安全)。OpenBSD已经使用WireGuard-Go为WireGuard提供了用户端支持。OpenBSD6.8于今天(2020-10-18)发布,现在包括内核内的WireGuardimplementation WG(4)。作为内核中的一员,这种实现速度更快。这也意味着我们可以跳过额外的软件,使用仅限基础的实用程序来实现简单、容易的配置。
您的智能手机将通过单击WireGuardapp启用VPN。然后,您手机上的所有流量都将通过加密隧道到达OpenBSD端点服务器,之后,它将路由到互联网的其余部分。这将保护您的流量免受任何人在WI-Fi或蜂窝网络上的窥探。
下面显示了OpenBSD服务器作为WireGuard端点的配置。下面的所有说明都与2020-10-18发布的OpenBSD6.8有关。
配置OpenBSD的防火墙/数据包过滤器PF(4)以打开WireGuard的端口,允许WireGuard对等项之间的通信,并将隧道通信从客户端转发到互联网。为此,请将以下行添加到pf.conf(5):
#wireguard#open wireguard port pass on export proto udp from any to any port 51820#允许wireguard对等方之间的通信在wg0上传递#允许连接到wg0的客户端将其外部世界流量从(wg0:network)nat-to(exress:0)隧道传出
在OpenBSD 6.8之前,配置需要wireguard-toolspack。现在WireGuard在Base中,我们可以使用Base Utils进行所有配置。手册页(工作组(4)、ifconfig(4))对此进行了很好的记录,并总结如下:
WireGuard使用长度为32字节、base64编码的Curve25519密钥。Curve25519密钥需要5个特定位才能以某种方式配置为有效,但是WG(4)可以从任意随机生成的32个字节中纠正这一点。因此,我们只需要一个32字节的随机base 64编码字符串,并且可以使用openssl(1)来实现:
这会将私钥保存到EP_Private ate.key。暂时拿着这个。我们可以在设置完成后将其删除。
启动wg0接口将从私钥生成公钥。您需要将此公钥提供给客户端(您的笔记本电脑、智能手机等),因此暂时保存它:
#ifconfig wg0|grep wgpubkey|Cut-d';';-f 2>;ep_public.key。
此IP地址将是您的端点将在VPN上拥有的IP地址。客户端(智能手机、笔记本电脑等)将可以在10.0.0.1访问OpenBSD端点,这些客户端也将位于10.0.0.0/24子网上。我建议随机选择一个IP地址范围,以防止您可能加入的网络与您的WireGuard网络(例如10.12.24.0/24)之间的任何冲突。为简单起见,我将使用10.0.0.0/24子网,并为端点提供第一个IP地址:
下面是一个小技巧,所以我们只能使用基本实用程序。它使用生成的私钥生成一个临时的WG接口,这样我们就可以提取生成的公钥。
这会将私钥保存到client1_private ate.key。暂时拿着这个。我们可以在设置完成后将其删除。
请注意,我正在选择一个不同的端口(这可以是您想要的任何端口),因为wg0已经在51820上运行。
您需要在OpenBSD端点上使用此公钥,以便客户端进行连接。
#ifconfig wg1|grep wgpubkey|Cut-d;';-f 2>;client1_public.key。
现在我们有了客户端的公钥,我们可以在端点上建立一个WireGuardPeer,以允许客户端连接:
这会将对等方的IP地址限制为10.0.0.2。在您选择的子网上将IP地址更改为您想要的IP地址。
按照上述说明,您的端点可以正常工作。但是,一旦您重新启动操作系统,它将不起作用。在/etc/hostname.wg0中使用以下文本保存此配置:
请确保将_WITH_EP_PRIVATE_KEY替换为存储在EP_Private.key中的文本,并将_WITH_CLIENT1_PUBLIC_KEY替换为存储在client1_public.key中的文本。
确保/etc/hostname.wg0的权限正确,以便root以外的用户和组轮子中的用户无法读取密钥:
端点设置完成后,现在您只需配置您的智能手机即可使用隧道。WireGuard的作者提供适用于Android和iOS的应用程序。这些应用程序使配置变得简单。你只需要拍一张由client.conf制作的A二维码的照片,就可以写在你的电脑上了。该lient.conf应包含以下内容:
确保将_WITH_CLIENT1_PRIVATE_KEY替换为client1_Private.key中的内容,将_WITH_EP_PUBLIC_KEY替换为EP_public_key中的内容,并将OpenBSD_EP_IP_ADDRESS替换为OpenBSD端点的IPv4地址。
接下来,使用libqrencodesackage使用此信息生成二维码。如果您不想在基础之外安装软件包,您可以将上述信息手动输入到您的手机中。然后执行以下操作以创建代码:
如果您在使用终端生成的二维码拍照时遇到问题,您也可以将其另存为图像并为其拍照。
打开您的WireGuard应用程序并拍摄二维码的照片,该应用程序现在已配置完毕!拨动应用程序中的开关将其打开。要验证它是否正常工作,请转到像icanhazip.com这样的网站查看您的IP地址。当WireGuard隧道达到与您的OpenBSD端点相同的地址时,它应该会改变。
如果您对本文有任何疑问或意见,请使用我联系页面上的任何一种方法与我联系。