我正在尝试通过互联网将两个管理程序连接在一起。两个管理程序都运行 KVM 进行虚拟化,我手动为 VM 网络创建了网桥,目前可以使用。
我想使用 Wireguard 连接这两个虚拟机管理程序上的虚拟机桥接器,以便虚拟机可以从一个虚拟机管理程序迁移到另一个虚拟机管理程序,而虚拟机本身没有任何路由/网络更改。
不过在开始之前,我意识到我不知道如何设置 Wireguard,以使两个管理程序上的网桥对另一个管理程序可见,但管理程序本身不会出现在 VPN 上,因此虚拟机无法直接连接/攻击管理程序。
Wireguard 能够做到这一点吗?或者由于 Wireguard 在 OSI 堆栈而不是以太网帧级别上的工作方式,这是不可能的?
谁能说出是否可以使用 Wireguard 来“盲目地”桥接两个网络?还是主机也总是出现在网络上?其他一些 VPN 解决方案会允许这样做吗?或者我最好使用防火墙来锁定我不想被访问的主机?
提前致谢!
Wireguard 在第 3 层(路由 IP 数据包)工作,而网桥在第 2 层(交换以太网帧)工作。所以wireguard不能这样做。这个问题已经被问过,并且wireguard的作者在wireguard的邮件列表中做出了回答:Bridging wg and normal interfaces?.
所以在通过wireguard之前需要一个额外的封装层。我确信有多种选择(其中VXLAN在Linux上也可用)。
我使用GRETAP和命名空间(而不是实际的管理程序和虚拟机)做了一个示例。我发现,为了避免强制本地 VM 流量具有比可能的更有限的数据包大小,需要进行分段处理,但
GRETAP
有一些限制,如下所述:GRE 桥接、IPsec 和 NFQUEUE。我选择使用nftables 的有效负载修饰而不是 NFQUEUE 和用户空间来解决它。另请注意,RFC 6864解释说,由于 IP ID 字段的限制,分段数据包大部分时间应限制在 6.4Mbp/s,现在速度很慢,但通过具有强完整性检查的隧道,可以放松它。
在这里,(假)虚拟机通过网桥链接,没有其他连接。除了他们自己,他们看不到其他任何东西:他们看不到使用 gretap+wireguard 链接两个网桥的(假)管理程序。只需运行这个创建和配置多个命名空间的 bash 脚本。使用 nftables 0.9.2 和内核 5.2.x 进行测试。
示例(来自远程端的延迟更大):