Pull to refresh

Comments 80

Написано хорошо — без воды и мусора, что сейчас редкость :)
Спасибо.
Ну, я бы сказал вообще по-спартански ;) Не помешало бы парочку схемок.
Схемок чего?
Адреса 192.168.0.10, 10.11.12.13 и 10.11.12.14 используемые в примерах входят в диапазон сетей RFC1918, т.е. являются приватными, а следовательно находятся за NAT'ом внутри локальной сети.
Адреса 99.88.77.66 и 88.77.66.55, в свою очередь, в диапазон сетей определённых RFC1918 не входят, следовательно являются примерами хостов в сети Интернет.
Хотя проброс портов конечно-же можно использовать и внутри одного широковещательного домена, просто для обеспечения безопасного соединения (например туннелирование незащищённого VNC внутри ssh-потока).
A autossh разве не решает задач поддерживания туннеля в поднятом состоянии?
Возможно. Но, скажу честно, до этого момента я даже не подозревал о существовании такого пакета ;)
$ aptitude search autossh
p   autossh   - Automatically restart SSH sessions and tunnels

Хотя, с другой стороны, проблема ведь не настолько сложно решается руками при помощи cron'а, да и кипалив нам в помощь :)
Не сложно конечно, но одно дело три строчки, другое дело — одна ;)
Ну, походу это скорее вопрос религиозных убеждений :)
Самое интересное началось, когда мне понадобилось соединить два компа из-за NAT'ов по VNC :)
VNC-client host: ssh -L 4896:localhost:4897 user@server
VNC-server host: ssh -R 4897:localhost:4899 user@server
, VNC server настраиваем слушать на localhost:4899, VNC client — коннектиться на localhost:4896. Ну, и так далее, до упора можно накидывать узлы.
Да. Спасибо.
Об этом я как-то не сказал, так как подразумевал, что экспериментаторы не перевелись на земле русской :)
Но это правда, вложений портов, так сказать, вглубь может быть много.
Естественно, что при этом придётся учитывать то, что ip-пакеты будут расти в объёме и всё чаще и всё сильнее фрагментироваться, что может в итоге сказаться на производительности в целом.
UFO just landed and posted this here
Для полноты картины не хватает упомянуть, что у Windows пользователей тоже есть возможность пробрасывать порты через ssh туннели с помощью Putty.
В принципе, можно ей же и под линуксом делать туннели, бывает проще незнакомому человеку объяснить куда тыкнуть в гуишной программе, чем в консоли, по опыту :)
и когда это интересно Putty портировали под Linux? про вайн не надо :)
под линукс есть графическая утилита gstm
UFO just landed and posted this here
Очень многие пользователи не могут правильно набрать продиктованный по буквам (причем ни английским, ни латинским) адрес e-mail или www. Но при этом вполне воспринимают на слух слова, которые видят на экране (или на бумаге, не суть) перед собой и в состоянии кликнуть по ним мышкой.

По мне так проще сказать по телефону «нажмите Пуск, а потом Блокнот», чем диктовать (причем после «Нажмите Пуск, а потом Выполнить») «Эн английская, как номер; о; тэ; е русская; пэ английская, как русская эр; а русская; дэ» и то не будучи увереным, что все правильно наберут да еще догадаются нажать Enter.
UFO just landed and posted this here
Вообще я отвечал на конкретный коммент вне контекста статьи или PuTTY (а вообще под виндой предпочитаю Tunnelier для работы по ssh). Если был не прав — извините.
UFO just landed and posted this here
Фонетический алфавит вам в помощи когда GUI нету, или для e-mail или www. Если конечно пользователь поймет о чем вы… На практике в 8 из десяти случаев кнопочками получается лучше и быстрее.
Я думаю те, кому это нужно, и сами это знают :)
Могу еще добавить, что туннели удобно и просто делать с помощью putty
Можно было бы и по-подробнее.
> $ ssh -f -N -R 2222:10.11.12.13:22 username@99.88.77.66
Это где нужно делать?
Что за хост 10.11.12.13? Что за магические числа: 22 и 2222?

