-
Notifications
You must be signed in to change notification settings - Fork 7
sshtunnel
Здесь мы рассматриваем построение сетевых туннелей через ssh
. Типичный пример: когда надо сделать так, чтобы рабочий компьютер было видно с домашнего, при условии, что они оба за NAT.
С использованием промежуточного сервера с IP=8.8.8.8 последовательность действий будет такой:
-
Сначала на рабочей машине необходимо поставить ssh-демона:
sudo aptitude install ssh
подробнее здесь.
-
Затем, в консоли рабочей машины, пробрасываем туннель до сервера (промежуточная машина, не за NAT)
ssh -fCNR 2222:localhost:22 andyceo@8.8.8.8
Промежуточный сервер спросит пароль пользователя, и после этого от его имени установит обратное ssh-соединение с рабочей машиной.
-
На домашней машине логинимся на сервак:
ssh andyceo@8.8.8.8
-
И будучи уже на сервере, набираем:
ssh -p2222 localhost
после этого
ssh
нас спросит пароль на рабочей машине. Все!
Допустим, у нас есть сервер, который стоит в офисе. На нем установлен сайт http://example.com/, который доступен только из локальной сети (локальный IP сервера - 192.168.1.1). Т.е. на сайт нельзя зайти из интернета, только из офиса. Трафик из внешней сети на порт 80 запрещен через iptables.
Можно следующим образом пробить туннель:
nc -z localhost 8080 || ssh -f -N -L localhost:8080:192.168.1.1:80 -c blowfish example.com
Эту строчку можно поставить в crontab
, и тоннель будет восстанавливаться всякий раз, когда соединение по какой-либо причине пропадет.
Также, нужно прописать в /etc/hosts
следующую строку:
127.0.0.1 example.com
для того, чтобы при обращении в браузере по адресу http://example.com/, браузер запрашивал наш локальный туннель.
После этого, можно зайти на сайт на продакшене следующим образом: http://example.com:8080/
Либо, можно у себя и на сервере настроить виртуальный хост (alias) вида example.local, который будет хоститься в локалхосте или внутренней сети, тогда в /etc/hosts
нужно будет прописать
127.0.0.1 example.local
и заходить на сайт следующим образом: http://example.local:8080/
- -R - обратное соединение, основная опция
- -C - компрессия
- -N - не выполнять удаленную команду. Удобно только для проброса портов (только протокол версии 2)
- -f - убирает ssh в фоновое выполнение, сразу по старту (удобно, чтобы не занимать терминал)
Автор решения и бессменный вдоховитель - Александр Графов, axel@drupal.ru
PS: дополнительная информация:
В файл конфига /etc/ssh/ssh_config
нужно добавить следующие строки (в конец файла), чтобы на клиенте не появлялось сообщение об ошибке broken pipe
:
TCPKeepAlive yes
ServerAliveInterval 30
ServerAliveCountMax 3
TCPKeepAlive yes
ServerAliveInterval 30
ServerAliveCountMax 3
PPS:
ssh-keygen -H -F [localhost]:2221
ssh-keygen -R [localhost]:2221 --- осторожно!
Footer is under construction
Sidebar is under construction