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(Windows、Linux、Mac)におけるhostsファイルの格納パスは以下の通りです。
- Windows:
C:\Windows\System32\drivers\etc\hosts
- Mac OS:
/etc/hosts -> /private/etc/hosts
- Linux OS:
/etc/hosts
hostsの編集
hostsファイルはどのOSでも管理者権限で編集する必要があります。 WindowsとLinuxでhostsを管理者権限で編集する手順を説明します。
※Macでもhostsの編集は可能ですが、筆者がMac環境を持たないため割愛します。
Windowsの場合
- 「メモ帳」を「管理者として実行」で起動する
- 「ファイル」→「開く」を選択する
- 「C:\Windows\System32\drivers\etc\hosts」を開く
- 名前解決情報を入力
- 上書き保存
IPアドレス ドメイン名
Linuxの場合
- /etc/hostsを開く
- 名前解決情報を入力
- 保存
$ sudo vi /etc/hosts
IPアドレス ドメイン名
hosts活用例
前述のとおり一般的にはDNSサーバへ名前解決問い合わせを行うため、hostsは日常的に使用するものではありません。 それではどういうときにhostsが活用されるかというと、例えばサーバ移行の場面があてはまります。
例として、IP10.10.10.10の稼働中サーバをIP192.168.10.10の新サーバに移行するケースを考えてみます。各サーバは共通のドメイン名example.comをもちます。
ドメイン名 example.comを宛先にサーバへ接続をしようとするとDNSサーバが名前解決をして稼働中サーバのIP 10.10.10.10に接続をします。
こうなるとドメイン指定では新サーバへアクセスできなくなってしまいますが、hostsでexample.comを新サーバのIP192.168.10.10と関連付けることで、ドメイン指定でも新サーバに接続することが可能になります。
これによって移行前の新サーバに対するドメイン名を使用した動作確認を行うことができます。
まとめ
hostsのポイントは以下になります。
hostsは安易に変更すると想定した通信ができなくなるため危険なものですが、そのことを理解したうえで有用な場面に出会ったら活用を検討してみてください。
おまけ1:WindowsのhostsとDNSの優先順位
hostsとDNSの優先順位について説明をしましたが、WindowsではもうひとつDNSリゾルバキャッシュについても知っておくとよいと思います。 DNSリゾルバキャッシュは以前に名前解決した情報をキャッシュに登録しておき、次に同じドメインへ接続するときにそのキャッシュ情報をもとに名前解決をすることができます。 これを踏まえるとWindowsの名前解決の優先順位は以下の通りです。
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、dnsはDNSサーバです。左に記述された方を優先して参照し、名前解決を行います。