指定されたドメイン名に対してのみアップストリーム DNS サーバーを使用するように dnsmasq を強制するにはどうすればよいですか?

指定されたドメイン名に対してのみアップストリーム DNS サーバーを使用するように dnsmasq を強制するにはどうすればよいですか?

現在、dnsmasq.conf に次の行があり、すべてのリクエストを適切に処理します (/#/任意のドメインに一致します。これは必須です)。

address=/#/127.0.0.1

ただし、 以外の IP アドレスに解決する必要があるドメインもいくつかあります127.0.0.1

一時的な解決策として、以下が追加されました/etc/hosts:

209.85.148.95   ajax.googleapis.com
207.97.227.245  underscorejs.org
72.21.194.31    s3.amazonaws.com

残念ながら、これは非常に一時的な解決策であり、対象ドメインの IP アドレスが変更されるとすぐに機能しなくなります。

私の質問は、いくつかの(指定された)ドメイン名の IP アドレスを解決するために、dnsmasq がアップストリーム DNS サーバーを使用するように強制するにはどうすればよいでしょうか?

答え1

server=これは、例えば次のようなディレクティブを使って行うことができます。

server=/ajax.googleapis.com/8.8.8.8

同様に、ajax.googleapis.comドメインのGoogleパブリックDNSサーバーにクエリを実行します。

server=/amazonaws.com/209.244.0.3

amazonaws.com ドメインについて、Level3 のパブリック DNS サーバーにクエリを実行します。

複数のドメインをグループ化することができます

server=/co.uk/com/8.8.4.4

.co.uk および .com ドメインを 8.8.4.4 の DNS サーバーに送信します。

server=複数のディレクティブを持つこともできます

−S, --server=[/[<ドメイン>]/[domain/]][<ipaddr>[#<ポート>][@<ソース>[#<ポート>]]]

アップストリーム サーバーの IP アドレスを直接指定します。このフラグを設定しても /etc/resolv.conf の読み取りは抑制されません。抑制するには -R を使用します。1 つ以上のオプションのドメインが指定された場合、そのサーバーはそれらのドメインに対してのみ使用され、指定されたサーバーを使用してのみ照会されます。これはプライベート ネームサーバーを対象としています。ネットワーク上に xxx.internal.thekelleys.org.uk という形式の名前を 192.168.1.1 で処理するネームサーバーがある場合、フラグ -S /internal.thekelleys.org.uk/192.168.1.1 を指定すると、内部マシンのすべての照会がそのネームサーバーに送信され、その他はすべて /etc/resolv.conf 内のサーバーに送信されます。空のドメイン指定 // は、"非修飾名のみ" (つまりドットを含まない名前) という特別な意味を持ちます。# 文字を使用して、IP アドレスの一部として非標準ポートを指定できます。複数の -S フラグが許可され、必要に応じてドメインまたは ipaddr 部分が繰り返されます。

また、ドメインは指定するが IP アドレスは指定しない -S フラグも許可されています。これは、ドメインがローカルであり、/etc/hosts または DHCP からのクエリに応答できるが、そのドメインのクエリをアップストリーム サーバーに転送してはならないことを dnsmasq に伝えます。この場合、local は server の同義語であり、構成ファイルをより明確にします。

@ 文字の後のオプションの 2 番目の IP アドレスは、このネーム サーバーへのクエリの送信元アドレスを設定する方法を dnsmasq に指示します。これは、dnsmasq が動作しているマシンに属するアドレスである必要があります。そうでない場合、このサーバー行はログに記録され、無視されます。クエリ ポート フラグは、送信元アドレスが指定されているサーバーでは無視されますが、ポートは送信元アドレスの一部として直接指定できます。

関連情報