/etc/hosts ファイルとは
ホスト名とIPアドレスと対応させるためのファイル
##
# 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
::1 localhost
ローカルで/etc/hosts
ファイルを確認するとこの様になっており、localhost
とbroadcasthost
が設定されていました。
ここで127.0.0.1f
(IPv4)と::1
(IPv6)に対しlocalhost
を対応させているため、自分のPCにアクセスできる様になっています。
要するに自分のPCで使えるDNSサーバの様な役割ということですね。
hostsファイルについて調べていたら歴史について出てきたので、少し深掘りして簡単にまとめました。
hostsファイルとDNSの歴史
hosts
ファイルは元々DNSサーバーの役割をしていたらしい!
まだインターネットが今の様に普及されておらずDNSという概念もない頃、IPアドレスで特定のサーバーにアクセスする必要がありました。
それを解決するために、サイトがIPアドレスに対応したホスト名を定義した HOSTS.TXT
を提供しており、それを自分のPCの /etc/hosts
ファイルに保存していました。
これによりホスト名を指定すればアクセスしたいサーバーにアクセスできるため使い勝手が大幅に向上しました。
しかし初めは各サイトがそれぞれの HOSTS.TXT
を提供してたため、ユーザーは複数のホストファイルをコピーする必要があり非効率でした。
そこでStanford Research Institute(SRI)のNetwork Information Center(NIC)
略して SRI-NIC
というホストで HOSTS.TXT
ファイルを1箇所で集中管理することにしました。
これにより1箇所から HOSTS.TXT
をダウンロード(FTPで取得)すればいいので1973年〜1983年頃まではうまく機能していた様です。
しかし集中管理にも問題が出てきました。
初めは数百台しか無かったホストもネットワークが普及していくにつれてホスト数は膨大になり1983年頃には数万台になったため、ホストファイルは大きくなりすぎてしまいました。
データ量が大きいのでネットワーク回線もすぐに一杯になったり、変更も頻繁に行われるため、最新の状態になっておらずエラーが発生したりと、問題点が多く出てきて成り立たなくなってしまいました。
そこで出た解決策が Domain Name System(DNS)
です。
HOSTS.TXT
で管理していた問題を以下のように解決しています。
- 「分散管理する」
-
HOSTS.TXT
では1箇所で管理していたため管理しているホストの負荷が高くサーバーがダウンしていた -
DNS
では複数のサーバーで管理しているため、負荷を分散できる(一番上位のルートサーバーは13組)
-
- 「ホスト名を階層構造で管理する」
-
HOSTS.TXT
ではデータが増えすぎてホスト名管理が難しくなり、重複する問題があった -
DNS
では「.」ドットでドメイン名を区切って名前空間を管理して重複を防ぐことができる
-
- 「常に最新の情報」
-
HOSTS.TXT
ではタイムラグなどが発生しエラー原因になっていた。 -
DNS
では分散環境下でも以下の様な仕組みで整合性のとれた情報が取得できる様にしている。- TTL(Time To Live)による期限付きキャッシュ
- ゾーン転送による定期的な同期
- DHCPなどからの動的な更新
- シリアル番号による更新管理
-
これによりインターネットでの名前解決で /etc/hosts
ファイルではなく DNS
が使われる様になりました。
/etc/hosts の使い道
ローカル環境でのテスト
- 例えば
127.0.0.1 example.com
と設定して開発サーバーにアクセスするなど
アクセスを制御する
- 広告サーバーのドメインなどを127.0.0.1に向けることで広告をブロックする
- 特定のドメインにアクセスできない様にする
内部システムでの名前解決
- 社内限定のサーバーに対してプライベートな名前解決をする
- DNSを必要としない様な小規模ネットワークでの運用
上記の様な使い道があると思いますが、基本的にDNSよりも先に/etc/hosts
を参照するので、誤って実在するホスト名を記述していたりしたら想定外のIPアドレスへアクセスしてしまう可能性があるので、注意する必要があります。また、セキュリティの観点から、定期的にhostsファイルの内容を確認し、不正な変更がないかをチェックすることが推奨されます。