Почему браузеры игнорируют /etc/hosts за SOCKS-прокси?

У моего MacBook в офисе нет доступа в Интернет. Поэтому я установил мгновенный прокси-сервер SOCKS через SSH для просмотра веб-страниц.

Однако, когда я пытаюсь добавить запись в /etc/hosts, браузер не переходит на тот сайт, на который я рассчитывал...

WIFI моего MacBook выключен и подключен к локальной сети компании:

 IP address:  192.168.8.250
 Subnet mask: 255.255.255.0
 Router:      192.168.8.1
 DNS server:  8.8.8.8

По умолчанию нет доступа в Интернет.

Есть ящик для разработки Linux (192.168.12.128), у которого есть доступ к Интернету, поэтому я настроил мгновенный прокси-сервер SOCKS, чтобы получить доступ к Интернету для моего MacBook:

 ssh -fND localhost:30000 ohho@192.168.12.128

Затем в Системных настройках моего MacBook> Сеть> Прокси

 (Enable) SOCKS Proxy
 SOCKS Proxy sever: 127.0.0.1:30000
 Bypass proxy settings for these Hosts & Domains:
   *.local, 169.254/16, 127.0.0.1

Теперь я могу просматривать веб-страницы, пока все хорошо.

Для разработки я настроил несколько записей /etc/hostsдля виртуальных хостов:

 127.0.0.1 air.company.com

В bash:

 $ ping air.company.com
 PING air.ohho.es (127.0.0.1): 56 data bytes
 64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.046 ms

 $ curl air.company.com
 <html>OK</html>

Это выглядит хорошо и curlвозвращает содержимое index.htmlкрасиво.

Однако, если я пытаюсь открыть сайт: http://air.company.comв браузерах (Safari/Chrome/Firefox) ни один из них не возвращает результат, как curlэто было. Хром выдает ошибку:

Эта веб-страница недоступна. Веб-страница http://air.company.com/ может быть временно недоступна или навсегда перемещена на новый веб-адрес. Ошибка 120 (net::ERR_SOCKS_CONNECTION_FAILED): неизвестная ошибка.

Если я добавлю еще одну запись в /etc/hosts:

 127.0.0.1 www.microsoft.com

В bash:

 $ ping www.microsoft.com
 PING www.microsoft.com (127.0.0.1): 56 data bytes
 64 bytes from 127.0.0.1: icmp_seq=0 ttl=64 time=0.047 ms
 64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.128 ms
 ^C
 --- www.microsoft.com ping statistics ---
 2 packets transmitted, 2 packets received, 0.0% packet loss
 round-trip min/avg/max/stddev = 0.047/0.087/0.128/0.041 ms

 $ curl www.microsoft.com
 <html>OK</html>

Однако браузеры возвращают содержимое с веб-сервера настоящего сайта Microsoft вместо содержимого моего MacBook (127.0.01). Почему?

PS

Если я отключу прокси-сервер SOCKS, браузер правильно вернет содержимое с 127.0.0.1.

Если я отключу кабель локальной сети, браузер правильно вернет содержимое с 127.0.0.1.

Офицер информационной безопасности во мне должен спросить: есть ли причина, по которой ваш офис не предоставляет публичный доступ в Интернет, мистер Сноуден? ;)
А если не ставить 127.0.0.1 в обход? Он по-прежнему является локальным хостом и в любом случае не должен использовать прокси. Возможно, это функция обхода, отключающая браузеры.
Это просто глупо со стороны Microsoft, что файл используется только без прокси.

Ответы (1)

Ваш браузер запрашивает прокси-сервер SOCKS для сайтов, он не подключается напрямую. Поэтому добавление IP-адреса в список исключений не работает, так как ваш компьютер не выполняет поиск air.company.com по адресу 127.0.0.1. Прокси SOCKS есть.

Чтобы избежать этого, поместите полное доменное имя того, к чему вы обращаетесь локально, в список исключений в Системных настройках > Сеть > Прокси.

Итак, для air.company.com вы увидите список исключений (из приведенного выше примера):

  *.local, 169.254/16, 127.0.0.1, air.company.com

Теперь ваш компьютер будет напрямую подключаться к air.company.com и, следовательно, использовать /etc/hosts.

Это просто глупо со стороны Microsoft, что файл используется только без прокси.