使用iptables将httpstream量转发到另一个ip地址

我们希望将所有httpstream量转发到Amazon EC2库存Linux机器上的另一个IP地址(基于CentOS)。 我知道如何用代理规则和Apache来做到这一点,但我认为iptables会是一个更快的解决scheme(可能不是!)

命令

 sudo iptables -P INPUT ACCEPT
 sudo iptables -F
 sudo iptables -A PREROUTING -t nat -p tcp -i eth0 --dport 80 -j DNAT  - 到208.68.208.81:80
 sudo iptables -A FORWARD -p tcp -d 208.68.208.81 --dport 80 -j ACCEPT

iptables -t nat -L -v -n

链PREROUTING(策略接受0包,0字节)
  pkts字节目标人选退出源目的地
     0 0 DNAT tcp  -  eth0 * 0.0.0.0/0 0.0.0.0/0 tcp dpt:80 to:208.68.208.81:80

链INPUT(策略ACCEPT 0包,0字节)
  pkts字节目标人选退出源目的地

链OUTPUT(策略ACCEPT 11包,820字节)
  pkts字节目标人选退出源目的地

链POSTROUTING(策略ACCEPT 11个数据包,820个字节)
  pkts字节目标人选退出源目的地

iptables -L -v -n

链INPUT(策略ACCEPT 202包,15705字节)
  pkts字节目标人选退出源目的地

链FORWARD(策略接受0包,0字节)
  pkts字节目标人选退出源目的地
     0 0 ACCEPT tcp  -  * * 0.0.0.0/0 208.68.208.81 tcp dpt:80

链OUTPUT(策略ACCEPT 145包,13747字节)
  pkts字节目标人选退出源目的地

http://208.68.208.81到一个networking浏览器的作品,但是当我尝试使用这个configuration的EC2机器的IP地址,我得到一个超时。 我看到一些数据包显示与watch -d iptables -t nat -L -v -n

帮帮我!

更新:添加-i eth0到PREROUTING规则

有三个潜在的问题,我看到(另一个答案,我没有看到任何会导致“循环”,即使在未经编辑的版本的问题)。

  1. IP转发必须启用。
  2. 在natted和放回networking后,数据包可能成为源地址过滤的受害者,因为它看起来非常像一个欺骗数据包。
  3. 对经过NAT的数据包的响应必须经过相同的NAT,以便执行反向转换。 否则,客户端将得到一个错误的源IP /端口的响应,如果它没有被反向path过滤掉的话,它可能会丢弃。

除了DNAT之外,您还可以使用SNAT或MASQURADE规则来处理第2和第3点,但是如果这样做,则会丢失stream量的原始源IP。 这将使滥用控制非常困难。

第二点和第三点的另一个解决scheme是在两台服务器之间build立一个VPN。 然后使用DNAT通过VPN和基于源IP的路由来转发stream量,以将回复带回到NAT。

你已经创build了一个循环。 确保你添加到PREROUTING规则的接口(例如。 -i eth1或其他)。

您可能还需要这样的规则:

 Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination 45M 3723M MASQUERADE all -- * WAN_IF 0.0.0.0/0 0.0.0.0/0 

否则,数据包将直接从他们被转发的机器回到客户端,我想,这不会期望他们从那个主机。

您可以使用rinetd来简单地转发您的IPstream量。