/etc/hosts(ホスト名の手動解決)
『/etc/hosts』は、DNS サーバーへ問い合わせる前にホスト名と IP アドレスの対応を直接記述するテキストファイルです。ローカル開発環境やテスト環境でドメイン名を使いたいとき、DNS に登録せずに名前解決できるため、手軽なショートカットとして広く活用されています。/etc/nsswitch.conf の設定によって「ファイル参照 → DNS 問い合わせ」という優先順位が決まります。
構文
# -----------------------------------------------
# /etc/hosts のフォーマット
# -----------------------------------------------
# {IPアドレス} {ホスト名} [{エイリアス} ...]
# → フィールドはスペースまたはタブで区切ります
# → 1行につき1つの IP アドレスを記述します
# → 同じ IP に複数のホスト名(エイリアス)を追加できます
# → # 以降はコメントです
# 例: 192.168.1.10 appserver.local appserver
# -----------------------------------------------
# ループバックアドレス(デフォルトで記述されています)
# -----------------------------------------------
# 127.0.0.1 localhost
# → IPv4 のループバックアドレスです
# → 自分自身を指します
# ::1 localhost
# → IPv6 のループバックアドレスです
# -----------------------------------------------
# /etc/nsswitch.conf の hosts エントリ
# -----------------------------------------------
# hosts: files dns
# → "files" が先に来るため /etc/hosts が DNS より優先されます
# → "dns" は /etc/resolv.conf に記述された DNS サーバーを使用します
# 例: hosts: files mdns4_minimal [NOTFOUND=return] dns
# → mDNS(Avahi)も参照する場合の設定例です
# -----------------------------------------------
# 注意: ワイルドカードは使用できません
# -----------------------------------------------
# *.local のようなワイルドカード指定は /etc/hosts では無効です
# ホスト名ごとに1行ずつ記述する必要があります
構文一覧
| 項目 | 説明 |
|---|---|
| IPアドレス | 各行の先頭に IPv4 または IPv6 アドレスを記述します。そのホスト名が解決される宛先になります。 |
| ホスト名(FQDN) | IP アドレスの後に続けて記述します。appserver.local のような完全修飾ドメイン名を指定するのが一般的です。 |
| エイリアス(省略名) | ホスト名の後に空白区切りで追加できます。同じ IP に複数の名前を付けるときに使用します。 |
| コメント | # 以降の文字はコメントとして無視されます。行の末尾にも記述できます。 |
| 127.0.0.1 ループバック | IPv4 のループバックアドレスです。localhost に割り当てられ、デフォルトで記述されています。 |
| ::1 ループバック | IPv6 のループバックアドレスです。localhost に割り当てられ、デフォルトで記述されています。 |
| ワイルドカード不可 | *.local のようなワイルドカード指定には対応していません。マッチさせたいホスト名を1行ずつ個別に記述してください。 |
| /etc/nsswitch.conf の優先順位 | hosts: files dns の設定により、/etc/hosts(files)が DNS より先に参照されます。この順序を変更すると /etc/hosts が無効化される場合があります。 |
| 編集時の権限 | root 権限が必要です。sudo vi /etc/hosts または sudo nano /etc/hosts で編集します。 |
| 即時反映 | 編集後は保存するだけで反映されます。OS の再起動やサービスの再起動は不要です。ただし、アプリケーション側でキャッシュしている場合は再起動が必要になることがあります。 |
使用例
/etc/hosts
# ----------------------------------------------- # ローカル開発環境用 /etc/hosts 設定例 # ----------------------------------------------- # ループバック(デフォルト設定) 127.0.0.1 localhost ::1 localhost # ----------------------------------------------- # 開発環境の各サービスホスト # ----------------------------------------------- # フロントエンド開発サーバー 127.0.0.1 frontend.local # API サーバー(エイリアスも設定) 127.0.0.1 api.local api-server.local # データベース管理画面 127.0.0.1 dbadmin.local # ステージング環境(本番に近い構成で検証します) 192.168.1.20 staging.local stage.local # テストサーバー 192.168.1.30 testserver.local # ----------------------------------------------- # ブロッキング用(広告・トラッキングをループバックに向けます) # ----------------------------------------------- # 特定のドメインへのアクセスを遮断したい場合は 0.0.0.0 または 127.0.0.1 を指定します 0.0.0.0 ads.example.com
実行するコマンドは次の通りです。
$ ping -c 2 frontend.local PING frontend.local (127.0.0.1) 56(84) bytes of data. 64 bytes from localhost (127.0.0.1): icmp_seq=1 ttl=64 time=0.041 ms 64 bytes from localhost (127.0.0.1): icmp_seq=2 ttl=64 time=0.045 ms --- frontend.local ping statistics --- 2 packets transmitted, 2 received, 0% packet loss, time 1000ms rtt min/avg/max/mdev = 0.041/0.043/0.045/0.002 ms $ curl -I http://api-server.local/ HTTP/1.1 200 OK Server: nginx/1.24.0 Content-Type: application/json $ getent hosts staging.local 192.168.1.20 staging.local
概要
『/etc/hosts』は Linux が起動時から読み込む最も基本的な名前解決の仕組みです。DNS サーバーが存在しない環境・ネットワークに接続できない環境・本番 DNS に登録する前の検証など、さまざまな場面でドメイン名と IP アドレスを直接ひも付けるために使用します。/etc/nsswitch.conf に hosts: files dns と記述されている場合、/etc/hosts の内容が DNS より優先されるため、既存のドメインをローカルで別の IP に向けることもできます。ただし、ワイルドカードには対応していないため、サブドメインを複数使う場合は1行ずつ記述が必要です。ネットワークインターフェースの IP アドレス設定については network_interface を、ユーザー認証情報のファイルベース管理については passwd / shadow を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。