Mac OS X での DNS リゾルバの順序または「排他的」ルートの追加?

Mac OS X での DNS リゾルバの順序または「排他的」ルートの追加?

私は、いくつかの奇妙な理由により、次のような状況にある会社で働いています。

  • イーサネット: ゲストネットワークにあり、インターネットにアクセスできる
  • Wi-Fi: 企業ネットワーク内にあり、イントラネットにアクセスできる
  • アダプタの順序はイーサネットが最初になるように設定されています
  • route add必要なイントラネットルートを追加するために使用されます (10.[4/6/1/39].xx など)

問題は、特定のプログラムが IP ではなく名前付きアドレスを使用するため動作しないことです。したがって、scutil --dns外部 DNS サーバーでリゾルバー #1 を使用し、次にイントラネット DNS サーバーでリゾルバー #2 を使用します (ケーブルを切断して Wi-Fi コーポレーションのみにいる場合は、名前は問題なく解決されます)。

2 つの解決策を思いつきましたが、どのように機能させるかわかりません。

  • Wi-Fi が最初のアダプタであるにもかかわらず、何らかの理由で DNS リゾルバの順序を変更し、イントラネット DNS がインターネット DNS の前に試行されるようにします。
  • Wi-Fi アダプターを最初に配置して、「IP X を en0 経由で送信」ではなく、「X と等しくない IP を en1 経由で送信」という「除外」ルート コマンドを見つけます。

誰か私を助けてくれませんか?

答え1

同じ会社で働いていたようですね ;-)

以下のリンクから、以下の操作を実行できるRubyスクリプトを見つけてください。ヘネスはオプション4として説明している)ただし、ビューの代わりに DNS 要求の転送を使用します。ただし、これは簡単に修正できるはずです。 https://github.com/simonair/pubcode/blob/master/multihome_setup/multihome_setup.rb

このスクリプトは必要に応じて sudo を使用します。

正確に何をするのか理解している場合にのみ使用してください。

Locationこのスクリプトの実験を始める前に、を使用して新しい を作成することをお勧めしますSystem Preferences > Network。これにより、既知の正常な に戻すことで変更を元に戻すことができますLocation

何ができるか:

  • すべてのネットワークインターフェースを列挙し、企業ネットワークに接続されているものと他のネットワークに接続されているものを識別します。デフォルトゲートウェイIP アドレス (インターフェース自体に割り当てられたアドレスではありません)
  • 組み込みBINDDNS サーバーを構成して、企業ネットワークとインターネットの両方の要求を処理し、ドメインごとに転送します。たとえば、example.comは企業のネーム サーバーに転送され、はexample.net他のネーム サーバーに転送されます。
  • 企業インターフェースを介してサブネットのリストへのルーティングを確立し、残りは他のネットワークを介してルーティングを確立する
  • オプションとして、適切に構成されている場合は VPN 接続も開始されます。

ニーズに合わせてスクリプトを調整する必要があります。

知っておく必要があるrestore企業ネットワークから切断したら、引数を指定してスクリプトを再度呼び出します。そうしないと、すべての DNS 要求がローカル ネーム サーバーに送信され、企業環境の外部で解決できなくなります。

答え2

これが適切な完全な回答かどうかはわかりませんが、複数のコメントに分けるのは場当たり的な気がします。

1) 簡単な回避策:

イントラネット名をホストファイルに追加します。(/プライベート/etc/ホスト)。これは、少数のサーバーにのみアクセスする必要がある場合に有効で、比較的簡単に実行できます。また、これは間に合わせのようにも感じられ、サーバーの IP が変更された場合は、ホスト ファイルを手動で更新する必要があります。

2) イントラネット上の DNS サーバーがインターネット上の名前も処理していると仮定すると、その DNS サーバーのみを使用できます。ゲスト ネットワークはインターネットにアクセスでき、もう 1 つはイントラネットにアクセスできることが明確に述べられているため、これはありそうにありません。(イントラネットにインターネット アクセスがあるが、すべてをブロックしないファイアウォール ルールによってブロックされている場合は、その可能性があります。たとえば、ポート 53 ではありません)。

3) 両方の DNS サーバーを使用する (これを実行しようとしている) と、機能しない可能性があります。

これをテストするための OS/X マシンはありませんが、最近、一部のオペレーティング システムは DNS サーバーを順番に照会せず、最初のネームサーバーが失敗したときにセカンダリ ネームサーバーにフォールバックしないことを身をもって知りました。代わりに、リストされているネームサーバーをランダムに使用するようです。

その結果は次のようになります:
(インターネット DNS、イントラネット DNS の順序)
インターネット上のホストをクエリ -> 動作します。
イントラネット上のホストをクエリ -> インターネット上の DNS サーバー経由の検索に失敗し、次を試すのではなく諦めます。

OS/X でも同じかどうかはわかりませんし、テストできる Mac もありません。

4)ローカルネームサーバー

(太字にしたのは、これが最善の解決策だと思うからです)。

OS/Xには練るそしてそれは簡単そうに思える有効にするBINDで探したいキーワードはviewsです

答え3

私も同じような問題を抱えていましたマックOS多数の物理および仮想ネットワーク インターフェイスがあり、それらのネットワーク インターフェイスの可用性または非可用性に応じて、異なるサーバーに名前解決を要求する必要があります。

グーグルで調べた結果、より詳細な情報が、https://rakhesh.com/infrastructure/macos-vpn-doesnt-use-the-vpn-dns を参照してください。つまり、特定のリゾルバを定義し、macOSのシステムリゾルバの優先順位を変更する、私の特定の解像度のニーズごとに(例:「プライベート DNS サーバー 10.10.10.128 がアクセス可能な場合は、mydomain.tld を照会する必要があります。アクセスできない場合は、Google のパブリック 8.8.8.8 を照会します。」)それは十分だった

  1. /etc/resolver にファイルを作成します (/etc/resolver/per-domain-resolver など、好きな名前にします)

  2. それを一連のドメインネームサーバー、 そして検索順序指令、例

    domain mydomain.tld
    nameserver 10.10.10.128
    search_order 1
    nameserver 8.8.8.8
    

私の試みは、ドメインそして検索順序指令。

関連情報