狮子/名字解析顺序


9

(这个问题在我的10.7.1更新中消失了-/ etc / hosts现在对我来说一如既往)

我已经将Mac更新为Lion,现在我注意到,即使在DNS之后,最后还是查询/ etc / hosts。这很烦人,因为我在那里有很多用于开发的主机名。

名称解析顺序在哪里配置?我可以使用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。

更新:解决方案顺序显然可以在目录实用程序中进行配置。不幸的是,此安装的Directroy Utility在“服务”选项卡中不再列出BSD文件。

这个功能是从Lion消失的吗?还是用软管固定了此安装?

Answers:


5

我解决了问题(因此发布了答案而不是修改问题):

BSD文件确实没有在目录实用程序中或在dscacheutil中列出,但至少仍读取/ etc / hosts,但是存在一个问题,即似乎不再支持每个IP地址多个主机名,或者至少,他们在ATM上无法正常工作。

当您的旧/ 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文件的“目录”,该目录也不再可用
  • 正如我说的,/ etc / hosts仍然可以读取,但是上面有我描述的错误。

将每个条目放在自己的行上并不能解决我的问题。您可以在Chrome和Safari中访问“ foo”和“ foobar”吗?对我来说,它仅适用于Chrome。您可以覆盖现有网站,例如“ 127.0.0.1 www.google.com”吗?对我来说,这在Chrome或Safari中均不起作用。
richardkmiller

这样解决了十多岁等我。谢谢,这让我发疯。
Josh Bleecher Snyder 2011年

在10.7.3上为我解决了!
EMiller

3

问题是Lion处理.local TLD的方式有所不同,因为它保留用于某些多播DNS功能(由Bonjour使用)。我发现解决此问题的唯一方法是对开发主机使用不同的TLD(即:.dev)。对我来说效果很好,希望对其他人有帮助!


这绝对是我盒子上发生的事情。thx
slf

1

如我所料,传统的Unix处理方式是使用中的hostresorderor order指令/etc/resolv.conf。OS X确实(或可以使)读取和使用这些文件,但是OS X具有通过网络首选项管理的单独系统,我相信在启动时会覆盖这些配置文件。

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

这不能回答您的问题,但是信息和链接可能有助于找到一个问题。如果可以将其压缩成适合的内容,我会在评论中注明。


我了解dscl,但是我特别想使用hosts文件,该文件无法再在Lion中明确打开和关闭。它总是可以阅读,但是解析规则与以前不同-请参阅我对问题的回答。
pilif 2011年

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

1

我在尝试设置透明的软件更新服务器时在Snow Leopard中遇到了此问题。我现在也正在Lion上运行它。Software Update Server本身位于黑客和大手笔之间,但是这个问题已被很好地解决了。这是我所知道的:

  • Lion中确实存在/ etc / hosts,并且类似最新的OS X版本被设置为在DNS之后读取。
  • /etc/resolv.conf在Lion中存在,但是是/var/run/resolv.conf的符号链接。
  • 每当您的网络配置更新时,都会重写/var/run/resolv.conf。这可能是由于重新启动,DHCP租约续订等。

我创建了以下脚本。/ usr / local / hosts绑定:

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之前创建一个具有所需主机顺序的新文件,并将之前的文件连接到末尾。

我通过在/Library/LaunchDaemons/com.domain.hostsBind.plist中查看以下已启动的作业来观看主resolv.conf文件来调用此脚本(您可以将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 Software Update服务器一直有效。

最后要注意的是,如果将resolv.conf的路径更改为/etc/resolv.conf,则此方法也适用于Snow Leopard。Lion只是将符号链接的曲线球扔到了/ var / run /而不是/ etc /。

-b

PS:脚本来源:http : //forums.macrumors.com/showthread.php?p=6742920


当我尝试此操作时,该作业会在文件上保持前置顺序,因为更改文件会触发新的更新。
harmanjd 2013年

1

OSX Lion附带的apache服务器有很多问题。

  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. 主机文件是不完美的。
    现在打开位于的主机文件/etc/hosts。在这里,您将看到此行(和一些评论):

127.0.0.1 macbook-pro-van-bart.local

(其他计算机名不正确)。添加以下行(更改计算机名):

fe80::1%lo0 macbook-pro-van-bart.local
  1. 看一下您的apache配置
    确保您vhosts不依赖IP。像这样更改它们:

名称VirtualHost 127.0.0.1:80

成为:

名称VirtualHost *:80

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.