> теперь введя на хосте 99.88.77.66:
>
> $ ssh -p2222 localhost
И зачем это? Не проще ли в данном случае устанавливать соединение со стороны 99.88.77.66? Если нет, объясните почему (подозреваю, что NAT или firewall)?

Уж очень сжато. Если вы пытаетесь этой статьёй помочь начинающим, боюсь, не поможете. А остальные, думается мне, и без этой статьи разберутся.

PS. Я-то понял суть, но мне это уже не ново, а вот о новичках можно было б и позаботиться.
> а вот о новичках можно было б и позаботиться
Позволю не согласиться.
Пищи для размышлений тут более чем достаточно.
Это скорее послужит тем-же новичкам как сжатый и лаконичный справочник.
А если хотят изучить теорию — есть man'ы, есть google и т.д.
Если всю пищу новичкам класть готовой в рот — они никогда не научатся готовить. ;)
Хотя… Хотя это лишь моё имхо. Возможно я и не прав. :(
Ну, мне кажется, тогда можно было бы написать ещё более лаконичную статью:
SSH-туннели — пробрасываем порт
man ssh

:)
будучи не новичком — следовало догадаться, что 10.11.12.13 — приватный IP и напрямую с 99.88.77.66 не доступный
Приватный IP мало о чём не говорит. Хост, с которого «пробрасывается порт», судя по всему, тоже в приватной сети. Не зная топологии сети, можно только догадываться о назначении конкретного IP в данной ситуации.
Всё что я хотел сказать: Коли написана и опубликована данная статья, значит автор хотел кому-то помочь (иначе, лежала бы эта статья на рабочем компе в текстовом файле :) ). Но новичкам таким скудным материалом он не поможет, а не новичкам этот материал не очень нужен. Следовательно, может быть, стоит пересмотреть подход к статье и дать более развёрнутые комментарии к командам и ключам, чтобы новичок «пришёл, увидел, победил» :)

Если кто-то воспринял мой комментарий, как «наезд», прошу прощения. Я не собирался этого делать!
Почему-то не упоминается, что с помощью ssh можно также сделать и полноценный tun/tap туннель: ssh -w
а применение таких тунелей можно?
да самое любое
например, когда нужна связь не по tcp ;-)
например, легко поднимается nfs по udp в обход всем firewalls
Скажем так, создаётся полноценный интерфейс, для которого, в частности, могут быть применены правила фильтрации iptables, через него может быть смаршрутизирован трафик и прочее, прочее, прочее… Всё зависит только от фантазии :)
Вообще-то я имел ввиду эту статью, а не «в интернете нигде не упоминается».
Статья полезная. Но, в связи со стилем изложения суть досконально поймут только те, кому эта статья уже не нужна. Я, например, понял процентов 80% — не админ, юниксоид, не бородатый, поэтому какие-то вещи не сходу понятны.
добавлю, пожалуй в мемориз, пригодится.
у кого можно заказать ликбез, по назначению интерфейсу нескольких адресов(без алиасов — eth1:1...), и последующей работой в iptables(он с алиасами не дружит))?
ip a a ip-address/mask brd broadcast dev iface
например:
ip a a 192.168.1.1/28 brd 192.168.1.15 dev eth0

имхо, ifconfig — зло! :) ну, а если серьёзно, то ifconfig, равно как и route, просто морально устаревшие инструменты. iproute — это наше всё! ;)
таким образом, понимаю, можно сразу подсеть назначить интерфейсу?
ssh туннель — это половина магии. Вторая половина — сделать этот туннель невидимым.
Я решал такую задачу: на работе есть сервер, например, cvs.office.com, нужен доступ, допустим, к CVS (порт 2401). Сервер, естественно, снаружи не виден, на него можно попасть только через gate.office.com, к которому есть ssh доступ. Необходимо обеспечить доступ к cvs.office.com:2401 с ноутбука, который может подключаться из офиса и из дома без необходимости что-либо перенастраивать на ноутбуке. Дома есть роутер (192.168.0.1) с линукс.

