OpenBSD 和 Wireguard 中心和辐射:辐射到辐射通信

OpenBSD 和 Wireguard 中心和辐射:辐射到辐射通信

我已经成功建立了一个运行 Wireguard [wg0] 的 OpenBSD 系统,我将其指定为“中心”,地址为 192.168.100.1/24。我也有客户成功运行 Wireguard,具有各种硬件类型和操作系统,IP 地址为 192.168.100.0/24。其目的是OpenBSD可以通过NAT与外界通信,并且客户端可以通过中央OpenBSD系统相互通信。

什么有效(ping 响应):

(wg0:network) -> 192.168.100.1
192.168.100.1 -> (wg0:network)
(wg0:network) -> 8.8.8.8 (for example)

什么不起作用:

(wg0:network) -> (wg0:network)

对于不起作用的情况,OpenBSD 本身会使用 ICMP 重定向进行响应。你可以理解这种行为,但这不是我想要的。接下来的配置也不起作用,但我认为可能起作用:将 OpenBSD 更改为 192.168.100.1/32并添加 192.168.100.0/24 的路由。这会导致根本不生成任何响应(更新:应该澄清我的意思是没有发生转发,因此没有请求到达其目的地)。

# /etc/hostname.wg0
inet 192.168.99.1 255.255.255.255 NONE
up

!/usr/local/bin/wg setconf wg0 /etc/wireguard/wg0.conf
!route add 192.168.99.0/24 -link -iface wg0

我在网上看到一些关于 BSD 如何无法将数据包从接收到的接口发送出去的讨论。在正常情况下,这是一个明智的策略,但我认为这是一个有效的用例,除非我误解了周围的各种博客。

作为信息点,此设置适用于以 Linux 为中心的系统:辐条对辐条通信是可能的。

(更新)这是我对 pf.conf 的添加:

block in
pass on wg0
pass in inet proto udp from any to (em0) port 1984
pass out on em0 to 8.8.8.8 nat-to (em0)
pass in from (em0:network) to (em0)

答案1

非常感谢贾斯汀·路德维希(Justin Ludwig),我找到了答案。这不是我预期的地方。

以 1 的 ping 计数运行 tcpdump 显示 ping 请求确实离开了 wg0 接口,因为我可以看到它两次。我之前没有发现这一点,因为我无限期地运行 ping,并且没有发现它被重复。

这让我发现了一些关于 Wireguard 时我没有意识到的事情:如果存在到其他分支的更具体的 /32 路由,则在边缘客户端上放置 192.168.100.0/24 的 allowed-ip 不起作用。

[Interface]
PrivateKey= ....
Address= 192.168.100.200/32

# Central OpenBSD hub
[Peer]
PublicKey = ....
AllowedIPs = 192.168.100.0/24, 8.8.8.8/32

# Another Spoke
[Peer]
PublicKey = ....
AllowedIPs = 192.168.100.10/32

使用上面的示例,我认为可以通过 OpenBSD 中心从 192.168.100.10 联系该客户端,但事实并非如此。我没有看到tshark -i wg0该辐条上有任何使用,大概是因为 Wireguard 在解密之前丢弃了数据包。

因此,简而言之,删除上面的 192.168.100.10/32 的对等互连会导致流量按照我的意愿流动。

再次非常感谢贾斯汀的帮助。

相关内容