Lion / порядок разрешения имен

9

(эта проблема ушла для меня с обновлением 10.7.1 - / etc / hosts теперь работает как всегда для меня)

Я обновил свой Mac до Lion, и теперь я замечаю, что с / etc / hosts обращаются в последнюю очередь, даже после DNS. Это очень раздражает, так как у меня есть много имен хостов, которые я использую для разработки.

Где настроен порядок разрешения имен? Я могу проверить это с помощью dscacheutil, так вот что машина Snow Leopard сообщает мне:

pilif@tali ~ % dscacheutil -configuration
DirectoryService Cache search policy:
    /Local/Default
    /BSD/local

Settings:
AAAA Queries  - Disabled (link-local IPv6 addresses)
Default TTL   - 3600
Policy Flags  - 0

И вот что Лев говорит мне

pilif@kosmos ~ % dscacheutil -configuration
DirectoryService Cache search policy:
    /Local/Default

Unable to get details from the cache node
Unable to get cache configuration information

Помимо двух ошибок, я бы предположил, что / BSD / Local - это то, что заставляет его читать / etc / hosts ранее.

У кого-нибудь есть идеи, где хранится эта «политика поиска в кэше» и как ее вернуть обратно?

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

Обновление: порядок разрешения, по-видимому, можно настроить в каталоге Utility. К сожалению, при этой установке Directroy Utility больше не отображает файлы BSD на вкладке «Службы».

Эта особенность ушла от Льва? Или эта установка шланговая?

pilif
источник

Ответы:

5

Я решил проблему (и, таким образом, опубликовал в качестве ответа вместо изменения вопроса):

Файлы BSD на самом деле не перечислены ни в утилите каталогов, ни в dscacheutil, но, по крайней мере, / etc / hosts все еще читается, но есть проблема в том, что несколько имен хостов на IP-адрес больше не поддерживаются или по крайней мере, они не работают правильно банкомат.

Когда ваш старый / etc / hosts мог выглядеть так

127.0.0.1 localhost foo foobar

Это приведет к ~ 10 секундам ожидания для разрешения любого из этих имен хостов.

Но если вы используете

127.0.0.1 localhost
127.0.0.1 foo
127.0.0.1 foobar

Разрешение будет мгновенным.

Ответ RedGrittyBrick также действителен, но я специально хочу продолжать использовать файл hosts для изменения локального каталога, так как он используется несколькими моими машинами разработки.

Чтобы ответить на остальные мои вопросы тоже (теперь мне все ясно):

  • Порядок разрешения кэша, который вы настраиваете в утилите каталогов, где вы можете указать, какие из включенных каталогов вы хотите посмотреть в каком порядке.
  • Для настройки каталогов также используйте утилиту каталогов
  • Утилита каталогов запускается в меню «Системные настройки»> «Учетные записи»> «Параметры входа в систему»> «Присоединиться к каталогу»> «Утилита каталогов».
  • В Lion «каталог» BSD Files больше не доступен, хотя справочный файл по-прежнему ссылается на него.
  • Как я уже сказал, / etc / hosts все еще читается, но есть ошибка, которую я описал выше.
pilif
источник
Размещение каждой записи в отдельной строке не решило ее для меня. Можете ли вы посетить "foo" и "foobar" в Chrome и Safari? Для меня это работает только в Chrome. Можете ли вы переопределить существующий веб-сайт, например, «127.0.0.1 www.google.com»? Для меня это не работает ни в Chrome, ни в Safari.
Ричардкмиллер
Это решило 10 секунд ждать меня. Спасибо, это сводило меня с ума.
Джош Блихер Снайдер
Разрешил это для меня на 10.7.3
EMiller
3

Дело в том, что Lion по-разному обрабатывает домен .local, поскольку он зарезервирован для некоторых функций многоадресной DNS (используется Bonjour). Единственный способ решить эту проблему - использовать другой TLD для хостов разработки (например, .dev). Это хорошо работает для меня, надеюсь, это будет полезно для других!

