ドメインは DNS(ドメインネームサーバ)という仕組みで IP アドレスと紐づけられています。DNS はドメイン(ホスト名)と IP アドレスを相互に変換します。
しかし、hosts ファイルがローカル環境にあった場合、DNS への問い合わせの前に参照されるため、こちらの設定が優先されます。
仕組みとしては単純ですが、意外にうまく認識しないケースも多いようなので、hosts の書き方の手順と注意点についてまとめました。
hosts ファイルとは
ブラウザなどで yahoo.co.jp という URL にアクセスすると DNS サーバに問い合わせて、118.151.235.191というような IP アドレスを取得してそれに対して通信を行います。
hosts ファイルが存在し、かつ、該当ドメインに対する記述があった場合、指定通りに名前解決を行うことができるわけです。
つまり、yahoo.co.jp という要求に対して任意のサーバへアクセスさせることできます。
hosts の役割りと意味は Windows PC であれ Mac であれ同じです。
どんな使い道があるの?
クライアントとしての立場ならサイトや広告のブロックですが、もっとも有効に活用できる例はウェブサイト制作の現場でしょう。
hosts ファイルを書き換えることでドメインと IP アドレスを仮想的に割り当てて、公開前のウェブサイトをインターネット上で確認したり、移転作業などで本来の IP アドレスとは違うサーバを参照できます。
DNS より hosts が優先されるので、悪用すればマルウェアなどウィルスで改竄することにより、特定のスパムサイトに誘導したりできるわけです。
Windows hosts の書き方
書式は Windows 系や UNIX 系も基本的に同様でシンプルなものです。
118.151.235.191 example.com
- IP アドレス+半角スペース+ドメイン名
- 文字コードは ANSI
※記述する場所はどこでも構いませんが、最後の行が分かりやすいでしょう。
hosts ファイルの場所
現役の Windows では11も含めて共通で下記の場所にあります。
C:\Windows\System32\drivers\etc
「プログラムとファイルの検索」やエクスプローラーのアドレスバーに以下をコピペしても表示できます。
%WinDir%\System32\Drivers\Etc
Windows10の hosts ファイル
# Copyright (c)1993-2009 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a ‘#’ symbol.
#
# For example:
#
# 102.54.94.97 rhino.acme.com # source server
# 38.25.63.10 x.acme.com # x client host# localhost name resolution is handled within DNS itself.
#127.0.0.1 localhost
# ::1 localhost
118.151.235.191 example.com
上記では例として yahoo の IP アドレスに example.com というドメインを紐づけています。
変更する場合の注意点は該当ファイルをそのままテキストエディタなどで開くと権限の問題で保存することができません。
アプリケーションを管理者権限で実行するか、デスクトップなどにコピーしてから編集後、書き換えてください。
コピーの際も権限を要求される場合がありますので、適時、実行ください。
※保存したファイルに.txt などの拡張子が付いている場合は hosts ファイルとして認識しませんので、削除ください。
hosts の文字コード
先に述べたように日本語環境の場合、Windows の hosts ファイルのデフォルト文字コードは Shift_JIS にマイクロソフトが独自に拡張を加えた ANSI(CP932)です。
実際には、Shift_JIS(改行コード:CR+LF)、もしくは UFT-8(改行コード:CR+LF)であれば、ほとんどの場合は問題ないはずです。
もし、純正ではないテキストエディタで編集して動作しない場合はメモ帳(Notepad)で開き、文字コードを ANSI で保存し直します。
これでほぼ間違いなく動作するでしょう。
Macintosh での hosts 変更
hosts ファイルの場所
Mac では Hoster という定番アプリがよく使われるようですが、結局はオリジナルにオーバーライドする形になるので、ここでは通常のテキストエディタで直接編集してみます。
hosts ファイルは/private/etc/に存在しますが、private は不過視フォルダのため、デスクトッププルダウンメニュー「移動」→「フォルダに移動」にて/etc/とすることで、フォルダを開くことができます。
Machintosh の hosts ファイル
#
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost
255.255.255.255 broadcasthost
118.151.235.191 example.com
※最終行は Windows の例と同じく、example.com というドメインを紐づけています。
テキストエディタでの編集
デフォルトのアプリは純正のテキストエディットとなっているはずですが、権限の問題で上書き保存ができません。
このため、あらかじめデスクトップなどにコピーしてから編集するか、別名保存します。
書き換えは Windows と同じく、最終行に「IP アドレス+半角スペース+ドメイン名」で追記します。
※hosts ファイルを etc フォルダに移動する際にはアカウントのパスワード入力が必要です。
ターミナルでの編集
ターミナルの vim で書き換えましょう。
root 権限が必要なため、sudo で実行します。
sudo vim /etc/hosts
パスワードを入力して、i キーまたは、a キーでインサートします。
esc で編集モードを抜けて「:wq」で保存します。
ping で確認してみよう
まずは設定したドメインに対して PING を実行してみましょう。
ping example.com
hosts が正常に認識できていれば、example.com へ PING を打つと118.151.235.191から応答が返ってきます。
hosts ファイルは本来ブラウザでも即時適用されますが、PING が正常に返ってきているが、ブラウザで反映されない場合はスーパーリロードを試してください。
変更した hosts が効かない
Proxy hosts が優先
前提条件として、ネットワークがプロキシーを経由していないか?
どの OS においても proxy(プロキシー)を使用している環境では実際にアクセスする hosts ファイルはクライアントのローカル環境ではなく、プロキシーサーバになります。
DNS キャッシュのクリア
もっとも考えられる原因が古い DNS キャッシュの影響です。
hosts ファイルの編集しても、反映されない場合は各 OS でキャッシュをクリアするためのコマンドを実行します。
Windows
DNS キャッシュが古い情報を保持しているため、hosts ファイルの変更がすぐに反映されないことがある。
ipconfig /flushdns
Linux
systemd-resolved や dnsmasq などのサービスが DNS キャッシュを保持しているため、hosts ファイルがすぐに反映されないことがある。
sudo systemd-resolve --flush-caches
sudo service dnsmasq restart
systemd-resolve や dnsmasq のサービスを再起動する。
MacOS
MacOS も DNS キャッシュを持っており、hosts ファイルの変更が反映されないことがある。
sudo dscacheutil -flushcache
sudo killall -HUP mDNSResponder
補足
客先の Windows11でどうしても hosts ファイルが認識しないというケースに出くわしました。
どれも該当しないのに、指定のサーバに向きません。
- 記述書式
- ファイル形式
- 拡張子
- 保存場所
- DNS キャッシュ
ほとほと困り果て、hosts ファイルに違うドメインのエントリをもう1行加えてみたところ、すべて適切に反映されるようになりました。
これは、DNS キャッシュのクリアやクライアントサービスのリスタートを試しても適用されない hosts ファイルが新しい行を追加したことがトリガーとなり、ファイルが再読み込みされ、正しく反映されたと解釈できるでしょう。
このような対処が効果的なケースもあることを覚えておくとよいです。