Go to content Go to menu Go to search

Как сделать тоннель ssh (проброс порта) и автоматический перезапуск тоннеля ssh (persistent ssh tunn

Делаем тоннель ssh

Необходимо организовать проброс порта с одного сервера на другой (при этом возможности использовать iptables и dst-nat нет). Для проброса порта будем использовать ssh-туннель. Пробрасывать будем порт 80. Имеем серверы 10.0.1.11 и 192.168.1.86 (связаны через IPSec). Необходимо, что бы при обращении на 10.0.1.11:80 все пакеты прозрачно перенаправлялись на 92.168.1.86:80

Для этого на 10.0.1.11 будем использовать команду:

ssh -g -f -N -L 80:localhost:80 root@192.168.1.86

Где:
-g заставляет открывать порт на внешнем интерфейсе (в противном случает будет слушаться только localhost)
-f – заставляет ssh запускаться в фоновом режиме.
-N – не запускать ничего на удаленном хосте – только проброс порта (без этой опции запустится bash)

Вариант команды на 192.168.1.86:

ssh -g -f -N -R 80:10.0.1.11:80 root@10.0.1.11

Проверить открыт ли порт:

netstat -alnp | grep :80 | grep LISTEN

Автоматический перезапуск тоннеля.

К сожалению, если произошел срыв тоннеля (например из за потери пакета), то ssh просто закрывается и тоннель не восстанавливается. Для решения проблемы есть программа autossh, которая запускает ssh, и в случае его смерти, перезапускает по новой. Выглядит это следующим образом (на стороне 10.0.1.11 эту команду стоит положить в файл /etc/rc.local для запуска тоннеля сразу после загрузки сервера):

autossh -f -M 0 root@192.168.1.86 -L 80:localhost:80 -N

Где -M 0 говорит о том, что мы не хотим мониторить состояние соединения между хостами, а будем мониторить только тот факт, что запущен ssh.
-f – фоновый режим

Использование autossh для поддержания терминального соединения по ssh

Вообще autossh предназначен не столько для поддержания тоннеля сколько для автоматического перезапуска ssh при работе на плохом канале. Дело в том, что если произошла потеря пакета, в то время как вы были подключены удаленно к серверу по ssh, то ваш терминал ssh тупо зависает и висит пока не отработает таймаут, выставленный в настройках ssh. Autossh умеет проверять жив ли канал, и быстренько перезапускать ssh. Для этого autossh при запуске ssh создает дополнительно ssh-тоннель и передает сама себе через этот тоннель пакеты, как только пакеты перестают проходить – тут же происходит перезапуск ssh. Если добавить к этому делу еще и screen, то получится, что плохой канал будет минимально влиять на нашу работу. Как это сделать на практике – напишу позже как появится время..


при публикации материалов с данного сайта обратная ссылка на сайт обязательна.
valynkin.ru © no rights reserved