インターネットに接続していないときでもOS XでDNSサーバーを設定する


17

必要に応じてlocalhostに解決されるDNSサーバー(Dnsmasqのローカルインスタンス)をインストールし、構成しました。すべて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サーバーを設定できません。パネル。


関連:dnsmasqは、スーパーユーザーのOS X Yosemiteインターネットに接続せずに機能しません(ソリューションはありませんが、いくつかのリファレンスがあります)。
アルジャン

回答:


29

以下のアップデートをご覧ください!

また、ローカルマシンで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.

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

# 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


それがまさにpowが使用しているものです(pow.cx)。
daeltar

-残念ながら、それは動作しませんgithub.com/37signals/pow/issues/104
daeltar

3
@gunsはこのソリューションがヨセミテでまだ機能しますか?dnsmasqは、アップグレードするまでオフラインで正常に機能していました。今、私が実行したときに、すべての私が取得scutil --dns、インターネットに接続されていないときに、すべて私がされますNo DNS configuration available 、私は上のあなたの指示に従ったが、運
MatthewLee

1
@MatthewLee、はい、あなたは正しいです、唯一の回避策は、hostsファイルにエントリを追加することです。
レンシエル14

1
誰でもヨセミテの解決策を見つけましたか?
jmagnusson

2

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

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

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


クライアントマシンでDNS フォワーダーを使用する1つの理由は、リゾルバデーモンがすべてのリクエストで肥大化したホストファイルをgrepすることによるパフォーマンスの低下を招くことなく、アド/マルウェアドメインの大きなブラックリストを維持するためです。このアプローチのメリットにもかかわらず、dnsmasqは/ etc / hostsをメモリにロードし、ルックアップ時間が最小限に抑えられます。また、Web開発を行う場合、作業中のすべてのサイトにローカルドメインを追加するという面倒な作業を避けることができます。

1

(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サーバーが気に入らなかったときに、これを数回行いました。


NetworkPreferencesでDNS構成を変更すると、/ etc / resolv.confファイルが変更されます。
ファビアンZeindl

0

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

その場合、コメントを外すことができる行が必要です

prepend domain-name-servers 127.0.0.1;

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


resolv.confへの追加はOS Xでは役立ちません。resolv.confのコンテンツは生成され、/ var / run / resolv.conf上のシンボリックリンクです。 。
daeltar

0

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


-2

置くだけでいいかもしれません

127.0.0.1       localhost

/ etc / hostsに追加するため、localhostを見つけるためにリゾルバを使用する必要はありません。


1
サブドメインに必要なので、これはノーです。
daeltar
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.