<?xml version="1.0" encoding="UTF-8" ?><oembed><version>1.0</version><provider_name>Чудо{вищные} заметки</provider_name><provider_url>https://miracle.rpz.name</provider_url><author_name>MiRacLe</author_name><author_url>https://miracle.rpz.name/author/miracle/</author_url><title>Удобный доступ к веб-ресурсам в закрытой сети через ssh</title><html>&lt;em&gt;Иногда&lt;/em&gt; возникает необходимость получить http-доступ к ресурсу, который доступен только в определённой сети, в которой есть доступный ssh-сервер. В том случае когда curl/wget/links/lynx в ssh-сессии недостаточно можно использовать имеющийся доступ для того чтобы открыть socks-прокси и &quot;автосконфигурировать&quot; полноценный браузер для использования полученного туннеля.

Для начала нужно создать туннель и организовать прокси-сервер:

&lt;code&gt;ssh user@server -D1080 -f -N&lt;/code&gt;
Здесь:
* &lt;em&gt;-D1080&lt;/em&gt; - создаёт socks-прокси по адресу 127.0.0.1:1080
* &lt;em&gt;-f -N&lt;/em&gt; - открывает соединение с ssh-сервером, но не открывает shell, отправляет процесс в фоновый режим

Затем создать конфигурационный файл для настройки proxy в браузере:

&lt;code&gt;
// ~/proxy.pac
function FindProxyForURL(url, host) {
// в chrome alert можно увидеть перейдя по ссылке chrome://net-internals/#events
// alert(&quot;url: &quot; + url + &quot;, host: &quot; + host); // полезно для отладки в процессе настройки
if (  shExpMatch(host, &quot;*.private&quot;) // все домены в &quot;зоне&quot; private
|| dnsDomainIs(host, &quot;private-resource.local&quot;) // конкретный сайт private-resource.local
|| isInNet(dnsResolve(host), &quot;172.16.0.0&quot;, &quot;255.240.0.0&quot;) // любой ip в указанной сети (доступный вам резолвер должен знать про закрытую сеть)
) {
return &quot;SOCKS 127.0.0.1:1080&quot;;
}
return &quot;DIRECT&quot;;
}&lt;/code&gt;

Внутри синтаксически правильное подмножество javascript-а, на котором написана единственная функция &lt;em&gt;FindProxyForURL&lt;/em&gt;, её задача - вернуть строку подключения к прокси (в данном случае - SOCKS) или &quot;DIRECT&quot;, если необходимо подключаться напрямую.

Затем в настройках браузера (в системных настройках) указываем путь к созданному файлу в качестве Proxy auto configuration url.

&lt;img src=&quot;//miracle.rpz.name/shared/2018/kde-proxy-auto-configuration-url.png&quot; align=&quot;absmiddle&quot; /&gt;

Теперь перечисленные в PAC-файле ресурсы доступны через локальный браузер.

Подробнее:
* &lt;a href=&quot;https://en.wikipedia.org/wiki/Proxy_auto-config&quot;&gt;Proxy auto configuration&lt;/a&gt;
* &lt;a href=&quot;http://findproxyforurl.com/pac-functions/&quot;&gt;Функции доступные в PAC-файле&lt;/a&gt;
* &lt;a href=&quot;http://www.harding.motd.ca/autossh/&quot;&gt;autossh&lt;/a&gt;, если доступ к ресурсам нужен постоянно.</html><type>rich</type></oembed>