我们希望将所有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规则
有三个潜在的问题,我看到(另一个答案,我没有看到任何会导致“循环”,即使在未经编辑的版本的问题)。
除了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量。