嵌套的 wireguard 隧道

嵌套的 wireguard 隧道

我的家庭网络位于 CGNAT 后面,我没有获得任何公共 IP 地址。我想从移动客户端通过 Wireguard 访问我的家庭网络。

Home Router  <----Wireguard----> VPS                      (Tunnel "A")
Home Router  <----Wireguard-----(VPS)----> Mobile Client  (Tunnel "B")

家庭路由器和 VPS 已安装 OPNSense。隧道“A”已启动并运行。我现在希望移动客户端通过隧道“A”连接到 VPS 的公共 IP 地址来建立隧道“B”。

目前我使用 VPS 上的端口映射将家庭路由器的 IP(隧道 A)的 Wireguard 端口映射到 VPS 的端口。

我正在努力正确配置隧道 B 的路由。特别是返回移动客户端的路由不起作用,因为家庭路由器不知道移动客户端的 IP。

如何建立这种嵌套的隧道配置?

为什么我不使用 VPS 作为路由器,A <--> B而是嵌套隧道?因为我不完全信任 VPS,因此我被迫在家用路由器上而不是 VPS 上进行客户端配置

答案1

我正在努力正确配置隧道 B 的路由。特别是返回移动客户端的路由不起作用,因为家庭路由器不知道移动客户端的 IP。

将其留空;服务器应在收到有效数据包(即密钥与任何对等方的密钥匹配)后立即自动获取 IP 地址。这是标准 WireGuard 功能的一部分,我相信它在 FreeBSD 中的实现方式与其他系统相同。

不过,最有可能的是,它学到的地址将无法使用,因为移动网络通常具有网络级防火墙;如果“回复”数据包来自最初联系的 VPS 以外的其他端点,它们将不会转发这些数据包。

因此,除了 DNAT(端口映射)之外,VPS 还应该执行 SNAT(出站 NAT) 指向您家用路由器的数据包 – 就像您配置“NAT 发夹”一样 – 这样家用路由器将只将 VPS 本身视为其客户端。(来自不同移动客户端的数据包仍将通过 UDP 源端口进行区分。)

答案2

这只是部分答案(但可能对你有帮助) -

我做过类似的事情,但原因完全不同(与 NAT 无关),Wireguard 可以在任意端口上运行。在配置文件中,您可以为接口指定 ListenPort,而当您为对等点指定端点时,只需以以下形式指定即可

  Endpoint = ip.ad.dr.ess:portno

有点棘手的是,我的路由器对一些跟踪路由有点困惑,因为它只有 1 个路由表。为了解决路由表的问题,你可以进行基于策略的路由,并拥有第二个路由表。我不想那样做,因为核心路由器

相关内容