/etc/hosts は、ローカルシステムの名前サービススタックへ静的なアドレスと名前の対応を提供します。ループバック名、起動時の依存関係、範囲を絞ったテストに便利ですが、ほかのホストへレコードを公開したり、DNS を更新したりはしません。
DNS · レッスン 4
/etc/hosts
ローカルの hosts ファイルが Linux の名前解決へ参加する仕組みと、安全なテスト方法を学びます。
ファイルを読む
各行は IPv4 または IPv6 アドレスで始まり、その後に一つ以上の名前が続きます。
127.0.0.1 localhost
192.0.2.25 app-test.example.net app-test
2001:db8::25 app-test-v6.example.net app-test-v6
コメントは # で始まります。一部のツールは慣例上、最初の名前を canonical、後の名前を alias として扱いますが、アプリケーションと resolver API によって動作は異なります。同じ名前に対する重複または競合エントリは避けてください。
通常の /etc/hosts の対応付け行では、最初に何を書きますか?
Resolver の参照順
通常 /etc/nsswitch.conf にある Name Service Switch 設定は、システムの resolver 関数が files、DNS、multicast system などの情報源をどのように組み合わせるか決めます。よくある行は次のとおりです。
hosts: files dns
ポリシーを調べず、常に files が先だと想定しないでください。アプリケーションが独自の DNS library、cache、proxy、encrypted resolver を使い、システムの経路に従わない場合もあります。
システム resolver が DNS より先に /etc/hosts を参照するかどうかは、何で決まりますか?
システム Resolver 経由でテストする
getent を使って、設定されたシステムの名前サービス経路を動かします。
$ getent ahosts app-test.example.net
dig は DNS へ直接問い合わせるため、通常 /etc/hosts の対応を報告しません。この違いは有用です。getent は成功し dig は成功しない場合、ローカル情報源や resolver ポリシーの違いが考えられます。
通常のシステム名前解決が hosts ファイルのエントリを認識するか調べるのに適したツールはどれですか?
安全に編集する
必要な localhost とホスト identity のエントリを維持し、意図するアドレスを確認して、復旧可能な特権 editor の手順で変更します。軽いテストのために実在する公開ドメインを上書きしてはいけません。認証情報やアプリケーション通信を予期せず別経路へ向ける可能性があります。専用のテスト名を使い、実験後にエントリを削除してください。
編集後は、アプリケーションがキャッシュを保持したり別の resolver を使ったりする可能性があるため、正確なアプリケーションをテストします。永続的な上書きは文書化し、目的を終えた後まで黙って残らないようにしてください。
公開サービス名を上書きせず、専用のテスト名を使うのはなぜですか?
Resolver Server の設定
/etc/resolv.conf は従来 DNS resolver 設定を列挙しますが、NetworkManager、systemd-resolved、DHCP などのマネージャーによって生成されることがよくあります。symlink とファイルコメントを調べ、上書きされる生成出力ではなく、管理している設定元を変更してください。
/etc/resolv.conf を編集する前に何をすべきですか?
レッスン完了
/etc/hosts を完了しました
これで、/etc/hosts を管理されたローカル resolver 入力として利用できます。
アドレスを先に書き、意図した名前と alias を続ける。
Name Service Switch の順序を想定せず確認する。
getentでシステム解決を、digで DNS を別々にテストする。専用の一時名を使い、実際のアプリケーションを検証する。
設定管理主体を通じて resolver server を変更する。