カテゴリー
Network

もう悩まない!hosts ファイルの書き方

ドメインは 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
  1. IP アドレス+半角スペース+ドメイン名
  2. 文字コードは 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 ファイルとして認識しませんので、削除ください。

参考:Windows で拡張子を表示する

hosts の文字コード

先に述べたように日本語環境の場合、Windows の hosts ファイルのデフォルト文字コードは Shift_JIS にマイクロソフトが独自に拡張を加えた ANSI(CP932)です。
実際には、Shift_JIS(改行コード:CR+LF)、もしくは UFT-8(改行コード:CR+LF)であれば、ほとんどの場合は問題ないはずです。

TeraPad での文字コード表示

もし、純正ではないテキストエディタで編集して動作しない場合はメモ帳(Notepad)で開き、文字コードを ANSI で保存し直します。
これでほぼ間違いなく動作するでしょう。

メモ帳で文字コードに ANSI を選択

Macintosh での hosts 変更

hosts ファイルの場所

Mac では Hoster という定番アプリがよく使われるようですが、結局はオリジナルにオーバーライドする形になるので、ここでは通常のテキストエディタで直接編集してみます。
hosts ファイルは/private/etc/に存在しますが、private は不過視フォルダのため、デスクトッププルダウンメニュー「移動」→「フォルダに移動」にて/etc/とすることで、フォルダを開くことができます。

/private/etc/hosts

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
vim エディタを実行

パスワードを入力して、i キーまたは、a キーでインサートします。

最終行に追記して保存

esc で編集モードを抜けて「:wq」で保存します。

ping で確認してみよう

まずは設定したドメインに対して PING を実行してみましょう。

ping example.com
設定したドメインに PING 送信

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 ファイルが新しい行を追加したことがトリガーとなり、ファイルが再読み込みされ、正しく反映されたと解釈できるでしょう。
このような対処が効果的なケースもあることを覚えておくとよいです。

profile image

執筆:R3098

WEB サービス構築・監修が生業です。WordPress 関連では Aurora Heatmap などのプラグイン開発も行っています。悩めるサイト運営者の力になります!

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトは reCAPTCHA によって保護されており、Google のプライバシーポリシー および 利用規約 に適用されます。

reCaptcha の認証期間が終了しました。ページを再読み込みしてください。