SSH Туннель
Введение | |
Создать SSH туннель | |
Демонстрация работы туннеля | |
Список всех открытых SSH туннелей | |
Закрыть все SSH туннели |
Введение
Туннелирование (от англ. tunnelling — «прокладка туннеля») в компьютерных сетях — процесс, в ходе которого создаётся логическое соединение
между двумя конечными точками посредством инкапсуляции различных протоколов.
Туннелирование представляет собой метод построения сетей, при котором один сетевой протокол инкапсулируется в другой.
От обычных многоуровневых сетевых моделей (таких как OSI или TCP/IP) туннелирование отличается тем, что инкапсулируемый протокол относится к тому же или более низкому уровню, чем используемый в качестве туннеля.
Суть туннелирования состоит в том, чтобы «упаковать» передаваемую порцию данных, вместе со служебными полями, в область полезной нагрузки пакета несущего протокола. Туннелирование может применяться на сетевом и на прикладном уровнях. Комбинация туннелирования и шифрования позволяет реализовать закрытые виртуальные частные сети (VPN). Туннелирование обычно применяется для согласования транспортных протоколов либо для создания защищённого соединения между узлами сети.
Пример
Создать туннель можно следующей командой. Замените адреса и порты на нужные вам. Подробности в следюущем параграфе .
ssh -L 9119:192.168.0.2:9200 username@192.168.0.2
Создать SSH туннель
Туннели обычно создают для перенаправления траффика. SSH tunnel это то же самое что и SSH port forwarding.
Допустим вы хотите направить траффик со своего localhost (127.0.0.1) на
удалённый
хост 192.168.0.2.
На
удалённом
хосте у вас есть пользователь с именем andrei и вы знаете его пароль.
Сперва нужно определиться с портами на локальном хосте и на удалённом.
Предположим, вы выбрали 9119 для локального и
9200 для
удаленного
хостов.
То есть вы хотите, чтобы всё, что идёт на localhost:9119 было перенаправлено на
192.168.0.2:9200
Выполните
ssh -L localhost:9119:192.168.0.2:9200 andrei@192.168.0.2
localhost: можно не указывать явно. Он подразумевается по умолчанию, но для простоты запоминания можно оставлять.
ssh -L 9119:192.168.0.2:9200 andrei@192.168.0.2
The authenticity of host '192.168.0.2 (192.168.0.2)' can't be established.
ECDA …
…
andrei@192.168.0.2's password:
Last login: Sun Jan 31 13:23:00 2021
Проверьте ip выполнив
ip a
Если вам нужен туннель с поддержкой графического интерфейса X Window System используйте флаг -X
ssh -X -L 9119:192.168.0.2:9200 andrei@192.168.0.2
Демонстрация
Туннель создан, не закрывайте терминал. Откройте два новых терминала или две новые вкладки в старом.
У вас два пустых терминала, оба на локальном хосте. Назовём их 1 и 2.
Из терминала 2 подключимся к удалённому хосту 192.168.0.2 по ssh и будем
слушать на порту 9200 с помощью ncat
ssh andrei@192.168.0.2
ncat -l 9200
На терминале 1 с помощью ncat отправим сообщение на порт 9119 локального хоста. Это тот порт, который мы настроили на проброс.
ncat localhost 9119
Введём любой текст
heihei.ru
Откройте терминал 2 там дожен появиться тот же текст
heihei.ru
Список всех открытых SSH туннелей
Чтобы получить список туннелей открытых именно ssh выполните
sudo lsof -i -n | egrep '\<ssh\>'
ssh 14695 andrei 3u IPv4 230080 0t0 TCP 192.168.0.1:46356->192.168.0.2:ssh (ESTABLISHED) ssh 14695 andrei 4u IPv6 230103 0t0 TCP [::1]:9119 (LISTEN) ssh 14695 andrei 5u IPv4 230104 0t0 TCP 127.0.0.1:9119 (LISTEN)
Вывод этой команды при практически идентичных условиях почему-то разный.
Ниже пример второго варианта. Если вы знаете почему так получается - напишите в комментариях.
ssh 15151 andrei 3u IPv4 239364 0t0 TCP 192.168.0.1:46464->192.168.0.2:ssh (ESTABLISHED) ssh 15151 andrei 4u IPv6 239380 0t0 TCP [::1]:mxit (LISTEN) ssh 15151 andrei 5u IPv4 239381 0t0 TCP 127.0.0.1:mxit (LISTEN) ssh 15151 andrei 9u IPv6 239428 0t0 TCP [::1]:mxit->[::1]:54306 (ESTABLISHED)
Закрыть все SSH туннели
Чтобы закрыть всё, что связано с ssh можно выполнить
sudo killall ssh sshd
Этот метод хорош только если вы работаете один, например на какой-то виртуальной машине.
Автор статьи: Андрей ОлеговичSSH | |
SSH туннель | |
SSH сертификаты | |
Ошибки SSH | |
Linux | |
Bash | |
Настройка сети | |
sudo | |
SCP: обмен файлами; | |
C | |
C++ | |
Сети | |
Кибербезопасность | |
SSH в Windows | |
Telnet | |
RDP через SSH |