使用WireGuard

您可能最近注意到了WireGuard周围的嗡嗡声。

WireGuard是一个非常简单的VPN,它使用最先进的密码术,而且它的嗡嗡声来自它简单而擅长它的功能,以及它如此优秀以至于它将被包含在Linux内核默认情况下。 Linus Torvalds本人说他很喜欢它,这让软件世界风靡一时,因为我们并不知道Linus能够拥有爱或除了perkele之外的任何情感。

我在WireGuard中遇到的唯一问题是缺少文档,或者缺少您期望的文档。快速入门指南,我看到的第一件事,提到了一个从未告诉你如何编写的配置文件,它还假设你比我更熟悉网络。

由于创建宇宙的初始条件设置得很好,所以WireGuard最终会被记录不足,我将反对Creation本身并向您展示如何轻松配置和运行它。让我们开始!

简短概述

所有WireGuard的核心都是创建从一台计算机到另一台计算机的接口。它实际上不允许您访问网络任何一端的其他计算机,也不会通过VPN服务器转发所有流量,或类似的任何内容。它只是直接,快速,安全地连接两台计算机。

要做除此之外的任何事情,您需要为它配置网络,这对于WireGuard文档来说“超出范围”,但我认为它非常适合VPN的范围。幸运的是,WireGuard附带了一个帮助脚本wg- quick,它几乎可以满足普通用户的所有需求。请记住,wg-quick的配置文件与wg可执行文件不兼容,但wg-quick是我们所需要的,所以这无关紧要。

让我们开始设置一切。

安装和设置

要安装WireGuard,请参阅安装页面,它应该是一个非常简单的过程。安装后,您需要为要访问VPN的每台计算机生成一个私钥和一个公钥。由于WireGuard的设计,连接两端的两台计算机都需要拥有彼此的公钥。

让我们生成这些键。在将在VPN中的每台计算机上,创建目录/ etc / wireguard /并在刚刚创建的目录中的每台计算机上运行这些命令:

$ umask 077 # This makes sure credentials don’t leak in a race condition.

$ wg genkey | tee privatekey | wg pubkey > publickey

这将在每台计算机上生成两个文件privatekey和publickey。 publickey文件用于告诉全世界,privatekey文件是秘密的,应该保留在生成它的计算机上。

如果您的VPN服务器位于NAT后面,您还需要打开您选择的UDP端口(默认为51820)。 对你要连接的任何计算机执行此操作(根据我所知,您连接的计算机不需要打开端口,但如果我错了,请纠正我)。

常见场景

完成上述操作后,您就可以配置WireGuard了。 转到/ etc / wireguard /并在每台计算机上创建一个名为wg0.conf的文件。 我们将介绍一些常见的场景以及每个场景的配置。

只需一个连接

如果您只想在两台计算机之间建立单个连接(例如,将笔记本电脑连接到家庭服务器),配置非常简单。 在服务器上,输入以下内容:

[Interface]

Address = 192.168.2.1

PrivateKey ='s>

ListenPort = 51820

[Peer]

PublicKey ='s>

AllowedIPs = 192.168.2.2/32

这就是服务器所需要的一切。 请记住,是您的主服务器的私钥文件的内容(不是文件的路径,实际内容,长行的乱码),类似于笔记本电脑的publickey文件的内容。的publickey>的privatekey>

对于客户端,这是配置:

[Interface]

Address = 192.168.2.2

PrivateKey ='s>

ListenPort = 21841

[Peer]

PublicKey ='s>

Endpoint =:51820’s>

AllowedIPs = 192.168.2.1/24

This is for if you’re behind a NAT and

want the connection to be kept alive.

PersistentKeepalive = 25

同样,用您生成的相应字符串替换键。

如您所见,我为每台计算机选择的地址是192.168.2.1和192.168.2.2,因为该子网在我的设置中是免费的。如果任一计算机上有该子网的接口,则应选择另一个,例如192.168.3.x,以避免冲突。

写完这两个文件后,在服务器上运行wg-quick up wg0,然后在客户端运行。如果您在配置中输入服务器的IP并正确配置了端口,则现在应该连接两台计算机,您应该能够从VPN客户端ping 192.168.2.1并查看响应。要再次关闭连接,只需运行wg-quick down wg0。

我再说一遍,此设置只允许您从客户端访问服务器的界面,它不会通过服务器转发任何流量,也不允许您访问服务器LAN上的任何其他计算机。

访问您的家庭局域网

要实际访问服务器的LAN,您需要对配置稍作修改。在服务器的配置文件中,在[Interface]部分的末尾添加以下两行:

这假设您的LAN接口名为eth0。 如果不是,请将上面的行更改为实际名称。

在客户端上,在AllowedIPs下添加LAN的子网。 例如,如果您的子网是192.168.1.x,请将AllowedIPs更改为如下所示:

AllowedIPs = 192.168.2.1/24, 192.168.1.1/24

简而言之,AllowedIPs设置在发送时充当路由表,在接收时充当ACL。当对等方尝试将数据包发送到IP时,它将检查AllowedIPs,如果IP出现在列表中,它将通过WireGuard接口发送它。当它通过接口接收数据包时,它将再次检查AllowedIPs,如果数据包的源地址不在列表中,它将被丢弃。

您可能需要在服务器上启用IP转发才能使其正常工作,但这对Linux来说是一个简单的过程。这是一个很好的指南。如果您正在运行OS X或Windows服务器,那么您不值得拥有美好的东西。

然后如上所述运行wg-quick up wg0,你应该能够从客户端ping局域网中的其他计算机,就好像你在家一样。尝试ping 192.168.1.1或LAN中的任何其他计算机进行验证。

请注意,这不会通过您的服务器转发任何其他流量,因此它不会代理您的网页浏览或类似的东西。它只会让您与服务器LAN上的其他计算机进行通信。

对于流量转发,请参见下文:

转发您的所有流量

如果您想通过VPN转发所有流量,WireGuard也可以轻松实现这一点。请记住,如果您这样做是为了避免ISP跟踪,它将无法对您的服务器的ISP起作用。你的所有流量都会看起来像是来自你的服务器,但是如果那是在你的家里,你所有的种子和色情下载就会看起来就像它来自哪里,即使你在柬埔寨的网吧。

要转发所有流量,只需将客户端上的AllowedIPs行更改为:

AllowedIPs = 0.0.0.0/0, ::/0

这是整个客户端配置:

[Interface]

Address = 192.168.2.2

PrivateKey ='s>

ListenPort = 21841

[Peer]

PublicKey ='s>

Endpoint =:51820’s>

AllowedIPs = 0.0.0.0/0, ::/0

这将使wg0接口负责路由所有IP地址(因此为0.0.0.0/0),并且应该通过服务器路由所有流量。 您可以通过加载我的IP网站之一来检查您的服务器的IP是否被检测到。

在启动时保护并运行

完成后,运行以下命令使目录和文件只能由管理员读取(它确实包含密钥):

$ sudo chown -R root:root /etc/wireguard/

$ sudo chmod -R og-rwx /etc/wireguard/*

创建并保护文件后,如果操作系统使用systemd,则可以轻松设置WireGuard以在启动时初始化VPN:

$ sudo systemctl enable wg-quick@wg0.service

同样,要启动或停止服务:

$ sudo systemctl start wg-quick@wg0.service

$ sudo systemctl stop wg-quick@wg0.service