单接口 Iptables 转发

单接口 Iptables 转发

是否可以将Iptables所有流向特定网络的流量转发到给定的 IP 地址?

我必须Ubuntu server在网络中充当路由器192.168.1.0/24。就是IP这样192.168.1.254。(此“路由器”只有一个网络接口eth0。)

网络上的客户端192.168.1.0/24设置了以下静态路由:

Network      Mask           Gateway
172.16.1.0  255.255.255.0  192.168.1.254

这样,客户端就可以将流量发送172.16.1.0到我的路由器。

我想通过路由器将流量重定向172.16.1.0至 ip 192.168.2.254

我不想进行地址转换,设备上192.168.2.254应该看到来自客户端的流量,而不是来自路由器的流量192.168.1.254

(这看起来可能相当复杂,因为我无法控制这些网络之间的设备。这就是为什么我在我的网络内部创建新的路由器,而不是在连接这些网络的路由器上添加新路由。)

我已启用 IP 转发sysctl.conf

我尝试过这种Iptables配置:

获取需要路由的包:

Chain PREROUTING (policy ACCEPT)
target     prot opt source               destination
DNAT       all  --  anywhere             172.16.1.0/24      to:192.168.2.254

将这些包转发至目标:

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             192.168.2.254            

但这似乎并没有起到什么作用。

答案1

如果您想从源向目的地发送流量,您需要使用static routesiptablesIptables您接受或拒绝任何通过您机器的流量,但它不会重定向任何数据。

为了实现您的目的,您可以在 Ubuntu 服务器路由器中尝试以下路由192.168.1.254

ip route add 172.16.1.0/24 via 192.168.2.254

这不应该对路由数据包进行任何 NAT。

答案2

最后我通过将第二个网络接口连接到路由器设备解决了这个问题。我配置了第二个接口来连接其他网络。

然后我使用ip route add命令创建了到我的虚拟网络的新静态路由。

相关内容