web-dev-qa-db-ja.com

ライオン/名前解決の順序

(この問題は10.7.1アップデートで解消されました-/ etc/hostsは今ではいつものように機能します)

MacをLionにアップデートしましたが、DNSの後でも、/ etc/hostsが最後に参照されていることに気付きました。開発に使用するホスト名がたくさんあるので、これは非常に面倒です。

名前解決の順序はどこで構成されていますか? dscacheutilを使用して確認できるので、SnowLeopardマシンからの指示は次のとおりです。

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

2つのエラーは別として、/ BSD/Localが/ etc/hostsを以前に読み取らせる原因であると思います。

この「キャッシュ検索ポリシー」が保存されている場所と、それを元に戻す方法を知っている人はいますか?

Dcslを使用してホスト名エントリを作成できることは知っていますが、さまざまなマシンで使用する/ etc/hostsを保持したいと思います。

更新:解決順序は、ディレクトリユーティリティで設定できるようです。残念ながら、このインストールのDirectroy Utilityは、BSDファイルを[サービス]タブに表示しなくなりました。

この機能はLionから削除されましたか?それとも、このインストールはホースで固定されていますか?

9
pilif

私は問題を解決しました(したがって、質問を修正する代わりに回答として投稿します):

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はまだ読み取られていますが、上記で説明したバグがあります。
5
pilif

問題は、Lionが.local TLDを異なる方法で処理することです。これは、一部のマルチキャストDNS機能(Bonjourで使用)用に予約されているためです。この問題を解決するために私が見つけた唯一の方法は、開発ホストに別のTLD(つまり、.dev)を使用することです。それは私にとってはうまくいきます、それが他の人に役立つことを願っています!

3

ご存知のとおり、これを処理する従来のUnixの方法は、/etc/resolv.confhostresorderまたはorderディレクティブを使用することです。 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

これはあなたの質問に答えませんが、情報とリンクはそれを見つけるのに役立つかもしれません。収まるように凝縮できれば、コメントに入れておきたいと思います。

1
RedGrittyBrick

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=2005062105164399

ネットワークの変更時にスクリプトを自動的にロードする場合は、.plistを作成し、それを/Library/LaunchDaemonsに配置して、次を使用する必要があります。

Sudo launchctl load -w /LibraryLaunchDaemons/name.your.plist
1
qpqp

OSXLionに同梱されている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. hosts-fileは完全ではありません。
    次に、/etc/hostsにあるhostsファイルを開きます。ここにこの行(およびいくつかのコメント)が表示されます:

127.0.0.1 macbook-pro-van-bart.local

(コース外の他のコンピューター名)。次の行を追加します(コンピューター名を変更します)。

fe80::1%lo0 macbook-pro-van-bart.local
  1. あなたのApache configを見てください
    vhostsがIPに依存していないことを確認してください。次のように変更します。

NameVirtualHost 127.0.0.1:80

になる:

NameVirtualHost *:80

1
Bart De Vos

透過的なソフトウェアアップデートサーバーをセットアップしようとしたときに、SnowLeopardでこの問題が発生しました。今はLionでも動作するようになりました。 Software Update Server自体は、ハッキングとクラッジの中間にありますが、この問題はかなりエレガントに解決されました。これが私が知っていることです:

  • / etc/hostsはLionに存在し、最近のOS Xバージョンと同様に、DNSの後に読み取られるように設定されています。
  • /etc/resolv.confはLionに存在しますが、/ var/run /resolv.confへのシンボリックリンクです。
  • /var/run/resolv.confは、ネットワーク構成が更新されるたびに書き換えられます。これは、再起動、DHCPリースの更新などが原因である可能性があります。

次のスクリプトを作成しました。/usr/local/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の前にホストの目的の順序で新しいファイルを作成し、前のファイルを最後まで連結します。

このスクリプトを呼び出すには、/ 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 SoftwareUpdateサーバーを使用して組織で機能しています。

最後に注意すべきことは、resolv.confのパスを/etc/resolv.confに変更した場合、これはSnowLeopardでも問題なく機能することです。 Lionは、シンボリックリンクのカーブボールを/ etc /ではなく/ var/run /に投げました。

-b

追伸:スクリプトのソース: http://forums.macrumors.com/showthread.php?p=674292

1
supreme_b_ing