如何使用 udptunnel 通过 tcp 运行 wireguard?

如何使用 udptunnel 通过 tcp 运行 wireguard?

我想通过 tcp 运行 wireguard。我想用udptunnel它通过 tcp 发送 udp 数据包。但是,当我运行 wireguard 然后尝试运行 时udptunneludptunnel失败并出现以下错误:setup_udp_recv: bind: Address already in use

当我尝试udptunnel第一次运行然后第二次运行 wireguard 时,wireguard 失败并出现以下错误:RTNETLINK answers: Address already in use

使用的命令:

wg-quick up wg0
udptunnel -s 443 127.0.0.1/51820

在 wireguard 配置文件 ( wg0.conf) 中我使用端口51820( ListenPort = 51820)。

当我扫描端口是否51820443使用,并且 wireguard 或 udptunnel 都没有运行时,我没有得到任何结果。

netstat -tulpn | grep 51820
netstat -tulpn | grep 443

答案1

来自 udptunnel 手册(http://www.cs.columbia.edu/~lennox/udptunnel/):

在所有情况下,所有选项后都会给出隧道的 UDP 地址和端口。UDPTunnel 将侦听此地址的数据包,并将接收到的数据包发送到此地址。

换句话说,地址/端口不仅是你推送传出wireguard 会将流量封装为 TCP 流量,但目的地解封装后的地址/端口另一方面来源地址/端口传入解封装后的 wireguard 流量在这边

因此,如果你的 wireguard 服务器需要为多个客户端提供服务,那么它将无法正常工作,因为你需要一个 udptunnel 实例每位客户

在服务器上,它应该监听wireguard 客户端监听(因此 wireguard 客户端需要使用固定端口;但如果在 NAT 后面,则不需要进行端口转发,因为它通过本地主机环回发送/接收流量)。

在客户端,它应该监听wireguard 服务器继续听。

双方使用的地址(127.0.0.1)和 UDP 端口他们自己的 udptunnel 实例Endpoint=应按照另一侧部分中的说明进行设置Peer。(您无需Endpoint=在服务器上进行设置,但它将允许服务器通过 wireguard 隧道到达客户端,即使在两端的 wireguard 和 udptunnel 都启动后从未发生过反之亦然的情况。)

PS 实际上,现在 wireguard 设置实际上不再具有客户端/服务器模型。该模型仅基于 udptunnel 设置(或者 wireguard 设置在没有 udptunnel 的情况下应该如何工作)。

相关内容