Переслать 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 хост перемычки, ничего не происходит. "Время ожидания истекло". Любая идея?
Спасибо всем за ваши ответы.
1 ответ
Ты первый 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, которые вы не упомянули в своем вопросе, вам необходимо удалить или исправить эти правила. Очевидно, что я не могу предоставить более подробную информацию об этом, не зная содержания и цели этих правил - если таковые имеются.