web-dev-qa-db-ja.com

インターネット接続がない場合でも、OS XにDNSサーバーを設定する

私はインストールし、DNSサーバー(Dnsmasqのローカルインスタンス)を構成しました。これは、必要に応じてlocalhostに解決され、すべてOKです。

OS Xがresolv.confのコンテンツを空にし、このファイルの変更を反映する試みを無視するため、オフラインになると動作が停止します。

アイデアがありますか?オフライン時でもDNSを構成する方法は?

同様の問題(未解決): http://blog.steamshift.com/geek/leopard-lookupd-and-local-web-development-sites

主な動機は、アカウントキーとしてサブドメインを使用するRoRアプリケーションの開発を容易にすることです。また、/ etc/hostsで127.0.0.1 * .yourapp.localを使用することはできません。 127.0.0.1の.smackaho.stのように、ドメインsmackaho.stとsrt DNSを登録した人もいますが、オフラインで作業しているときは使用できません。

編集:scutilコマンドを試しましたが、オフラインの場合はDNSを変更できるようです

注:すべてのインターフェースがダウンしている場合、PrefでDNSサーバーを設定できません。パネル。

17
daeltar

以下の更新をご覧ください!

ローカルマシンでDnsmasqを使用することも楽しんでいますが、この問題も抱えていました。これが解決策です:

man 5 resolverから:

The configuration for a particular client may be read from a file
having the format described in this man page. These are at present
located by the system in the /etc/resolv.conf file and in the files
found in the /etc/resolver directory.

/etc/resolver/はデフォルトでは存在しません。自分で作成する必要があります。

また、manページから:

domain
  Domain name associated with this resolver configuration. This
  option is normally not required by the Mac OS X DNS search system
  when the resolver configuration is read from a file in the
  /etc/resolver directory. In that case the file name is used as the
  domain name.

したがって、devのトップレベルドメインのすべてのDNSクエリをローカルネームサーバーにルーティングする場合は、次のようにします。

# mkdir /etc/resolver
# echo 'nameserver 127.0.0.1' > /etc/resolver/dev

configd/etc/resolver/のファイルを変更しないため、この設定はネットワークの変更と再起動後も維持されます。

更新2012年7月17日

残念ながら、OS X Lion以降では、アクティブなインターフェースがない場合、トップレゾルバー(scutil --dnsで示される)は表示されなくなります。

# scutil --dns # Online
DNS configuration

resolver #1
  nameserver[0] : 127.0.0.1

...

resolver #8
  domain   : dev
  nameserver[0] : 127.0.0.1

# scutil --dns # Offline
DNS configuration

resolver #1

...

resolver #8
  domain   : dev
  nameserver[0] : 127.0.0.1

リゾルバー#1は空ですが、/ etc/resolverから派生したネームサーバーエントリーが残っていることに注意してください。

/ etc/resolver /ファイルで直接リゾルバードメインを指定できるため、特別なインターネットルートドメイン.を指定すると、次のようなグローバルリゾルバーエントリが作成されることがわかります。

resolver #8
  nameserver[0] : 127.0.0.1

これで、オフラインの場合でも、すべてのDNSクエリがlocalhostにルーティングされます。

もちろん、dnsmasqの--addressオプションのようなものを使用して、選択したドメインを127.0.0.1として解決する必要があります。

# dnsmasq --address=/dev/127.0.0.1

要約すれば:

  • すべてのネットワークインターフェースDNSサーバーを127.0.0.1に設定します。
 networksetup -setdnsservers Ethernet 127.0.0.1 
 networksetup -setdnsservers Wi-Fi 127.0.0.1 
 ... 
  • / etc/resolver/whateverファイルを作成します。
ネームサーバー127.0.0.1 
ドメイン。
  • ローカルDNSサーバーをセットアップして、満足してください。

cf. http://opensource.Apple.com/source/configd/configd-395.11/dnsinfo/dnsinfo_flatfile.c

29
guns

代わりに/ etc/hostsにエントリを作成しないのはなぜですか?本格的なDNSサーバーを実際に実行する必要がある状況について考えていません。私はMacでこのようなことを実現するために常にホストファイルエントリを使用しています。

OS Xのリゾルバーの動作は、Linuxまたは他のUnixのリゾルバーとは異なります。これはおそらく、悲しみの原因の一部です。たとえば、最初に使用する解決方法の設定があり、すべてのクエリの結果を一定期間キャッシュします。

「ネットワーク」環境設定パネルのインターフェースにDNSサーバーを追加しましたか?これにより、リゾルバーがDNSエントリを探すことを決定した場合に、そのサーバーがクエリに使用されるようになります。

2
Dave

(b/cと答えるまだコメントできません...)

どのようにオフラインにしますか?

(私が今得た最良の答え)

# man -S 5 resolver
 .
 .
 .
 Note that the /etc/resolv.conf file,
 which contains configuration for the default (or "primary") DNS resolver
 client, is maintained automatically by Mac OS X and should not be edited manu-
 ally.  Changes to the DNS configuration should be made by using the Network
 Preferences panel.

したがって、UIに何かを入力できるようになり、固定されているはずです。ローカルDHCPサーバーが提供するDNSサーバーが気に入らなかったときに、これを数回実行しました。

1
benc

OSXには、通常のLinux/UNIX DHCPクライアント構成にある/etc/dhcp3/dhclient.conf構成ファイルがありますか?

その場合は、コメント解除できる行が必要です

prepend domain-name-servers 127.0.0.1;

dHCPクライアントが常にその行をresolv.confに追加するようにするには

0
Kevin Kuphal

静的アドレスと127.0.0.1で構成された2番目のイーサネットサービスをDNSサーバーとして追加してみてください。または、DNSサーバーを127.0.0.1に設定するネットワークロケーションを追加します。これらの変更はどちらも、[ネットワーク]パネルの[システム設定]で行います。

0
Josh