3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

/etc/hostsとDNSについて歴史から調べてみた

Posted at

/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ファイルを確認するとこの様になっており、localhostbroadcasthostが設定されていました。

ここで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ファイルの内容を確認し、不正な変更がないかをチェックすることが推奨されます。

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?