
Я переехал на новый веб-сервер и теперь перенаправляю весь трафик на новый сервер с помощью
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 не будут широко распространены. Но теперь я больше не могу войти в старую машину.
Как оставить открытым порт SSH на старом сервере 1.1.1.1?
решение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