Во-первых, делаем туннель с роутера с авторизацией по ключу:

autossh -M 0 -f username@gate.office.com \
-i /gate.ppk -N \
-L 192.168.0.1:12401:cvs.office.com:2401

Туннель поддерживается не через cron, а с помощью autossh, который уже упоминался в предыдущих комментариях. На мой взгляд, использование autossh более явно выражает намерения :)

А теперь самое интересное — ноутбук, подключенный из дома, должен как и из офиса идти на cvs.office.com:2401
Его запрос перехватит роутер и направит его в туннель:

iptables -t nat -A PREROUTING -p tcp -d cvs.office.com --dport 2401 -j DNAT --to-destination 192.168.0.1:12401

Такая прозрачность удобна, а в программах, которые не позволяют переназначить порт, бывает просто необходима. Надеюсь, идея кому-нибудь пригодится.
я бы на вашем месте vpn использовал, если есть возможность.
Я бы на моем тоже использовал :) Месяцев восемь назад назад админы пообещали, что через полгода сделают vpn. Хорошо, что я не стал их дожидаться.
UFO just landed and posted this here
UFO just landed and posted this here
Елси вам эта статья не показалась информативной, это не значит, что она всем показалась таковой.
У вас кстати опечатка в слове «портов».
UFO just landed and posted this here
UFO just landed and posted this here
Автор, срочно изучите опцию SSH ProxyCommand. Можно найти поиском
То, что Вы тут описали, достойно только человека, сидящего в линуксе меньше полугода и впервые увидевшего ман по SSH.
Поддержу прямоходящих. Можно вылить тонны аргументов, но для новичков — статья малозначима, т.к. слишком много на «дожевать» оставлено. Для остальных — бесполезна, т.к. легко заменима 5мин man ssh.
Блин, тема очень интересна, но из вашего объяснения ничерта не понял((

//Маленькое предложение — вместо IP адресов вставьте что-то вроде example.net example2.net и т.п., а то от циферок глаза разбегаются
UFO just landed and posted this here
SSH туннель — какое то неблагодарное занятие. Плюс для туннеля нужен акк на машине. Гораздо практичнее поднять openvpn.
>Тут важно понимать, что туннель можно организовать как изнутри сети, к ресурсам которой вы хотите получить доступ, на внешний ssh-сервер. Также можно организовать туннель с хоста в Интернете на пограничный ssh-сервер сети, чтобы получить доступ к внутренним ресурсам.

Раз пять перечитал, но не понял можно ли организовать тоннель, чтобы исходящий трафик с публичного хоста (есть root-доступ) пускай на локальный порт этого же хоста (а в идеале на произвольный порт произвольного публичного хоста) транслировался на порт удаленного приватного (за провайдерским NAT) хоста (root тоже есть). Как написать программу (а точнее две) на Си я представляю, но можно ли не изобретать велосипед и воспользоваться ssh?

А вообще согласен с многими комментаторами выше, что пост либо излишне лаконичен, либо излишне избыточен. Пользу принесёт, имхо, только тем, кто и не подозревал о существовании такой возможности — теперь они о ней узнают :)
Во-во, у меня так и получилось понять, что и как мне делать. Я понял, что каким-то макаром сделать кое-что можно, но как — ни фига не понял.
Если конкретно мне надо следующее: с моего компа, который ходит в инет через роутер (который имеет внешний IP), получить доступ до компа тёщи, который за натом. Нат провайдеровский, т.е. на нём ничего пробросить не получится. У мебя на роутере порт проброшен, т.е. снаружи на мой комп зайти можно. Задача: зайти на комп тёщи. Реально такое? Это как раз то, что описано в топике или нет? :)
root@комп_тёщи # ssh -f -n -R 2222:127.0.0.1:22 адрес_твоего_компа

