是否可以在同一台机器上的两个 WireGuard 设备之间路由数据?

是否可以在同一台机器上的两个 WireGuard 设备之间路由数据?

我想了解 wireguard 在我的机器上造成了多少延迟开销。但是,我的服务器是远程的,所以我想仅在机器上进行测试,以避免测量整个网络延迟。

因此,为了测量延迟,我考虑了以下设置。

我在机器上添加了两个 wireguard 设备,wg0 和 wg1。然后我向 wg0 发送一个数据包,wg0 会加密该数据包并将其发送给 wg1。然后 wg1 会解密该数据包并将其发送到本地端口,以测量发送和接收数据包之间所需的时间。

My wg0 conf:

[Interface]
   Address = 10.0.0.1/24
   ListenPort = 51871

[Peer]
   AllowedIPs = 10.0.0.1/24, 10.0.1.1/24
   Endpoint = localhost:51872

My wg1 conf:

[Interface]
   Address = 10.0.1.1/24
   ListenPort = 51872

[Peer]
   AllowedIPs = 10.0.0.1/24, 10.0.1.1/24
   Endpoint = localhost:51871
I have tried using the following configuration but then I am unable to setup wg1 as the setup fails at

ip -4 route add 10.0.0.0/24 dev wg1
due to 
RTNETLINK answers: File exists

Which makes sense as because this is the IP range of the wg0 device

My wg0 conf:

[Interface]
   Address = 10.0.0.1/24
   ListenPort = 51871
   PostUp = route add -net 10.0.1.0/24 gw 10.0.0.1 
   PostDown = route delete -net 10.0.1.0/24 gw 10.0.0.1

[Peer]
   AllowedIPs = 10.0.0.1/24, 10.0.1.1/24
   Endpoint = localhost:51872

My wg1 conf:

[Interface]
   Address = 10.0.1.1/24
   ListenPort = 51872
   PostUp = route add -net 10.0.0.1/24 gw 10.0.1.1 
   PostDown = route delete -net 10.0.0.1/24 gw 10.0.1.1


[Peer]
   AllowedIPs = 10.0.0.1/24, 10.0.1.1/24
   Endpoint = localhost:51871

但是,我无法设置路由,以便我的数据包能够真正穿过 wg 设备。这些设备目前还不执行握手。这可能吗?或者您可以推荐另一种设置吗?

我的操作系统是 ubuntu 20.04 服务器。顺便说一句,我想将此与我进行的另一次测量进行比较,其中其中一个 wireguard 设备在虚拟机中运行。在此设置中,我仅在主机上运行 wg0,在虚拟机中运行 wg1。基本上,现在我想找出在虚拟机中运行 wireguard 网关与在机器上本地运行它的开销。

解决方案

根据建议,我现在在另一个命名空间中运行第二个 wg 设备。设置非常简单,因为即使 wg 设备移动到不同的命名空间,监听端口仍保留在原始命名空间中。对于任何感兴趣的人而言,与在 Linux VM 中运行 wg1 相比,RTT 大约是 2/3。

感谢您的建议!

答案1

根据建议,我使用了网络命名空间。这是我最终的设置,尽管我没有使用配置文件:

第一个 wg 设备的设置:

sudo ip link add dev wg0 type wireguard
sudo ip address add dev wg0 10.0.0.1/24
sudo wg set wg0 listen-port 51871 private-key ./wg0.key peer PEER1_PUBKEY allowed-ips 10.0.0.0/24 endpoint localhost:51872
sudo ip link set up dev wg0

wg1 设备的设置:

sudo ip netns add container
sudo ip link add wg1 type wireguard
sudo ip link set wg1 netns container
sudo ip -n container addr add 10.0.0.2/24 dev wg1
sudo ip netns exec container wg set wg1 listen-port 51872 private-key ./wg1.key peer PEER0_PUBKEY allowed-ips 10.0.0.0/24 endpoint localhost:51871
sudo ip -n container link set wg1 up
sudo ip -n container route add default dev wg1

然后我只需运行一个像这样的 echo 客户端:

sudo ip netns exec container ./udp_echo_server

相关内容