IP到iptables的IP转发

我有2台服务器。 服务器1与ip 1.1.1.1和服务器2与ip 2.2.2.2

我的域example.com目前指向1.1.1.1,但很快我要切换到IP 2.2.2.2。 我已经为域example.com设置了一个较低的TTL,但是在更改域的IP地址后,仍然会有一些人击中旧的IP。

现在这两台机器运行CentOS 5.8 iptables和nginx作为networking服务器。

我想将所有还在服务器1.1.1.1的stream量转发到2.2.2.2,这样就不会有任何停机。

现在我发现这个教程: http : //www.debuntu.org/how-to-redire-network-traffic-a-new-ip-using-iptables,但我似乎无法得到它的工作。

我启用了IP转发: echo "1" > /proc/sys/net/ipv4/ip_forward

之后,我跑了这两个命令:

 /sbin/iptables -t nat -A PREROUTING -s 1.1.1.1 -p tcp --dport 80 -j DNAT --to-destination 2.2.2.2:80 /sbin/iptables -t nat -A POSTROUTING -j MASQUERADE 

但是当我在浏览器中加载http://1.1.1.1时,我仍然得到了1.1.1.1上的页面,而不是2.2.2.2中的内容。 我究竟做错了什么?

尝试更改-s 1.1.1.1-d 1.1.1.1

你想匹配的目的地址,而不是源地址…

您还需要调整您的MASQUERADE规则,以包含stream量在返回时所使用的界面。 (很可能是eth0或类似的)。

用-o标志来做到这一点。 例如像这样:iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

两台机器是否在同一个子网中,并且可以在不经过其他路由器的情况下互相访问? 如果没有,即使设置正确,所描述的方法也不起作用。

在进行这种迁移时,我经常使用rinetd来转发随机的TCP端口。 或者Apache的mod_proxy,如果你使用Apache无论如何(你不这样做,但我这样做)。