PPP over SSH over HTTP

Настройка доступа в Интернет через HTTP proxy

18 февраля 2008 г.

Дано

  1. Рабочая станция с ОС Linux (Fedora) в локальной сети организации
  2. Доступ в Интернет через HTTP proxy с авторизацией Kerberos или NTLM
  3. Сервер в Интернете с административными правами на нем (например, домашний компьютер с реальным IP-адресом)
  4. Прокси-сервер поддерживает команду HTTP CONNECT на порт 443 (https)

Не дано

  1. Доступ в Интернет по произвольным портам на произвольные адреса
  2. Доступ через прокси-сервер без авторизации
  3. Доступ через прокси-сервер с простой авторизацией (basic, digest)

Требуется

Настроить доступ на некоторый сервер в Интернете по протоколу cvspserver

Метод решения

Настроим доступ в Интернет на произвольные порты на требуемый сервер. Для этого:
  1. Установим прокси-сервер, который может авторизоваться на прокси-сервере компании по протоколу NTLM.
  2. Повесим ssh на внешнем сервере на порт 443.
  3. Настроим туннелирование ssh через http.
  4. Настроим туннелирование PPP через SSH.
  5. Настроим маршрутизацию с обеих сторон полученного туннеля.

Обозначения

ws.company.test - наша рабочая станция

proxy.company.test - прокси-сервер (пусть он слушает на порту 8080), как он виден из локальной сети организации

proxy_out.company.test - реальный адрес прокси-сервера, который виден из Интернета

server.somewhere.test - сервер в Интернете, на который мы имеем административный доступ

target.test - сервер, на который мы желаем получить доступ по произвольным портам.

Проверка возможности настройки канала

1. Установка прокси-сервера, авторизующегося по протоколу NTLM.

Инструкция написана для версии cntlm-0.35.1. В следующих версиях могут быть исправлены некоторые неудобства установки.

2. Вешаем ssh на внешнем сервере на порт 443

Эту операцию невозможно выполнить из офиса. Сделайте ее вечером из дома, из Интернет-кафе, через мобильный телефон или как-либо еще. Но предварительно узнайте, под каким внешним IP-адресом выходит в Интернет корпоративный прокси-сервер. Для этого можно либо воспользоваться соответствующими сайтами в Интернете, либо, если на вашем внешнем сервере запущен веб-сервер, запросить несуществующую страницу с характерным именем (например, http://server.somewhere.test/remember_corporate_ip), а потом найти соответствующую строку в логах веб-сервера (grep remember_corporate access_log).

Цель работы - повесить сервер ssh на порт 443 (https). Но на сервере уже может работать веб-сервер на этом порту и может оказаться нежелательным отключать на нем протокол HTTPS. Мы сделаем переадресацию портов так, чтобы при коннекте на 443-й порт с прокси-сервера корпоративной сети запрос переадресовался на порт 22, а при коннекте с других адресов запрос обрабатывался как обычно веб-сервером.

3. Настраиваем туннелирование ssh через прокси-сервер.

Возвращаемся в офис.

Устанавливаем программу proxytunnel (http://freshmeat.net/projects/proxytunnel/).

Инструкция для версии proxytunnel-1.6.3.

4. Настраиваем туннелирование ppp через ssh.

Настройка туннеля затрагивает и рабочую станцию (ws.company.test), и сервер в Интернете (server.somewhere.test).

5. Настраиваем маршрутизацию

Нам требуется доступ не на промежуточный сервер, а на некоторый сервер в Интернете. Чтобы пакеты доходили туда и обратно, требуется настроить маршрутизацию так, чтобы на рабочей станции пакеты уходили в туннель, на промежуточном сервере выныривали из него, и на обратном пути опять заныривали.

PS. (*) Сергей Рекубратский подсказывает, что от разрыва помогает настройка "ServerAliveInterval 60" в конфиге ssh.