hostsによる名前解決

IPアドレスドメイン

インターネット上の通信はIP(Internet Protocol)アドレスで通信相手を指定しています。 IPアドレスは32bitのIPv4アドレスと128bitのIPv6アドレスがありますが、いずれにしても人間が覚えることは困難です。 このようなIPアドレスを人間が覚えやすい文字列に変換したのがドメイン名です。

ネットワークにおいてドメイン名とIPアドレスを変換することを名前解決と呼びます。

名前解決は一般的にネットワーク上に名前解決機能を提供するDNS(Domain Name System)サーバが構築されて、そのサーバに対してドメイン名で名前解決問い合わせを行うと、IPアドレスを取得できます。 ただ今回はローカルでできる名前解決の仕組みとしてhostsについて説明をしてみます。

hostsとは

hostsはIPアドレスドメイン名の関連付けを記述したファイルです。 hostsに名前解決情報を記述すると、OSはDNSサーバへ問い合わせをせずに、hostsの情報を参照して名前解決を行います。 各OS(WindowsLinuxMac)におけるhostsファイルの格納パスは以下の通りです。

  • WindowsC:\Windows\System32\drivers\etc\hosts
  • Mac OS/etc/hosts -> /private/etc/hosts
  • Linux OS:/etc/hosts

hostsの編集

hostsファイルはどのOSでも管理者権限で編集する必要があります。 WindowsLinuxでhostsを管理者権限で編集する手順を説明します。

Macでもhostsの編集は可能ですが、筆者がMac環境を持たないため割愛します。

Windowsの場合
  1. 「メモ帳」を「管理者として実行」で起動する
  2. 「ファイル」→「開く」を選択する
  3. 「C:\Windows\System32\drivers\etc\hosts」を開く
  4. 名前解決情報を入力
  5. IPアドレス ドメイン名
  6. 上書き保存
Linuxの場合
  1. /etc/hostsを開く
  2. $ sudo vi /etc/hosts
  3. 名前解決情報を入力
  4. IPアドレス ドメイン名
  5. 保存

hosts活用例

前述のとおり一般的にはDNSサーバへ名前解決問い合わせを行うため、hostsは日常的に使用するものではありません。 それではどういうときにhostsが活用されるかというと、例えばサーバ移行の場面があてはまります。

例として、IP10.10.10.10の稼働中サーバをIP192.168.10.10の新サーバに移行するケースを考えてみます。各サーバは共通のドメインexample.comをもちます。

ドメインexample.comを宛先にサーバへ接続をしようとするとDNSサーバが名前解決をして稼働中サーバのIP 10.10.10.10に接続をします。

DNSサーバによる名前解決のルート

こうなるとドメイン指定では新サーバへアクセスできなくなってしまいますが、hostsでexample.comを新サーバのIP192.168.10.10と関連付けることで、ドメイン指定でも新サーバに接続することが可能になります。

hostsによる名前解決のルート

これによって移行前の新サーバに対するドメイン名を使用した動作確認を行うことができます。

まとめ

hostsのポイントは以下になります。

  • hostsはDNSよりも優先される名前解決の仕組み
  • サーバ移行などで暫定的にドメインの向き先を変更したい場合で有効

hostsは安易に変更すると想定した通信ができなくなるため危険なものですが、そのことを理解したうえで有用な場面に出会ったら活用を検討してみてください。

おまけ1:WindowsのhostsとDNSの優先順位

hostsとDNSの優先順位について説明をしましたが、WindowsではもうひとつDNSゾルバキャッシュについても知っておくとよいと思います。 DNSゾルバキャッシュは以前に名前解決した情報をキャッシュに登録しておき、次に同じドメインへ接続するときにそのキャッシュ情報をもとに名前解決をすることができます。 これを踏まえるとWindowsの名前解決の優先順位は以下の通りです。

  1. DNSゾルバキャッシュ
  2. hosts
  3. DNSサーバ

hostsを変更しても名前解決に反映されない場合は、DNSゾルバキャッシュを参照している可能性があります。 DNSゾルバキャッシュはコマンドプロンプトから以下を実行することでリフレッシュできます。

C:¥>ipconfig /flushdns

おまけ2:LinuxのhostsとDNSの優先順位

hostsの名前解決はDNSよりも優先されると記載しましたが、Linuxでの優先順位は固定ではなく、 名前解決の優先順位は/etc/nsswitch.confで定義されています。 /etc/nsswitch.confの名前解決の優先順位はデフォルトでは以下のように記述されます。

hosts: files dns

hosts: の後ろに名前解決の参照先が記載されます。filesはhosts、dnsDNSサーバです。左に記述された方を優先して参照し、名前解決を行います。