The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

手動設定網址對應 IP 的方式 ( 主機 IP 域名對應檔 hosts )

手動設定網址對應 IP 的技巧其實是很基礎的系統管理知識,不過好像還是有許多新手開發人員不知道可以這樣設定,今天我就來說說這個好用的技巧。

當我們網站建置完成後需要將程式與資料庫安裝到正式主機上,而通常都是先將程式、資料庫都設定正確,最後才是請系統管理員設定 DNS 讓 Domain Name 對應到正式主機的 IP,而設定 DNS 的過程通常會需要幾個小時的時間進行轉換,這導致我們很難立即透過「正式」的網址進行連線測試。

這問題尤其會影響到當我們使用 Google Maps API 開發的網站時,因為 Google Maps API 需要註冊一組 Registration Key,而這組 Key 是與 Domain Name 連動的,如果 DNS 遲遲沒設定完成,就很難自行測試或讓客戶來測試。當然,不只是 Google Maps API 會有這個問題,任何其他網站提供的 API 大多都是跟 Domain Name 做關連的。

除此之外,若公司內部採 NAT 架構連線上網的話,通常在內部架設的網站「對外」與「對內」的 IP 是不一樣的,如果系統管理員沒有將 DNS 設定好的話,你自己也可以透過修改 hosts 檔將對外的 Domain Name 改對應到內部的 IP 位址。

無論是 Windows 主機或 Linux 主機都有個 hosts 檔案,裡面定義著讓本機使用的 Domain Name <--> IP 對應表,任何程式在進行網路連線時通常會進行 DNS 伺服器進行 IP 的查詢,不過在查詢之前都一定會先來 hosts 檔查詢是否已經有定義過該 Domain Name 的對應 IP,如果沒有的話才會正式進行 DNS 查詢。

在 Windows 下通常 hosts 檔的路徑如下:

C:\WINDOWS\system32\drivers\etc\hosts

在 Linux 下通常 hosts 檔的路徑如下:

/etc/hosts

在 Windows 下的 hosts 檔案格式與 Linux 下的 hosts 檔案格式完全相同,以 Windows 為例,通常預設的內容如下:

# Copyright (c) 1993-1999 Microsoft Corp.
#
# This is a sample HOSTS file used by Microsoft TCP/IP for Windows.
#
# This file contains the mappings of IP addresses to host names. Each
# entry should be kept on an individual line. The IP address should
# be placed in the first column followed by the corresponding host name.
# The IP address and the host name should be separated by at least one
# space.
#
# Additionally, comments (such as these) may be inserted on individual
# lines or following the machine name denoted by a '#' symbol.
#
# For example:
#
#      102.54.94.97     rhino.acme.com          # source server
#       38.25.63.10     x.acme.com              # x client host

127.0.0.1       localhost

預設只會有一筆資料,也就是 localhost 對應到 127.0.0.1 (本機IP),這就是為什麼我們常常看到 localhost 的原因。

我們如果要新增新的 Domain Name <--> IP 對應,只要用記事本(Notepad)開啟該檔,並新增一行到最後面即可完成,第一欄輸入 IP 然後加些空白,再輸入 Domain Name 即可。例如:

10.0.0.55   testing.miniasp.com

除此之外也需要提醒各位,有些惡意軟體(malicious software)或病毒軟體(virus software)會直接修改你的 hosts 檔案,讓你的誤以為連到正常的網站,但事實上卻連到惡意的網站。例如說若有軟體將你的 hosts 修改成如下:

10.0.2.34   tw.yahoo.com

這樣你以後連到 http://tw.yahoo.com 就會改連到 10.0.2.34 這個 IP 了,這是個很危險的事,這樣的資安攻擊事件幾乎很難查詢異狀,所以定時檢查 hosts 檔案是有必要的。