使用 iptables 进行 IP 到 IP 转发

使用 iptables 进行 IP 到 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 作为 Web 服务器。

我想将所有仍到达服务器 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 上的内容。我做错了什么?

答案1

尝试更改-s 1.1.1.1-d 1.1.1.1

您想要匹配目标地址而不是源地址......

您还需要调整 MASQUERADE 规则以包含流量返回时所采用的接口。(最有可能是 eth0 或类似接口)。

使用 -o 标志执行此操作。例如:iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

答案2

两台机器是否在同一个子网中,并且无需通过其他路由器即可互相访问?如果不是,即使您正确设置,所述方法也不会起作用。

在进行此类迁移时,我经常使用rinetd转发随机 TCP 端口。或者 Apache 的 mod_proxy,如果你使用 Apache 的话(你不用,但我用)。

相关内容