====== SSH: Туннелирование ======
===== Туннель для X-Server =====
Достаточно типовая задача. Вы работаете за машиной на которой запущен X-Server (к примеру xorg, xfree86 или что-то из коммерческих аналогов), и у Вас возникло непреодолимое желание поработать с удалённой машиной и неприменно воспользоваться каким нибудь приложением требующим красивых графических окошек. К примеру ''xcalc'', но это не столь важно.
В дни своей бурной молодости я с радостью первооткрывателя заходил через ssh на удалённую машину. Прописывал там переменную ''DISPLAY'', а на локальной машине разрешал иксам подключение ''xhost remote-host''. Теперь я постарел, стал ленивый и совершаю меньше телодвижений.
local-side $ ssh -X remote-user@remote-host
remote-side$ xcalc
Всё оказалось просто. И, замечу, безопасно, поскольку туннель проложен через шифрованное соединение.
===== Произвольные туннели =====
Прокладывать произвольные туннели чуть сложнее, чем туннель для иксов. Для этого служат ключи ''-L'' и ''-R''.
-R [bind_address:]port:host:hostport
Прокладывает туннель с **удалённой** (**R**emote) машины на локальную.
Действие таково. На удалённой машине открывается на прослушивание порт **port**, если нужно его можно привязать к конкретному адресу **bind_address**. При подключении клиента на этот порт подключение пробрасывается через шифрованное соединение на машину **host** (т.е. не обязательно на ту, с которой Вы подключились по SSH) на порт **hostport**.
Аналогичным образом прокладывается туннель с **локальной** (**L**ocal) машины на удалённую.
-L [bind_address:]port:host:hostport
Понятно, что теперь порт на прослушивание будет открываться на Вашей машине.
Ключи могут повторяться и комбинироваться. Так Вы сможете за один раз создать несколько туннелей.
При использовании ''IPv6'' адресации следует использовать альтернативную форму записи:
-R [bind_address/]port/host/hostport
-L [bind_address/]port/host/hostport
===== SOCKS =====
С помощью опции ''-D //bind-local-port//'' можно создать **SOCKS4/5** сервер на ''bind-local-port'' порту локальной машины.
ssh -D 2080 remote-user@remote-host
откроет SSH соединение и откроет на ''2080'' порту SOCKS сервер запросы к которому будут туннелироваться на удалённую машину и уже оттуда будет производится подключение.
**Замечание:** Любое приложение можно научить работать через SOCKS с помощью утулиты [[http://tsocks.sourceforge.net/|tsocks]] . Так же можно обратить внимание на [[http://proxychains.sourceforge.net/|proxychains]]/* и **connect-proxy***/.
--- //[[plumbum@rambler.ru|Ivan A-R]] 23.07.2006 14:06//
{{tag>ssh tips article}}
~~DISCUSSION~~