現在、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 が動作しているマシンに属するアドレスである必要があります。そうでない場合、このサーバー行はログに記録され、無視されます。クエリ ポート フラグは、送信元アドレスが指定されているサーバーでは無視されますが、ポートは送信元アドレスの一部として直接指定できます。