Болеемс… давно меня простуда не настигала. Воспользуюсь случаем и напишу как можно получить доступ к любому ресурсу за NATом(фаерволом), даже если порты не проброшены!!!
До недавнего времени я не верил в такого рода магиию… как оказалось все в нашем мире возможно, просто нужно было подойти к проблеме с другой стороны 🙂
но как и везде есть свои недостатки… один белый ИП нам понадобиться(клиенту!!)
Идея заключается в том, что тунель мы строим на компе который находиться ЗА NATом(фаерволом), те он подключается к клиенту с белым IP, и уже тот подключаясь к себе…, собственно кому интересно милости просим
1. Строим тунель к клиенту с белым ипом
ssh -f -N -R 2222:localhost:22 username@client_real_IP
Естественно username должен существовать в системе
2. На клиенте с белым IP вводим
ssh -p2222 localhost
БИНГО!!
Дальше больше, не sshем единым
ssh -f -N -R 2080:localhost:80 username@client_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 user@server
VNC-server host: ssh -R 4897:localhost:4899 user@server
В нашем случае есть комп с белым ипом(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, но это все от лукавого 🙂