我想通过 tcp 运行 wireguard。我想用udptunnel
它通过 tcp 发送 udp 数据包。但是,当我运行 wireguard 然后尝试运行 时udptunnel
,udptunnel
失败并出现以下错误: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
)。
当我扫描端口是否51820
被443
使用,并且 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 的情况下应该如何工作)。