Жан-Батист МОНЕН
источник
это было абсолютно то, что происходило на моей коробке. ТНХ
SLF
1

Как я ожидаю, вы знаете, что традиционный способ Unix справиться с этим - использовать директиву hostresorderили . OS X читает (или может быть настроен) читать и использовать эти файлы, но OS X имеет отдельную систему, управляемую через сетевые настройки, которая, как я полагаю, перезаписывает эти файлы конфигурации при загрузке.order/etc/resolv.conf

http://hints.macworld.com/article.php?story=20070223050607406

http://docs.info.apple.com/article.html?path=ServerAdmin/10.6/en/od4939886e.html

https://discussions.apple.com/thread/2493759

http://blog.daemon.com.au/go/blog-post/managing-the-host-file-on-leopard

Это не отвечает на ваш вопрос, но информация и ссылки могут помочь найти его. Я бы поставил это в комментарии, если бы смог сжать это, чтобы соответствовать.

RedGrittyBrick
источник
Я знаю о dscl, но я специально хотел использовать файл hosts, который больше нельзя явно включать и выключать в Lion. Это всегда читается, но с другими правилами синтаксического анализа, чем раньше - смотрите мой ответ на мой вопрос.
Пилиф
1

Можно обойти эту проблему, используя dnsmasq в качестве локального DNS и добавляя туда записи, или используйте dnsmasq для использования /etc/hosts.

Можно использовать скрипт для установки порядка DNS-сервера:

Filename: setdsn
-------------------------------------------------
#!/bin/bash

# Script is used to set the Nameserver Lookup under Max OS X 10.4 with the Console
# Script by Stephan Oeste

