使用 iptables 将除一个端口之外的所有内容重新路由到另一台服务器

使用 iptables 将除一个端口之外的所有内容重新路由到另一台服务器

我已经转移到一个新的网络服务器,现在我将所有流量重定向到新服务器

echo "1" > /proc/sys/net/ipv4/ip_forward
#clear old rules:
iptables -F
iptables -t nat -F
#masquerade and redirect everything:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A PREROUTING -i eth0 -d 1.1.1.1 -j DNAT --to-destination 2.2.2.2

直到所有 DNS 条目都广泛传播之前,它工作得很好。但现在我无法再登录旧机器了。

如何在旧服务器 1.1.1.1 上保持打开 SSH 端口?

答案1

在 iptables 中,第一个匹配的规则获胜。因此,规则的正确排序很重要。

在这种情况下,必须制定对端口 22 的流量进行处理的规则规定如何处理“其他一切”的规则。虽然如果链的策略与默认值相同,则 RETURN 会起作用,但明确地使用 ACCEPT 作为“正常处理”的同义词可能会更清楚:

echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A PREROUTING -i eth0 -m tcp -p tcp --dport 22 -j ACCEPT
iptables -t nat -A PREROUTING -i eth0 -d 1.1.1.1 -j DNAT --to-destination 2.2.2.2

相关内容