AWS EC2 インスタンスのネットワークがあります。それらのほとんどは、デフォルトの VPC の DNS リゾルバを使用して、流出を防ぎ、内部ドメインを解決しています (カスタム TLD を使用)。すべて正常に動作しています。
ただし、インターネット全体にアクセスするために、一般的なパブリックリゾルバを使用する必要があるインスタンスが 1 つあります (例: 8.8.8.8)
私はus-east-1で/etc/systemd/resolved.confを次のように置き換えることでこれを動作させることができました。
[Resolve]
DNS=8.8.8.8 208.67.222
/etc/systemd/resolved.conf.d/MYTLD.confを追加する
[Resolve]
Domains=MYTLD
DNS=10.6.0.2
systemd-resolved を再起動すると、インスタンスはすべてのドメインを正常に解決します。ただし、これとまったく同じ構成を us-east-2 のほぼ同一のネットワークに適用すると、パブリック DNS は機能しません。
StackExchange で見つけた 1 つの提案は、/etc/resolv.conf を /run/systemd/resolve/resolv.conf にシンボリックリンクするというものでした。これにより、パブリック DNS は解決を開始しましたが、内部 TLD は停止しました。
どの地域でも一貫して DNS を解決するにはどうすればよいですか?
答え1
解決策を見つけました。
DNSリゾルバはデフォルトでブロックに設定されていました(当然です。これがこの演習のポイントです)。しかし、応答はNODATAに設定されていました。これにより競合状態が発生しました。systemd-resolveはリンクローカルマルチキャスト名前解決DNS 結果を取得します。これは、AWS 内部サーバーとパブリック サーバーの 1 つを同時にクエリしたことを意味します。LLMNR は、最初に成功した結果または最後に失敗した結果 (すべての結果が失敗の場合) を返します。
DNS リゾルバからの NODATA 結果は技術的には成功なので、最初に到着した場合はその結果が返されます。アクションを NXDOMAIN (systemd-resolve の観点からは失敗結果) に変更すると、問題は解決しました。