使用 Wireguard 连接 2 个站点(网络)

使用 Wireguard 连接 2 个站点(网络)

以下是我想要实现的目标。有人可以提出具有具体步骤的解决方案吗?如果 Wireguard 无法满足要求,替代解决方案是什么?

两个站点(RA 和 RB)上的路由器都有静态公共 (WAN) IP 地址和域名。每个站点上都有一个运行的 Wireguard 服务器。
两个站点上的所有设备都有静态 LAN 地址。
某些设备不具备支持 Wireguard 客户端连接到 Wireguard 服务器的功能。
两个站点都具有相同的本地网络 (192.168.1.0/24)。
两个路由器都有不同的 DHCP 范围。大多数设备都位于静态 LAN 地址上。

要求:

当两台 Wireguard 服务器均已启动并运行时。我可以将每台服务器作为 Wireguard 客户端连接到其他 Wireguard 服务器,以便可以连接这两个站点吗?
当两个站点都通过 Wireguard 连接时,我可以从站点 B 访问站点 A 设备吗?反之亦然?
如果我可以从外部 Wireguard 客户端连接到任何 Wireguard 服务器,我可以访问两个站点上的设备吗?

在此输入图像描述

答案1

两个站点都具有相同的本地网络 (192.168.1.0/24)。

这是一个问题 - 如果站点 A 中的 192.168.1.2(例如设备 A1)想要连接到站点 B 中的 192.168.1.3(例如设备 B1),192.168.1.2 会认为 192.168.1.3 在其自己的本地网络上并可以直接连接到它(而它实际上需要通过 WireGuard 服务器进行路由)。您需要重新排列子网,以免它们发生冲突 - 例如,对站点 A 使用 192.168.1.0/25,对站点 B 使用 192.168.1.128/25。

当两台 WireGuard 服务器均启动并运行时,我是否可以将每台服务器作为 WireGuard 客户端连接到另一台 WireGuard 服务器,以便可以连接这两个站点?

是的——从技术上讲,WireGuard 没有明显的“服务器”或“客户端”角色——双方都同样能够发送/接收/路由来自对方的流量。

当两个站点都使用 WireGuard 连接时,我可以从站点 B 访问站点 A 设备,反之亦然吗?

是的——前提是您修复了使用同一本地网络 192.168.1.0/24 的两个站点的路由问题。一旦你这样做了,你只需要:

  1. 配置每个站点中的路由器,通过站点自己的 WireGuard 服务器为另一个站点路由数据包;和
  2. 将每个站点的 WireGuard 服务器配置为通过另一个站点的 WireGuard 服务器路由另一个站点的数据包。

例如,假设您对站点 A 使用 192.168.1.0/25,对站点 B 使用 192.168.1.128/25;并将192.168.1.2分配给设备A1,将192.168.1.130分配给设备B1;并将 192.168.1.10 分配给 WireGuard 服务器 1,将 192.168.1.140 分配给 WireGuard 服务器 2。对于站点 A,您需要:

  1. 将路由器 RA 配置为通过 192.168.1.10(WireGuard 服务器 1)路由 192.168.1.128/25(站点 B LAN)
  2. 将 WireGuard 服务器 1 配置为通过其 WireGuard 接口将 192.168.1.128/25(站点 B LAN)路由到 WireGuard 服务器 2 -- 如果在 WireGuard 服务器 1 上的 WireGuard 配置中的 WireGuard 服务器 2 部分AllowedIPs = 192.168.1.128/25中进行了设置,WireGuard 将自动为您执行此操作[Peer]

相应地,对于站点 B,您需要:

  1. 配置路由器 RB 通过 192.168.1.140(WireGuard 服务器 2)路由 192.168.1.0/25(站点 A LAN)
  2. 将 WireGuard 服务器 2 配置为通过其 WireGuard 接口将 192.168.1.0/25(站点 A LAN)路由到 WireGuard 服务器 1 - 如果在 WireGuard 服务器 2 上的 WireGuard 配置中的 WireGuard 服务器 1 部分AllowedIPs = 192.168.1.0/25进行了设置,WireGuard 将自动为您执行此操作[Peer]

这样,当设备 A1 (192.168.1.2) 尝试连接到设备 B1 (192.168.1.130) 时,它会将这些数据包发送到路由器 RA,路由器 RA 将它们转发到 WireGuard 服务器 1,后者通过 WireGuard 隧道将它们转发到 WireGuard服务器 2,将它们转发到设备 B1。当设备 B1 将数据包发送回设备 A1 时,它会将这些数据包发送到路由器 RB,路由器 RB 将它们转发到 WireGuard 服务器 2,后者通过 WireGuard 隧道将它们转发到 WireGuard 服务器 1,后者再将它们转发到设备 A1。

站点到站点配置教程演练此场景的完整示例。

如果我可以从外部 WireGuard 客户端连接到任何 WireGuard 服务器,我可以访问两个站点上的设备吗?

是的(同样,前提是您修复了使用同一本地网络 192.168.1.0/24 的两个站点的路由问题)。我建议在 WireGuard 服务器上为外部客户端使用单独的 WireGuard 接口,以便轻松为这些客户端应用不同的路由和防火墙规则。您可以用于wg0站点到站点连接和wg1点到站点(外部客户端)连接。

为了路由来自每个站点内的外部客户端的数据包,您可以让 WireGuard 服务器对数据包进行 SNAT(也称为伪装),以便将每个数据包的源地址重写为外部客户端所访问的 WireGuard 服务器的 LAN 地址。客户端已连接;或者简单地使用外部 WireGuard 网络本身的路由配置每个站点的路由器。

