是否可以将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 routes
。iptables
让Iptables
您接受或拒绝任何通过您机器的流量,但它不会重定向任何数据。
为了实现您的目的,您可以在 Ubuntu 服务器路由器中尝试以下路由192.168.1.254
:
ip route add 172.16.1.0/24 via 192.168.2.254
这不应该对路由数据包进行任何 NAT。
答案2
最后我通过将第二个网络接口连接到路由器设备解决了这个问题。我配置了第二个接口来连接其他网络。
然后我使用ip route add
命令创建了到我的虚拟网络的新静态路由。