Прозрачный ssh туннель

Внешней доступ к внутренним ресурсам сети у нас на работе возможен только через ssh. В принципе, этого достаточно для проверки почты (POP3/SMTP), пользования веб-интерфейсами (HTTP), удаленного управления компьютером (VNC или Remote Desktop), даже для доступа к репозиторию исходных текстов (CVS). Но неудобно. Поясню в двух словах, как получить доступ через ssh, в чем неудобство подхода и как я его преодолел.

ssh позволяет организовать туннели (ssh tunnel). Туннель связывает локальный порт с портом на компьютере, доступном с ssh сервера. Например, удаленный доступ к http-серверу work.yourdomain.com (порт 80) можно получить следующим образом:

ssh -f -N \
-L 10080:work.yourdomain.com:80 \
sshserver.yourdomain.com

Теперь в браузере http://localhost:10080 приведет на http://work.yourdomain.com.

Туннелей можно определить несколько. В приведенной команде добавятся аналогичные строки с ключом -L.

Теперь о проблемах.

  • Абсолютные ссылки на work.yourdomain.com или другой внутренний адрес работать, очевидно, не будут.
  • Если клиентская программа не позволяет изменить порт, придется занимать локальный порт с тем же номером. Не помню точно, где я этим столкнулся, то ли CVS, то ли RDP. Следовательно, на два разных сервера этим клиентом уже не зайдешь.

Проблема преодолевается с помощью port forwarding: надо задать правило, согласно которому запросы на work.yourdomain.com:80 перенаправляются на localhost:10080. Теперь в браузере можно будет использовать честный адрес — запросы на него перенаправятся на localhost, пройдут через ssh туннель и достигнут цели. При определении правил можно использовать только ip-адреса, поэтому проблему разрешения доменных имен надо решать отдельно, но это совсем просто.

Port forwarding в KUbuntu удобно настраивать через Guidedog (требуется установить одноименный пакет):

Guidedog

Но можно и вручную примерно такой командой (я не проверял):

iptables -t nat -A gforward -p tcp --dport 80 -d 1.2.3.4 -j REDIRECT --to-ports 10080

09.03.2008  Метки: , ,   Рубрики: Интернет

2 комментария

  1. bappoy - 13.05.2008

    Привет, коллега :))
    Проблему с названиями хостов можно решить, прописав в /etc/hosts соответствие
    127.0.0.1 http://www.yourdomain.com

  2. allex - 14.05.2008

    Этот способ не решает проблему полностью. Если есть более одного хоста с одинаковым портом, то адреса-то их прописать можно, а вот порты останутся разными.

Написать комментарий