点到站点配置教程演练使用 SNAT/伪装的场景示例;但对于您的场景,为外部 WireGuard 网络添加到路由器的路由可能会更简单,例如:

  1. 将每个站点中的路由器配置为通过站点自己的 WireGuard 服务器为两个外部 WireGuard 网络路由数据包;和
  2. 配置站点的 WireGuard 服务器,通过其与其他站点的 WireGuard 连接为其他站点的外部 WireGuard 网络路由数据包;和
  3. 将每个外部 WireGuard 客户端配置为通过其连接的 WireGuard 服务器为两个站点路由数据包

例如,假设您已如上所述设置站点到站点连接,通过 WireGuard Server 1 和 WireGuard Server 2 连接站点 A (192.168.1.0/25) 与站点 B (192.168.1.128/25)。您将使用 10.0.1.0/24 子网作为连接到 WireGuard 服务器 1 的外部客户端的 WireGuard 网络,并使用 10.0.2.0/24 子网作为连接到 WireGuard 服务器 2 的外部客户端的 WireGuard 网络。(这些子网是完全任意的——您可以选择任何您想要的子网,只要它们不与任何其他内部网络发生冲突。)

对于站点 A,您需要:

  1. 将路由器 RA 配置为还通过 192.168.1.10(WireGuard 服务器 1)路由 10.0.1.0/24 和 10.0.2.0/24
  2. 将 WireGuard 服务器 1 配置为通过其 WireGuard 接口将 10.0.2.0/24 路由​​到 WireGuard 服务器 2 -通过在 WireGuard 服务器 1 上的 WireGuard 配置中的 WireGuard 服务器 2 部分AllowedIPs = 192.168.1.128/25, 10.0.2.0/24中进行设置来执行此操作[Peer]
  3. 将 WireGuard 服务器 1 的每个外部客户端配置为通过其 WireGuard 接口将 192.168.1.0/25 和 192.168.1.128/25 路由到 WireGuard 服务器 1 - 通过在外部客户端的 WireGuard 配置中的 WireGuard 服务器 1 部分AllowedIPs = 192.168.1.0/25, 192.168.1.128/25中进行设置来执行此操作[Peer](或者在本例中,由于两个子网加起来为 192.168.1.0/24,因此您可以简单地设置AllowedIPs = 192.168.1.0/24)。

相应地,对于站点 B,您需要:

  1. 将路由器 RB 配置为还通过 192.168.1.140 路由 10.0.1.0/24 和 10.0.2.0/24(WireGuard 服务器 2)
  2. 将 WireGuard 服务器 2 配置为通过其 WireGuard 接口将 10.0.1.0/24 路由​​到 WireGuard 服务器 1 - 通过在 WireGuard 服务器 2 上的 WireGuard 配置中的 WireGuard 服务器 1 部分AllowedIPs = 192.168.1.0/25, 10.0.1.0/24进行设置来执行此操作[Peer]
  3. 将 WireGuard Server 2 的每个外部客户端配置为通过其 WireGuard 接口将 192.168.1.0/25 和 192.168.1.128/25 路由到 WireGuard Server 2 - 通过在外部客户端的 WireGuard 配置中的 WireGuard Server 2 部分AllowedIPs = 192.168.1.0/25, 192.168.1.128/25中进行设置来执行此操作[Peer](或者在本例中,由于两个子网加起来为 192.168.1.0/24,因此您可以简单地设置AllowedIPs = 192.168.1.0/24)。

对于 WireGuard Server 1 的每个外部客户端,您可以从 10.0.1.0/24 子网中为外部客户端选择一个 IP 地址。例如,假设您为外部客户端 WC 选择 10.0.1.100。您将Address = 10.0.1.100/32在WireGuard 配置部分中设置[Interface]连接到 WireGuard 服务器 1 的该客户端的接口。并且您将在 WireGuard 服务器 1 上的 WireGuard 配置中的客户端部分AllowedIPs = 10.0.1.100/32中进行设置。[Peer]

这样,当外部客户端 WC (10.0.1.100) 尝试连接到设备 B1 (192.168.1.130) 时,它会通过外部 WireGuard 隧道将这些数据包发送到 WireGuard 服务器 1,后者通过站点到站点转发这些数据包。 WireGuard 隧道到 WireGuard 服务器 2,后者将它们转发到设备 B1。当设备 B1 将数据包发送回外部客户端 WC 时,它将这些数据包发送到路由器 RB,路由器将它们转发到 WireGuard 服务器 2,后者通过站点到站点 WireGuard 隧道将它们转发到 WireGuard 服务器 1,后者通过外部客户端转发它们。到外部客户端 WC 的 WireGuard 隧道。

答案2

如果您可以将两个网络置于两个不同的子网地址空间(例如:192.168.0.0/24 和 192.168.1.0/24)上,那就更容易了。通过这种方式,您可以在网络上创建路由,以使用wireguard网关作为另一个网络的默认网关。由于两个网络位于同一子网中,因此设置路由更加困难。您需要一个长于 24 位的网络掩码。

我已经完成了您想要实现的目标,但是我在不同的地址空间上有子网。因此,我的路线稍微简单一些。然而,这并不意味着它不能完成。您可能需要进行一些 IP 更改才能使路由正常工作。看看这里: 与路由器后面带有wireguard盒的LAN之间的Wireguard连接

如果您还有其他问题,请询问。

相关内容