Linux 内核内数据包从一个端口转发到多个端口
在基于Linux的系统上,我需要TCP端口上传入的数据自动重定向到其他50个本地端口,而无需通过用户空间的send/recv。每个端口都需要接收所有传入流量的副本。所有端口都是同一台机器的本地端口 由于一个端点是一个文件的限制,我已经放弃了Linux 内核内数据包从一个端口转发到多个端口,linux,port,iptables,forwarding,splice,Linux,Port,Iptables,Forwarding,Splice,在基于Linux的系统上,我需要TCP端口上传入的数据自动重定向到其他50个本地端口,而无需通过用户空间的send/recv。每个端口都需要接收所有传入流量的副本。所有端口都是同一台机器的本地端口 由于一个端点是一个文件的限制,我已经放弃了splicesyscall。我想,iptables是用于此目的的正确工具,但我无法找到用于此目的的正确语法。它应该类似于: iptables -t nat -A PREROUTING -p tcp --dport <in_port> -j REDI
splice
syscall。我想,iptables
是用于此目的的正确工具,但我无法找到用于此目的的正确语法。它应该类似于:
iptables -t nat -A PREROUTING -p tcp --dport <in_port> -j REDIRECT --to-ports <out_port1>-<out_port50>
iptables-t nat-A预路由-p tcp-dport-j重定向-到端口-
例如,我想知道是否需要选项
-m multiport
我的第一个猜测是使用iptablesTEE
target,但是。我想我应该使用——match multiport
…嗯。。。实际上,使用TEE
来破坏目标端口可能会起作用,但是为端点使用常规TCP套接字(而不是原始套接字)可能不会起作用。我认为您无法为此编写用户空间应用程序。您可以使用tee
(man2tee
)系统调用。你看到了吗?是的。不幸的是,splice
在TCP套接字上工作,但另一个端点不能是套接字(例如,它必须是文件/管道)。