是的,每个接口都有自己的配置文件。WireGuard 没有内置的“客户端”或“服务器”角色——每个节点都被视为“对等点”。
如果您有两个对等点,对等点 A 和对等点 B,则对等点 A 的配置文件将在部分中包含其自己的本地接口[Interface]
的设置,并在部分中包含其与对等点 B 的远程连接的设置[Peer]
。类似地,Peer B 的配置文件将在该部分中具有其自己的本地接口[Interface]
的设置,并在一个部分中具有其与 Peer A 的远程连接的设置[Peer]
。所以[Interface]
Peer A 的配置中的[Peer]
部分对应于 Peer B 的配置中的部分;并且[Interface]
Peer B 的配置部分对应于[Peer]
Peer A 的配置部分。
端点([Peer]
配置部分)是远程对等方的“真实”IP 地址和端口,在 WireGuard VPN 之外。此设置告诉本地主机如何连接到远程对等方以设置 WireGuard 隧道。
在示例配置中,Endpoint = 54.91.5.139:1952
对于远程对等点,通过该对等点的虚拟 WireGuard 隧道路由的任何数据包实际上都将被加密,包装在一组新的 UDP 数据包中,并通过 Internet(或其他一些“真实”网络,像您的公司网络)到54.91.5.139
UDP 端口1952
。
除非您还在 WireGuard 之外的本地主机上进行一些花哨的路由,如果您尝试从本地主机发送 ping 数据包到此端点(例如ping 54.91.5.139
),或者如果您尝试从远程对等点访问其他服务通过此端点地址的本地主机(例如,http://54.91.5.139/
在 Web 浏览器中导航到),您将不会使用 WireGuard 隧道——您将使用常规 Internet(或其他“真实”网络)连接。
AllowedIPs([Peer]
配置部分)是本地主机应通过 WireGuard 隧道路由到远程对等方的 IP 地址集。此设置告诉本地主机隧道中的内容。
在示例配置中,AllowedIPs = 10.129.130.1/32
对于远程对等点,本地主机上的任何数据包10.129.130.1
都不会直接通过您的常规 Internet(或其他“真实”网络)连接发送,而是首先发送到虚拟 WireGuard 隧道。WireGuard 将对它们进行加密,将它们包装在一组新的 UDP 数据包中,然后通过 Internet(或其他“真实”网络)将它们发送到对等端的端点,54.91.5.139
. 从那里,对等方将解包和解密数据包,并尝试将它们转发到10.129.130.1
.
因此,如果您尝试将 ping 数据包从本地主机发送到10.129.130.1
(例如ping 10.129.130.1
),或尝试访问其他服务10.129.130.1
(例如,http://10.129.130.1
在 Web 浏览器中导航到),您将使用 WireGuard 隧道。
相反,就像您提到的那样,对于从该远程对等方通过隧道到达的数据包,如果它们一旦解包和解密,则具有由指定的块之外的源 IP AllowedIPs
(例如,源 IP 是10.1.1.1
而不是10.129.130.1
),本地主机将删除它们。
地址([Interface]
配置部分)是本地主机的虚拟 IP 地址,在 WireGuard VPN 中。此设置会影响进出 WireGuard 隧道的数据包的路由,因此不应是可在 VPN 之外路由的“真实”IP 地址。
在示例配置中Address = 10.193.130.174/16
,WireGuard VPN 中本地主机的虚拟 IP 地址为10.193.130.174
。因此,本地主机通过 WireGuard 隧道发送的来自本地套接字的任何数据包的源地址都将为10.193.130.174
,并且它从隧道接收到的目标地址10.193.130.174
为WireGuard 之外的精美路由)。
假设主机的“真实”网络地址是10.10.10.10
. 如果从主机运行ping 10.129.130.1
,主机将生成源地址为10.193.130.174
,目的地址为 的ping 数据包10.129.130.1
,并通过 WireGuard 隧道发送。WireGuard 将加密这些数据包,并用源地址为 的 UDP 数据包包装它们10.10.10.10
,源端口为51820
(WireGuard 默认,因为ListenPort
在配置中未指定),目标地址为54.91.5.139
,目标端口为1952
。然后它将这些 UDP 数据包发送到“真实”网络。
54.91.5.139
当远程对等点在 IP 地址和 UDP 端口上侦听“真实”网络接口时1952
,接收到这些数据包,它将解包和解密它们。然后,它将以原始形式在自己的网络堆栈上重新排队,作为源地址为10.193.130.174
、目标地址为 的 ICMP 数据包10.129.130.1
。
如果原始主机收到来自该远程对等方的 ping 回复,它最初会从“真实”网络接口作为 UDP 数据包接收,源地址为54.91.5.139
,源端口为1952
,目标地址为10.10.10.10
,并且的目的港51820
。WireGuard 会将这些数据包解包并解密回它们的原始形式,作为具有源地址10.129.130.1
和目标地址的ICMP 数据包10.193.130.174
,然后将它们重新排队。由于虚拟 WireGuard 接口的 IP 地址是10.193.130.174
(通过Address
设置配置),本地主机将知道将这些数据包路由回本地套接字。
请注意,为Address
设置指定网络掩码(/16
在我们的示例中)会影响本地主机做出的关于应该将哪些流量发送到隧道(以及如何处理隧道接收的流量)的路由决策,其方式可以是多余的,或与AllowedIPs
设置有交叉的目的。在我们的示例中Address = 10.193.130.174/16
,这通常会导致发往该10.193.x.x
范围内任何地址的所有流量都被路由到本地主机上的这个 WireGuard 接口(不包括接口自己的地址,10.193.130.174
它将被路由到环回接口)。
但是,AllowedIPs
我们示例中唯一对等点的设置不包括10.193.x.x
范围内的任何内容。因此,如果我们ping 10.193.0.1
在主机上运行,主机会生成源地址为10.193.130.174
,目的地址为 的ping 数据包10.193.0.1
,并通过 WireGuard 隧道发送。但由于该目标地址不适合AllowedIPs
任何已配置的对等方,WireGuard 会丢弃这些数据包。
所以通常最简单的方法是在Address
设置中省略网络掩码(对于 IPv4 地址,或使用/32
,具有相同的效果),并且仅使用AllowedIPs
每个对等方的设置来控制路由到它的内容。通常,只有当您有许多不同的对等点使用相同的虚拟子网时(或者如果您在 WireGuard 之外进行一些花哨的路由),您才会指定网络掩码。
还有一点需要了解的Endpoint
是,您只需将其设置在 WireGuard 隧道的一侧(但如果双方都有静态 IP,则可以在两侧设置)。如果您Endpoint
在 Peer A 的配置中为 Peer B 设置了一个,但在 Peer B 的配置中为 Peer A 省略了它,则 Peer A 将能够启动并设置与 Peer B 的隧道,而 Peer B 不必提前知道 Peer A 的端点的时间。
如果对等点 A 具有动态分配的公共 IP 地址,这是理想的;但缺点是对等点 B 将无法启动隧道——它必须等待对等点 A 连接到它。如果您有时需要 Peer B 启动与 Peer A 的连接,您可以通过PersistentKeepalive
在 Peer A 的配置中包含 Peer B 的设置来缓解这种情况——这将指示 Peer A 每 N 秒主动伸出并连接到 Peer B(其中 N 是您在PersistentKeepalive
设置中输入的值)。