使用 iptables 转发数据包

使用 iptables 转发数据包

我想将所有进入 10.32.43.75:80 的端口转发到 10.48.5.66:80

我如何使用 10.32.43.75 中的 iptables 来实现这一点?

我尝试了这个,但是没有用:

iptables -A PREROUTING -t nat -i ens33 -p tcp --dport -j DNAT --to 10.48.5.66:80

iptables -A FORWARD -p tcp -d 10.48.5.66 --dport 80 -j ACCEPT

答案1

您的设置中的问题是数据包的源地址保持不变。以下是数据包流的示例,其中客户端是 192.168.100.100:

  1. 客户端的数据包(源为 192.168.100.100)到达 10.32.43.75 端口 80。数据包的源地址是 192.168.100.100,目的地是 10.32.43.75。
  2. IPTables 执行目标 NAT,将目标更改为 10.48.5.66。数据包的源地址是 192.168.100.100,目标地址是 10.48.5.66。
  3. 数据包被转发到10.48.5.66。它向192.168.100.100发送响应数据包。响应数据包的源地址为10.48.5.66,目标地址为192.168.100.100。
  4. 响应数据包到达客户端。但是,由于原始数据包发送到 10.32.43.75,源地址 10.48.5.66 不符合客户端的期望,因此数据包被丢弃。

解决方案是添加MASQUERADE规则,将源 IP 地址更改为10.32.43.75端口转发的数据包:

iptables -t nat -A POSTROUTING -d 10.48.5.66 -p tcp --dport 80 -j MASQUERADE

相关内容