if [ $# -lt 2 ] ; then
echo "Use: $0 [2.Nameserver]"
echo "Example Use: $0 example.tld 1.2.3.4 1.2.3.5"
exit 1
fi

PSID=$( (scutil | grep PrimaryService | sed -e 's/.*PrimaryService : //')<< EOF
open
get State:/Network/Global/IPv4
d.show
quit
EOF
)

scutil << EOF
open
d.init
d.add ServerAddresses * $2 $3
d.add DomainName $1
set State:/Network/Service/$PSID/DNS
quit
EOF
-------------------------------------------------

Создайте файл:

chmod +x setdns

А затем используйте ist с (Пример): setdns domain.com 12.23.34.45
(Опубликовано emzy на http://hints.macworld.com/article.php?story=20050621051643993 )

Если вы хотите, чтобы скрипт автоматически загружался при изменении сети, вы должны создать .plist, вставить его /Library/LaunchDaemonsи использовать:

sudo launchctl load -w /LibraryLaunchDaemons/name.your.plist
qpqp
источник
1

Я столкнулся с этой проблемой в Snow Leopard при попытке настроить прозрачный сервер обновления программного обеспечения. Теперь я работаю на Льва. Сам сервер обновлений программного обеспечения находится на полпути между хаком и клуджем, но эта проблема была решена довольно элегантно. Вот что я знаю:

  • / etc / hosts существует в Lion и, как и последние версии OS X, настроена на чтение после DNS.
  • /etc/resolv.conf существует в Lion, но является символической ссылкой на /var/run/resolv.conf.
  • /var/run/resolv.conf перезаписывается при каждом обновлении конфигурации сети. Это может быть связано с перезагрузками, продлением аренды DHCP и т. Д.

Я создал следующий скрипт. / USR / местные / hostsBind:

mv /var/run/resolv.conf /var/run/resolv.conf.new
echo order hosts, bind > /var/run/resolv.conf
cat /var/run/resolv.conf.new >> /var/run/resolv.conf

это создает резервную копию текущего основного файла resolv.conf, создает новый с желаемым порядком узлов перед BIND и объединяет предыдущий файл до конца.

Я вызываю этот скрипт, просматривая основной файл resolv.conf со следующим запущенным заданием в /Library/LaunchDaemons/com.domain.hostsBind.plist (вы можете изменить com.domain на что-то, что имеет смысл для вас):

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Label</key>
    <string>com.domain.hostsBind</string>
    <key>ProgramArguments</key>
    <array>
        <string>/usr/local/hostsBind</string>
    </array>
    <key>WatchPaths</key>
    <array>
        <string>/var/run/resolv.conf</string>
    </array>
</dict>
</plist>

Это работает для нашей организации с сервером обновления программного обеспечения Lion.

Последнее, что следует отметить, это прекрасно работает и со Snow Leopard, если вы измените путь для resolv.conf на /etc/resolv.conf. Лев просто бросил шаровой символ символьной ссылки в / var / run / вместо / etc /.

-b

PS: источник для скрипта: http://forums.macrumors.com/showthread.php?p=6742920

supreme_b_ing
источник
когда я пытался это сделать, задание сохраняло порядок в файле, потому что изменение файла вызывало новое обновление.
harmanjd
1

Существует ряд проблем с сервером Apache, который поставляется с OSX Lion.

  1. Многие модули загружаются по умолчанию.
    Откройте /etc/apache2/httpd.confи просмотрите список включенных модулей (все они включены по умолчанию). Вы, вероятно, можете отключить многие из них, поставив #перед линией.

    Это те, которые я выключил:

#LoadModule authn_dbm_module libexec/apache2/mod_authn_dbm.so
#LoadModule authn_anon_module libexec/apache2/mod_authn_anon.so
#LoadModule authn_dbd_module libexec/apache2/mod_authn_dbd.so
#LoadModule authn_default_module libexec/apache2/mod_authn_default.so
#LoadModule authz_groupfile_module libexec/apache2/mod_authz_groupfile.so
#LoadModule authz_user_module libexec/apache2/mod_authz_user.so
#LoadModule authz_dbm_module libexec/apache2/mod_authz_dbm.so
#LoadModule authz_owner_module libexec/apache2/mod_authz_owner.so
#LoadModule authz_default_module libexec/apache2/mod_authz_default.so
#LoadModule auth_basic_module libexec/apache2/mod_auth_basic.so
#LoadModule auth_digest_module libexec/apache2/mod_auth_digest.so
#LoadModule dbd_module libexec/apache2/mod_dbd.so
#LoadModule mime_magic_module libexec/apache2/mod_mime_magic.so
#LoadModule unique_id_module libexec/apache2/mod_unique_id.so
#LoadModule proxy_connect_module libexec/apache2/mod_proxy_connect.so
#LoadModule proxy_ftp_module libexec/apache2/mod_proxy_ftp.so
#LoadModule proxy_scgi_module libexec/apache2/mod_proxy_scgi.so
#LoadModule proxy_ajp_module libexec/apache2/mod_proxy_ajp.so
#LoadModule dav_module libexec/apache2/mod_dav.so
#LoadModule dav_fs_module libexec/apache2/mod_dav_fs.so
#LoadModule bonjour_module libexec/apache2/mod_bonjour.so
#LoadModule fastcgi_module libexec/apache2/mod_fastcgi.so
  1. Хозяев-файл является не совершенным.
    Теперь откройте файл hosts, расположенный по адресу /etc/hosts. Здесь вы увидите эту строку (и некоторые комментарии):

127.0.0.1 macbook-pro-van-bart.local

(другое имя компьютера с курса). Добавьте следующую строку (измените имя компьютера):

fe80::1%lo0 macbook-pro-van-bart.local
  1. Посмотрите на вашу конфигурацию apache
    Убедитесь, что вы vhostsне полагаетесь на IP-адреса. Измените их так:

NameVirtualHost 127.0.0.1:80

становится:

NameVirtualHost *: 80

Барт Де Вос
источник