SSH-тунель

Болеемс… давно меня простуда не настигала. Воспользуюсь случаем и напишу как можно получить доступ к любому ресурсу за NATом(фаерволом), даже если порты не проброшены!!!
До недавнего времени я не верил в такого рода магиию… как оказалось все в нашем мире возможно, просто нужно было подойти к проблеме с другой стороны 🙂
но как и везде есть свои недостатки… один белый ИП нам понадобиться(клиенту!!)
Идея заключается в том, что тунель мы строим на компе который находиться ЗА NATом(фаерволом), те он подключается к клиенту с белым IP, и уже тот подключаясь к себе…, собственно кому интересно милости просим

1. Строим тунель к клиенту с белым ипом

ssh -f -N -R 2222:localhost:22 [email protected]_real_IP

Естественно username должен существовать в системе
2. На клиенте с белым IP вводим

ssh -p2222 localhost

БИНГО!!

Дальше больше, не sshем единым

ssh -f -N -R 2080:localhost:80 [email protected]_real_IP

Введя на хосте клиента

w3m -dump http://localhost:2080

получим дамп web-ресурса на нашем хосте который спрятался за фаерволом или натом

Но и это еще не все, Тунель из мира в сеть:
Вводим на своем компе:

ssh -f -N -L 4080:192.168.0.10:80 [email protected]

Аналогично, вводим на своём хосте:

w3m -dump http://localhost:4080

и получаем доступ к web-ресурсу узла 192.168.0.10, который находится за хостом 88.77.66.55(натит нашу серую сеточку 192.168.0/24).
Не забывайте, что тунели по таймауту отключаются 🙂
или autossh или keepalive в помощь

А теперь самое веселое
понадобилось соединить два компа из-за NAT’ов по VNC 🙂
VNC-client host: ssh -L 4896:localhost:4897 [email protected]
VNC-server host: ssh -R 4897:localhost:4899 [email protected]
В нашем случае есть комп с белым ипом(server)
VNC server настраиваем слушать на localhost:4899,
VNC client — коннектиться на localhost:4896.

Такие вещи можно проделывать и с помощью винды:
putty — ssh клиент
plink — CLI Putty
MyEnTunnel — для поддержания активного туннеля http://nemesis2.qx.net/pages/MyEnTunnel
Литература:
man ssh

Addon1:
Меняем стандартный шелл на самописный:)
1. В файлике /etc/shells добавляем строку с полным путем к нашему нестандартному шелу(для примера буду использовать /usr/bin/passwd).
2. Сохраняем
3. Создаем нового пользователя с помощью команды adduser
4. Во время создания когда спросят какой шелл хотим, смело выбирайте passwd(да, у нас появиться такой пунктик:))))
Можно конечно и поменять шелку у текущего, никто Вам этого не запрещает, в моем случае создавался новый пользователь.

З.Ы. Если Вы дочитали до этого момента… есть более элегантные методы построения ПОЛНОЦЕННЫХ L3 тунелей через SSH, но это все от лукавого 🙂

Комментарии: