Иногда возникает необходимость получить http-доступ к ресурсу, который доступен только в определённой сети, в которой есть доступный ssh-сервер. В том случае когда curl/wget/links/lynx в ssh-сессии недостаточно можно использовать имеющийся доступ для того чтобы открыть socks-прокси и “автосконфигурировать” полноценный браузер для использования полученного туннеля.

Для начала нужно создать туннель и организовать прокси-сервер:

ssh user@server -D1080 -f -N
Здесь:
* -D1080 – создаёт socks-прокси по адресу 127.0.0.1:1080
* -f -N – открывает соединение с ssh-сервером, но не открывает shell, отправляет процесс в фоновый режим

Затем создать конфигурационный файл для настройки proxy в браузере:


// ~/proxy.pac
function FindProxyForURL(url, host) {
// в chrome alert можно увидеть перейдя по ссылке chrome://net-internals/#events
// alert("url: " + url + ", host: " + host); // полезно для отладки в процессе настройки
if ( shExpMatch(host, "*.private") // все домены в "зоне" private
|| dnsDomainIs(host, "private-resource.local") // конкретный сайт private-resource.local
|| isInNet(dnsResolve(host), "172.16.0.0", "255.240.0.0") // любой ip в указанной сети (доступный вам резолвер должен знать про закрытую сеть)
) {
return "SOCKS 127.0.0.1:1080";
}
return "DIRECT";
}

Внутри синтаксически правильное подмножество javascript-а, на котором написана единственная функция FindProxyForURL, её задача – вернуть строку подключения к прокси (в данном случае – SOCKS) или “DIRECT”, если необходимо подключаться напрямую.

Затем в настройках браузера (в системных настройках) указываем путь к созданному файлу в качестве Proxy auto configuration url.

Теперь перечисленные в PAC-файле ресурсы доступны через локальный браузер.

Подробнее:
* Proxy auto configuration
* Функции доступные в PAC-файле
* autossh, если доступ к ресурсам нужен постоянно.

Удобный доступ к веб-ресурсам в закрытой сети через ssh
Tagged on:     

Leave a Reply