iptablesを使用して、1つのポート以外のすべてを別のサーバーに再ルーティングします。

iptablesを使用して、1つのポート以外のすべてを別のサーバーに再ルーティングします。

私は新しいウェブサーバーに移行し、すべてのトラフィックを新しいサーバーにリダイレクトしています。

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

関連情報