Назад | Перейти на главную страницу

Перенаправить SSH на другой хост

У меня есть сервер Ubuntu, который виден из Интернета, назовем его «перемычкой». И этот сервер имеет это имя на самом деле, потому что мне нужно, чтобы всякий раз, когда пользователь SSH этот сервер, он перескакивает (или пересылает или перенаправляет) соединение SSH на другой сервер (который не виден из Интернета), поэтому SSH фактически на невидимый сервер . Также мне нужно сделать это именно с помощью iptables.


Что я пробовал (на джемпере)

iptables -t nat -A PREROUTING -d ${jumper_ip} -p tcp --dport 22 -j DNAT --to-destination ${invisibleserver_ip}
iptables -t nat -A POSTROUTING -s ${invisibleserver_ip} -p tcp --sport 22 -j SNAT --to-source ${jumper_ip}
iptables -A FORWARD -p tcp ${invisibleserver_ip} --dport 22 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

Да, на ядре включена переадресация IP.

Эта проблема

Когда я использую SSH-узел перемычки, ничего не происходит. Выдается сообщение "Превышено время ожидания соединения". Любая идея?
Спасибо всем за ответы.

Твой первый iptables Правило является правильным и достаточным для выполнения работы. Я бы рассмотрел возможность явного указания входящего интерфейса, такого как:

iptables -t nat -A PREROUTING -i ${wan_if} -d ${jumper_ip} -p tcp --dport 22 -j DNAT --to-destination ${invisibleserver_ip}

Но этого не требуется. Ваш POSTROUTING правило немного ошибочно. Я не думаю, что это что-нибудь сломает. Но лучше убрать. Это применимо, когда клиент работает на порту 22, что не относится к SSH.

В FORWARD правило полностью избыточно, если вы не внесли другие изменения, о которых вы нам не сообщили. Политика по умолчанию: ACCEPT. Единое правило с ACCEPT и политика по умолчанию ACCEPT приведет к тому, что все пакеты будут приняты независимо от того, соответствует ли пакет критериям. Так что вы можете просто удалить это правило и полагаться на значение по умолчанию ACCEPT политика.

Ничто из этого не объясняет, что вызывает проблему. Причин тому двоякое. Вы не объяснили, с какой проблемой вы столкнулись, и не упомянули все важные детали вашей конфигурации, чтобы определить настоящую причину.

Однако я могу сделать несколько вероятных предположений:

  • Вы не включили пересылку пакетов.
  • Ваша маршрутизация настроена таким образом, что через ваш сервер переходов проходят только пакеты в одном направлении.
  • Пакеты отбрасываются по другим правилам, которые вы пропустили в своем вопросе.

Сначала убедитесь, что пересылка включена, набрав:

cat /proc/sys/net/ipv4/ip_forward

Если он отключен, вы можете включить его, набрав:

echo 1 >/proc/sys/net/ipv4/ip_forward

И если это решит проблему, вы можете сделать ее постоянной, обновив /etc/sysctl.conf.

Если ваша маршрутизация настроена так, что возвращаемые пакеты не маршрутизируются через ваш узел перехода, вы можете добавить SNAT Правило для вашего POSTROUTING цепочка, которая должна применяться к тем же пакетам SYN, которые только что были обработаны вашим DNAT правило.

Если вы хотите знать о потенциальных недостатках использования DNAT для этого и некоторые альтернативы. у меня есть ответил похожий вопрос в прошлом.

Если проблема вызвана дополнительными правилами iptables, которые вы не упомянули в своем вопросе, вам необходимо удалить или исправить эти правила. Очевидно, я не могу более подробно рассказать об этом, не зная содержания и цели этих правил - если таковые имеются.