クリスマス目前!商品レビューまとめ記事

Linuxでhosts登録して名前解決する方法

本記事対象者
Linuxでhosts登録して名前解決する方法が知りたい方

ども。あいしんくいっと(@ithinkitnet)です。

ithinkit

Linuxで手軽に名前解決を行うには?
名前解決といえば、DNSといったイメージが強いですが、DNSレコードを編集することが難しいことがあります。
そんなときに便利なのが「hosts」と呼ばれるローカル端末のファイルを利用した名前解決になります。

DNSを利用する場合、参照しているサーバ、クライアント全てに影響が出ますが、hostsを利用した名前解決だとあくまで自分自身しか影響がないため、
開発期間等、一時的な名前解決には便利だったりします。
本ブログも最近サーバ移行したのですが、その時もMacのhostsに書いて名前解決させることで検証作業してました。

というわけで、Linuxにおけるhostsによる名前解決設定、確認方法について記載しておきたいと思います。

MEMO
Windowsでもhostsがあり、記載することで名前解決を行うことが出来ます。
Windowsのhosts設定については下記の記事参照。
Windows10でhostsファイルを簡単に編集する2つの方法

hostsファイル設定方法

編集対象となるファイルは「/etc/hosts」になります。

Point
Windowsのhostsの場所についてはこちらの記事参照。
Windowsのhostsファイルの場所と超簡単に開く方法

ここに名前解決させたいホストのIPアドレスとホスト名を記載します。
私の場合、i-think-it.netの名前解決を一時的にローカルIPに変更させ、動作検証したりしています。
基本的に

hosts記載例
[IPアドレス] [タブ or スペース] [ホスト名(FQDN)]
の並びで記載します。

例)i-think-it.netを192.168.11.100で名前解決させたい場合
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.11.155 i-think-it.net

上記で変更を保存すれば、i-think-it.netは192.168.11.155として名前解決されます。
なお、hostsファイルは即時反映なので書いて保存すればすぐに名前解決可能です。

ホストエイリアスも記載可能

ちなみにホスト名はタブスペース区切りでエイリアス(別名)として複数登録することも可能です。

例)i-think-it.net1、i-think-it.net2のどちらも192.168.11.100で名前解決させたい場合
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.11.155 i-think-it.net1 i-think-it.net2

Windowsのhostsは下記参照。
Windows10でhostsファイルを簡単に編集する2つの方法

hostsでDNSラウンドロビン的な書き方は可能?

DNSサーバで手軽に冗長構成として利用出来るDNSラウンドロビンですが、hostsでも可能なのでしょうか。
では、出来るか試してみます。

hostsに下記のように記載します。

# grep win2016 /etc/hosts
192.168.11.250 win2016
192.168.11.123 win2016

pingを打ちながら、192.168.11.250を停止させます。
すると、

# ping win2016
PING win2016 (192.168.11.250): 56 data bytes
64 bytes from 192.168.11.250: icmp_seq=0 ttl=128 time=2.712 ms
64 bytes from 192.168.11.250: icmp_seq=1 ttl=128 time=2.930 ms
64 bytes from 192.168.11.250: icmp_seq=2 ttl=128 time=4.484 ms
64 bytes from 192.168.11.250: icmp_seq=3 ttl=128 time=2.930 ms
64 bytes from 192.168.11.250: icmp_seq=4 ttl=128 time=2.839 ms
64 bytes from 192.168.11.250: icmp_seq=5 ttl=128 time=2.939 ms
Request timeout for icmp_seq 6
Request timeout for icmp_seq 7
Request timeout for icmp_seq 8
192.168.11.123に切り替わらないですねw
どうやらラウンドロビン的な使い方は出来ないみたいです。。。

このサイトでも検証されてましたが、やはりhostsでラウンドロビンは出来ないとの結論を出されてました。
参考 /etc/hosts に同一ホスト名で異なる IP アドレスを設定した場合の挙動

hostsの名前解決確認について

hostsに記載したホスト名で名前解決が行われているか、簡単に確認する方法はpingを打ってみると一発で分かります。
では、ホストエイリアスとして登録したホストに対してもpingしてみます。

ping結果1
# ping i-think-it.net1
PING i-think-it.net1 (192.168.11.155) 56(84) bytes of data.
64 bytes from i-think-it.net (192.168.11.155): icmp_seq=1 ttl=64 time=0.010 ms
64 bytes from i-think-it.net (192.168.11.155): icmp_seq=2 ttl=64 time=0.017 ms
ping結果2
# ping i-think-it.net2
PING i-think-it.net1 (192.168.11.155) 56(84) bytes of data.
64 bytes from i-think-it.net1 (192.168.11.155): icmp_seq=1 ttl=64 time=0.010 ms
64 bytes from i-think-it.net1 (192.168.11.155): icmp_seq=2 ttl=64 time=0.016 ms
i-think-it.net1、i-think-it.net2のどちらも同じIPアドレスが返されたことが分かりました。

名前解決の順序について

名前解決順序はnsswitch.confにて定義されています。
デフォルトだと、files(hostsファイル)→DNSの順番に名前解決が行われるため、hostsファイルに記載したホストはDNSよりも優先して名前解決されることになります。

/etc/nsswitch.conf
# dns Use DNS (Domain Name Service)
#hosts: db files nisplus nis dns
hosts: files dns myhostname

といったところが、hostsによる名前解決方法および確認となります。

ithinkit

念のため、hostsファイル編集前にはバックアップを取得しておくことをお勧めします。

以上、あいしんくいっとでした( ´∀`)

コメントを残す

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

*

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)