root@твой_комп # ssh -p 2222 127.0.0.1
Password:
root@комп_тёщи #
При такой схеме получается, что тещин комп как бы слушает 2222 порт на моем компе, но слушает его чисто средствами ssh, я правильно понял? А можно как нибудь заставить тещин комп слушать произвольный (например 80) по произвольному протоколу (например http)?
Т.е. если я правильно понял, на тёщином компе запущен веб-сервер, нужно научиться ходить на него со своего компа. Как-то так будет:

root@комп_тёщи # ssh -f -n -R 8080:127.0.0.1:80 адрес_твоего_компа
root@твой_комп # links httр://127.0.0.1:8080/index.html
Profit!

Для красоты 8080 можно заменить на 80, если таковой свободен у тебя на 127.0.0.1.
UFO just landed and posted this here
UFO just landed and posted this here
воспользоваться ключом -p
пример:
ssh -f -N -R 2222:10.11.12.13:22 username@99.88.77.66 -p %port_num%
UFO just landed and posted this here
Посмотреть в браузере?
Пробросить вместо/вместе с 22-м портом ещё и 80-й.
ssh -f -N -R 8080:10.11.12.13:80 -p xxxx username@99.88.77.66
теперь если на 99.88.77.66 в браузере ввести localhost:8080 то увидим ресурсы которые висят на 10.11.12.13 внутри сети. Значительный минус этого подхода если на 10.11.12.13 настроен в веб-сервере виртуалхост, ведь обращение к серверу идёт по ip, а не по мнемоническому имени.
Может кто знает как это можно обойти?
UFO just landed and posted this here
> нужно чтобы или localhost можно было задать как прокси в настройках броузера
тогда нужно на 10.11.12.13 поднять какой-нибудь проксик и уже адресоваться на него через localhost

> чтобы была доступна вся интрасеть доступная узлу 10.11.12.13
ну а в этом случае просто поднять ssh layer 3, о чём можно почитать в соседнем топике.
UFO just landed and posted this here
А через 2 линуховых сервака можно порт пробросить?

т.е. у меня есть
хост 1 — 192.168.0.1
с него есть доступ по SSH до 192.168.1.100

с 192.168.1.100 есть доступ по SSH до 192.168.2.200

и только с 192.168.2.200 виден интернет.

При этом 192.168.2.200 с хоста 192.168.0.1 не виден.

(конечно если на 192.168.1.100 есть что-то большее чем SSH, то всё реализуется просто)
192.168.0.1: cat ~/.ssh/config:
Host 192.168.2.200
ProxyCommand ssh user100@192.168.1.100 ssh user200@192.168.2.200 nc localhost 22

и далее, как описано в статье
192.168.0.1: ssh -L :<remote_host>:<remote_port> user200@192.168.2.200

Для кастомных username, паролей и ключей — см. man ssh_config
Помогите, пожалуйста, реализовать такую схему. Есть купленный сервер, к которому алиасами прописано несколько IP. Задача в том, чтобы с домашней машины посмотреть в сеть (мир), через один из алиасных IP.
это нужно VPN заюзать, думаю. например, OpenVPN
… либо, если можно использовать прокси, поставить на сервере прокси-сервера (http[s], socks), а до них организовать туннель, как описано в статье.

P.S. Ещё хороший способ организации VPN без дополнительного софта — ppp over ssh.
а как на винде порт с одного на другой зарулить?
Не поделитесь, как пробросить сокет с удалённого сервера на локальный порт 3310? Пусть будет удалённый сокет /var/run/mysqld.sock
Подозреваю, что как-то так как описано в этой goo.gl/y4faFi статье «OpenSSH Unix Domain Socket Forwarding».
Sign up to leave a comment.

Articles