Ошибка IE 11 с прокси SOCKS5 на базе PuTTY

460
Dave

Я настроил прокси SOCKS5 на основе PuTTY следующим образом:

enter image description here

Я настроил IE11 для использования этого прокси следующим образом:

enter image description here

Я также настроил Firefox 52.7.3 (32-разрядный) для использования этого прокси точно так же:

enter image description here

Содержимое файла proxyConfig.pac выглядит следующим образом:

function FindProxyForURL(url, host) { if ((url.indexOf(".mydomain.local") >= 1) ) { return "SOCKS5 127.0.0.1:1080"; } return "DIRECT"; } 

Я могу получить доступ к интернет-сайтам с помощью IE или Firefox.

Я могу получить доступ к сайтам интрасети, которые не входят в mydomain.local, с помощью IE или Firefox.

Я могу получить доступ к сайтам интрасети, которые находятся под mydomain.local с помощью Firefox.

Но вот проблема: я не могу получить доступ к сайтам интрасети, которые находятся под mydomain.local с IE. Используя host.mydomain.local в качестве примера, я получаю эту ошибку:

enter image description here

host.mydomain.local никак не разрешаться в IP - адрес на ближней стороне прокси - сервера, либо через локальный файл хостов или через DNS. Тем не менее, он разрешает IP-адрес, через DNS, на дальней стороне прокси.

Захват пакета показывает, что IE11 пытается разрешить host.mydomain.local напрямую (т. Е. На ближайшей стороне прокси-сервера), вместо того, чтобы прокси-сервер делал это. Firefox работает, потому что он не пытается разрешить имя хоста на локальной стороне. Это позволяет прокси-серверу делать это.

Если я отредактирую свой локальный файл hosts так, что host.mydomain.local разрешит на ближней стороне прокси-сервера то, что он будет разрешать на дальней стороне прокси, я все равно получу ошибку. Хотя провал занимает гораздо больше времени. Я полагаю, что это связано с тем, что сбой соединения происходит сейчас, потому что ответ не получен (для которого может быть несколько причин) после некоторого тайм-аута, а не из-за сбоя разрешения имени (который происходит очень быстро).

Можно ли как-то заставить IE11 не пытаться разрешить имя хоста, а просто позволить прокси-серверу делать это вместо этого?

Если нет, есть ли другой способ обойти эту проблему?

ОБНОВЛЕНИЕ 1

Я забыл, что раньше сталкивался с этой проблемой, и узнал, что IE11 не поддерживает разрешение имен на стороне сервера SOCKS5. Имея это в виду...

Почему IE не может подключиться, когда я помещаю IP-адрес host.mydomain.local в мой локальный файл hosts?

Данный IP-адрес нигде не маршрутизируется на локальной стороне. Но все же, должен ли IE передавать HTTP-запрос на этот IP-адрес на прокси-сервер (куда этот IP-адрес направляется куда-то)?

ОБНОВЛЕНИЕ 2

Захват пакета показывает, что IE никогда даже не доходит до выполнения HTTP-запроса. Начальное TCP SYN отправляется непосредственно на целевой IP-адрес (который, как я уже сказал, нигде не маршрутизируется на локальной стороне); он не пытается отправить этот запрос TCP-соединения через прокси.

ОБНОВЛЕНИЕ 3

Я попытался настроить браузер для использования прокси другим способом:

enter image description here

Так что теперь все идет через прокси, а не только запросы к mydomain.local .

Сделав это, я теперь могу получить доступ к хостам на mydomain.local, но ограничения брандмауэра не позволяют мне получать доступ к сайтам интрасети (через прокси-сервер) не под сайтами mydomain.local или Internet.

Конечно, эти ограничения брандмауэра не являются ошибкой IE.

Но это показывает проблему, с которой можно столкнуться при попытке использовать IE с прокси-сервером SOCKS5.

Кажется, не может быть хорошего решения, если кто-то действительно хочет использовать IE.

0

1 ответ на вопрос

0
Dave

Кажется, лучшее, что можно сделать, это использовать переадресацию локального порта SSH, а не использовать прокси-сервер SOCKS5.

Вот мой локальный файл hosts:

127.24.0.1 host1.mydomain.local 127.24.0.2 host2.mydomain.local 127.24.0.3 host3.mydomain.local 

Вот как я настроил переадресацию локального порта:

enter image description here

Обратите внимание, что из-за необходимости повторного использования порта 80 (каждый хост, к которому я хочу подключиться, обслуживает HTTP на порту 80), для каждого хоста назначения необходимо использовать разные IP-адреса локального хоста. Windows поддерживает это.

Насколько я помню, Linux не поддерживает использование нескольких локальных IP-адресов. Если я правильно помню, Linux меняет любой адрес локального хоста (то есть что-нибудь в 127.0.0.0/8) на 127.0.0.1. Следовательно, как только клиент SSH пытается создать второй приемник переадресации портов, возникает ошибка из-за попытки повторно привязать порт 80 к тому же IP-адресу (а именно, 127.0.0.1).