6

Я использовал свой файл hosts (расположенный в /private /etc /hosts) несколько месяцев, чтобы заблокировать отвлекающие сайты в течение рабочего дня. Это работало все хорошо до сих пор. Сегодня это внезапно перестало работать.

Некоторые примеры строк из файла hosts:

127.0.0.1 facebook.com
127.0.0.1 www.facebook.com

Я поместил этот текст в файл hosts, выполнив следующие действия:

sudo nano /etc /hosts
написал строки выше, затем ^ O, чтобы записать файл, Enter, чтобы подтвердить имя файла и ^ X, чтобы выйти из редактора.

Между локальным IP-адресом и доменным именем у меня есть вкладка. Концы строк в стиле Unix (LF), и странная часть в том, что когда я использую команду ping она, кажется, выполняет свою работу правильно:

пинг facebook.com
PING facebook.com (127.0.0.1): 56 байт данных
64 байта из 127.0.0.1: icmp_seq = 0 ttl = 64 время = 0,137 мс
64 байта из 127.0.0.1: icmp_seq = 1 ttl = 64 время = 0,122 мс
64 байта из 127.0.0.1: icmp_seq = 2 ttl = 64 времени = 0,118 мс
64 байта из 127.0.0.1: icmp_seq = 3 ttl = 64 времени = 0,110 мс
^ C
--- статистика пинг facebook.com ---
Передано 4 пакета, получено 4 пакета, потеря пакета 0.0%
туда-обратно min/avg/max/stddev = 0,110/0,122/0,137/0,010 мс

Но когда я пытаюсь зайти на facebook.com в Safari или Firefox, я все равно могу попасть на сайт. Это также относится и к другим веб-сайтам, которые я заблокировал аналогичным образом. Я очистил кеш для обоих браузеров, но это не решило проблему.

Что я могу сделать, чтобы решить эту проблему?

Обновление 1: сейчас я проверяю все сайты, которые заблокировал таким образом, и обнаружил, что поведение в разных доменах не одинаково. Это «трата времени», которую я блокирую в /private /etc /hosts:

# Блокировщики времени
127.0.0.1 9gag.com
127.0.0.1 flabber.nl
127.0.0.1 geenstijl.nl
127.0.0.1 dumpert.nl
127.0.0.1 facebook.com
127.0.0.1 www.9gag.com
127.0.0.1 www.flabber.nl
127.0.0.1 www.geenstijl.nl
127.0.0.1 www.dumpert.nl
127.0.0.1 www.facebook.com
##

Все сайты из этого списка пинг до 127.0.0.1 однако 9gag.com и flabber.nl недостижимы с помощью любого браузера, но geenstijl.nl dumpert.nl и facebook.com достижимы.

Я попытался перезапустить, это не решило проблему. До этой проблемы я не менял конфигурацию системы каким-либо обновлением.

Обновление 2: три часа назад я мог получить доступ к facebook.com через Safari и Firefox, теперь я больше не могу. geenstijl.nl и dumpert.nl по-прежнему доступны, хотя. Я ничего не изменил за последние три часа, просто использовал Word и просматривал веб-страницы с Safari.

Обновление 3: теперь, спустя четыре часа после второго обновления, файл hosts снова работает как обычно. В процессе работы с файлом hosts я удалил нерабочие записи и заново добавил их одну за другой, проверяя каждую после ее добавления. Я понятия не имею, что происходит, и больше не могу запускать wireshark на трафике, поскольку я не могу наблюдать за ошибочным поведением.

Обновление 4: И проблема снова возвращается. Те же сайты, что и в обновлении 1, показывают ошибочное поведение.

Обновление 5:
Все снова работает как надо. Я буду помнить о решениях, размещенных здесь, когда снова столкнусь с ошибкой.

5 ответов5

4

Разрешение DNS в OS X стало бесполезным в обновлении от Snow Leopard до Lion. После чистой установки все должно работать должным образом, но если вы пошли по пути обновления, все может быть бесполезно.

Вариант 1: адресация IPv6

Многие веб-сайты и интернет-провайдеры поддерживают IPv6, если IPv4 недоступен. Поместите определения в начало вашего /etc/hosts так:

# Block Facebook IPv4
127.0.0.1   www.facebook.com
127.0.0.1   facebook.com

# Block Facebook IPv6
fe80::1%lo0 www.facebook.com
fe80::1%lo0 facebook.com

Вариант 2: использовать DNSMasq

Если предыдущий совет не удался, вы можете установить DNSMasq.

2

После любого изменения в /etc/hosts запустите dscacheutil -flushcache в командной строке, чтобы очистить локальный кэш DNS. Это работает для меня каждый раз, за одним исключением: Firefox имеет свой собственный кэш DNS, поэтому вам придется его перезапустить.

1

Система OSX не использует /etc /hosts для большинства своих сетевых операций. По большей части, команды терминала / командной строки (Unixy) ДОЛЖНЫ использовать /etc /hosts, в то время как что угодно Maccy (!) использует внутренние таблицы типа plist, хранящиеся в другом месте.

Использование не является последовательным и проблематичным, потому что это делает OSX "Unix" недетерминированным. Как вы обнаружили.

У меня больше нет Mac, чтобы узнать, где именно Mac OSX хранит эмуляцию файла hosts, но, надеюсь, эта информация укажет вам правильное направление.

Я знаю, что это будет в каталоге /Library (и / или ~ /Library), а файлы plist сжаты, так что вы не можете просто найти что-то. Хм, команда 'plutil' может распаковывать / отображать содержимое файлов .plist (я думаю, что это имя). Возможно начать с

find ~/Library /Library -iname "*host*" -ls

чтобы увидеть, что скрывается в этом болоте оконной сложности.

Это не совсем unix (netbsd)... но это не совсем ... как бы вы ни назвали это (GUI?). Даже Windows соответствует. Возможно, неправильно ... но последовательно.

1

Просто добавлю еще немного вуду здесь. Мои записи в файле hosts на 10.8.2 полностью игнорировались системой до.

  1. Я переместил свои записи в начало файла

  2. Я использовал одну вкладку для разделения IP-адреса и имени хоста

  3. Я добавил $ dnscacheutil -flushcache чтобы быть в безопасности

Я не вникал глубоко в то, почему это происходит, просто передавая ритуал, который решил это для меня.

1

Я обнаружил, что в OS X 10.9 Safari и Firefox продолжали получать доступ к заблокированным доменам, пока я не реализовал блоки IPv6 в файле etc/hosts. Только Chrome был затронут блоками IPv4.

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