我有 2 个服务器。ip 为 1.1.1.1 的服务器 1 和 ip 为 2.2.2.2 的服务器 2
我的域 example.com 目前指向 1.1.1.1,但很快我将切换到 ip 2.2.2.2。我已经为域example.com设置了低TTL,但是在我更改域的ip地址后,有些人仍然会点击旧的ip a。
现在两台机器都运行带有 iptables 和 nginx 作为网络服务器的 centos 5.8。
我想将仍然访问服务器 1.1.1.1 的所有流量转发到 2.2.2.2,这样就不会有任何停机时间。
现在我找到了这个教程: http: //www.debuntu.org/how-to-redirecting-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 规则以包括流量在返回途中采用的接口。(很可能是 eth0 或类似的)。
使用 -o 标志执行此操作。例如像这样:iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
两台机器是否在同一个子网中并且可以不通过其他路由器就可以相互访问?否则,即使您正确设置,所描述的方法也不会起作用。
在进行此类迁移时,我经常使用rinetd转发随机 TCP 端口。或者 Apache 的 mod_proxy,如果你无论如何都使用 Apache(你不用,但我用)。