使用 Linux 进行流量重定向?(中间人)

使用 Linux 进行流量重定向?(中间人)

我有以下场景:

我有一台带两个网卡的 Linux 机器,所有网络流量都通过一个网卡进入,然后通过另一个网卡出去。所以基本上我已经是中间人了。

但现在,我想将所有目标 IP 地址为“xyz”且目标端口 500 的流量重定向到我的本地机器上的端口 500,我自己的守护进程正在该机器上运行。然后,在某个事件发生之后,我想停止重定向(通过删除规则等)并让流量像所有其他流量一样通过。

我想知道我是否可以使用 iptables 或 Linux 中已包含的其他工具来执行此操作?到目前为止,我还没有找到可行的解决方案。我在以 root 身份从使用 调用的 shell 脚本运行命令时也遇到了问题system()。即使我将脚本的所有权和权限更改为 root,它也不会以 root 身份启动。我想使用 shellscript 来撤销重定向(当我设法使其工作时)。

答案1

这是你使用 iptables 执行操作的方法:

sysctl net.ipv4.ip_forward=1
iptables -t nat -A PREROUTING -p tcp -d x.x.x.x --dport 500 -j DNAT --to-destination 127.0.0.1:500
iptables -t nat -A POSTROUTING -j MASQUERADE

至于您的 shell 脚本问题,您要么必须 setuid 脚本(坏主意),要么使用popen()运行sudo /path/to/yourscript和配置 sudo 以允许运行 C 程序的用户执行此操作。

答案2

您应该能够使用 nat 表中的 iptables 规则和 PREROUTING 更改来执行此操作。如下所示:

iptables -t nat -A PREROUTING -d xyz -p tcp --dport 500 -j DNAT --to-destination zyx:1111

这是假设您已通过 sysctl 启用了 ipv4 转发,我假设您已经启用了,因为流量已经通过路由器。

我目前无法测试这一点,但这应该是一个很好的起点。

相关内容