我目前正在使用subprocess.run(["socat", f"udp-listen:{_to},fork,reuseaddr,bind=127.0.0.1", f"""exec:'sudo ip netns exec {netns} socat STDIO "UDP-connect:127.0.0.1:{_from}"',nofork"""])
将 UDP 端口从网络命名空间转发到主机。然而,使用相同的方法转发 UDP 端口比转发 TCP 端口慢得多(有问题的 UDP 服务是自托管的 AdguardHome DNS 服务器,如果有的话)。这是为什么?
编辑:我不确定这有多重要,但我只在 UDP 上发现了这一点。
fcntl(5, F_SETFD, FD_CLOEXEC) = 0
recvfrom(3, 0xffffcb0f4460, 519, MSG_DONTWAIT, NULL, NULL) = -1 EAGAIN (Resource temporarily unavailable)
bind(5, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, 16) = 0
getsockname(5, {sa_family=AF_INET, sin_port=htons(53), sin_addr=inet_addr("127.0.0.1")}, [16]) = 0
recvfrom(3, 0xffffcb0f4240, 519, MSG_DONTWAIT, NULL, NULL) = -1 EAGAIN (Resource temporarily unavailable)