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

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

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

Содержимое файла 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 в качестве примера, я получаю эту ошибку:

host.mydomain.local не преобразуется в IP-адрес на ближайшей стороне прокси-сервера, либо через локальный файл hosts, либо через 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

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

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

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

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

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

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

1 ответ1

0

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

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

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .