﻿# 在國內外各家域名註冊商更新 Nameserver 紀錄的注意事項-2

長久以來我一直看不懂為什麼[國內的域名註冊商](https://www.twnic.tw/dnservice/register/registrar.php?lang=zh-tw)所提供的 DNS 設定介面與國外的差這麼多，主要疑問在於國外的域名註冊商在修改 Nameserver 時只能輸入域名，但國內大多域名註冊商在修改 Nameserver 時都必須同時輸入域名與 IP 位址，雖然我老早就知道如何設定，但是卻不能合理解釋為什麼國內域名註冊商要這樣設計，不過自從[理解 DNS 的反覆查詢的過程](/post/2010/12/27/DNS-query-process-explained-using-nslookup)後，終於恍然大悟，也能解釋為什麼了。

我們先來看 [HiNet 網域註冊](https://domain.hinet.net/) 在 [DNS異動與查詢](https://web.archive.org/web/20130627172017/http://domain.hinet.net:80/eng-ip.html) 這個功能的畫面，這是用來設定 Nameserver 的表單：

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/098e0f336e35ade94fbc-image_416.png)

大約在十多年前我第一次註冊網域時，當時是自己申請 ADSL 上網，也沒辦法用別人的 DNS 伺服器幫我代管域名，所以我就利用固定 IP 自己架設伺服器，因此當時的設定會像如上圖的方式設定，由於當時並沒有任何其他人的 DNS 伺服器幫我代管域名，在需要自己架設 DNS 伺服器且沒有其他域名可用的情況下這裡的 **DNS Server Name** 欄位就必須要設定與自己申請的網域相同的名稱。如上圖 doggy.com.tw 這個域名要設定兩台 Nameserver 的話，就必須用自己的域名來設定名稱 (ns1.doggy.com.tw, ns2….)，並且設定好正確的 IP 位址。

在這之後，我替客戶代管的域名越來越多，如果全部都用 ns1.<DOMAIN> 與 ns2.<DOMAIN> 這種方式設定的話，當 Nameserver 變更 IP 後就必須所有 DNS 全部修改一次 IP 位址才能完整更新，如果你代管 100 個域名的話就要修改 100 次，因此這種設定方法就不是很聰明。

然後，後來我將公司所有代管的域名全部都以 ns1.miniasp.com 與 ns2.miniasp.com 這兩個域名當作主要與次要 DNS 伺服器的域名，因此 doggy.com.tw 這個網域的 Nameserver 設定可如下圖所示：

![](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/c09074494f833937d4d9-image_417.png)

你可能會想問，如上圖這樣的設定，要是當 ns1.miniasp.com 與 ns2.miniasp.com 這兩個域名對應的 IP 變更後需要重新來[域名註冊商](http://zh.wikipedia.org/zh-tw/%E5%9F%9F%E5%90%8D%E6%B3%A8%E5%86%8C%E5%95%86)的表單進行 IP 修正嗎？答案是：**不需要！**

也就是說，就算 ns1.miniasp.com 與 ns2.miniasp.com 的對應 IP 已經不是 58.86.49.53 與 58.86.49.54 的情況下，你也不用擔心會有任何問題，因為在 DNS 查詢的過程中，在查詢到 doggy.com.tw 這個域名的 NS 紀錄時，是透過負責 **com.tw.** 所提供的 DNS 伺服器查詢出來的，而且查出來的是 NS 紀錄類型，並不包含任何 IP 資訊，所以當查出的 NS 紀錄並非與 doggy.com.tw 相同的父域名相同的話，就會改從指定的域名進行 A 記錄的查詢。以這裡的例子來說，當查出 doggy.com.tw 的 NS 記錄為 ns1.miniasp.com 與 ns2.miniasp.com 之後，就會改查出 ns1.miniasp.com 與 ns2.miniasp.com 的 A 紀錄，這樣才能知道到底 doggy.com.tw 的相關子域名的 DNS 紀錄應該向哪壹台 Nameserver 查詢資料。

如何證明以上觀念呢？我們一樣用 nslookup 工具幫我們查查看，從 Root Hints 查起的過程我們就省略不說了，有興趣請參考【[為什麼 nslookup 的查詢結果會有「未經授權的回答」的狀況](/post/2010/12/27/DNS-query-process-explained-using-nslookup)】文章說明，我們直接從負責 **.com.tw** 域名的 DNS 開始查起，我這裡選用的 DNS 伺服器是 **a.twnic.net.tw**

如下圖是查詢 [www.chungyo.com.tw](https://www.chungyo.com.tw/). 的 A 紀錄，查詢到的結果得知要查到這筆 A 記錄的 Nameserver 在 dns.chungyo.com.tw 與 dns1.chungyo.com.tw 這兩台主機，而且查詢的過程中直接得到了 IP 提示 (請看結果的最後六行)，也就是本文最早提到的這種設定方式，其指定的 IP 位址是有必要且需設定正確的！

```csharp
C:\>nslookup -type=a www.chungyo.com.tw. a.twnic.net.tw
(root)  nameserver = k.root-servers.net
(root)  nameserver = l.root-servers.net
(root)  nameserver = m.root-servers.net
(root)  nameserver = a.root-servers.net
(root)  nameserver = b.root-servers.net
(root)  nameserver = c.root-servers.net
(root)  nameserver = d.root-servers.net
(root)  nameserver = e.root-servers.net
(root)  nameserver = f.root-servers.net
(root)  nameserver = g.root-servers.net
(root)  nameserver = h.root-servers.net
(root)  nameserver = i.root-servers.net
(root)  nameserver = j.root-servers.net
a.root-servers.net      internet address = 198.41.0.4
a.root-servers.net      AAAA IPv6 address = 2001:503:ba3e::2:30
b.root-servers.net      internet address = 192.228.79.201
c.root-servers.net      internet address = 192.33.4.12
d.root-servers.net      internet address = 128.8.10.90
e.root-servers.net      internet address = 192.203.230.10
f.root-servers.net      internet address = 192.5.5.241
f.root-servers.net      AAAA IPv6 address = 2001:500:2f::f
g.root-servers.net      internet address = 192.112.36.4
h.root-servers.net      internet address = 128.63.2.53
h.root-servers.net      AAAA IPv6 address = 2001:500:1::803f:235
i.root-servers.net      internet address = 192.36.148.17
i.root-servers.net      AAAA IPv6 address = 2001:7fe::53
伺服器:  UnKnown
Address:  192.83.166.9

名稱:    www.chungyo.com.tw
Served by:
- dns.chungyo.com.tw
          210.66.198.161
          chungyo.com.tw
- dns1.chungyo.com.tw
          210.66.198.161
          chungyo.com.tw
```

接著我們來查詢 **www.doggy.com.tw.** 這筆 A 紀錄，最後查到的結果只提示出 ns1.miniasp.com 與 ns2.miniasp.com 而已，並沒有提示 IP 位址，這也代表即便你在過內的域名註冊商登記了 ns1.miniasp.com 與 ns2.miniasp.com 所對應的 IP 位址，但其 IP 位址在 DNS 查詢的過程中是不會被採用的：

```csharp
C:\>nslookup -type=a www.doggy.com.tw. a.twnic.net.tw
(root)  nameserver = a.root-servers.net
(root)  nameserver = b.root-servers.net
(root)  nameserver = c.root-servers.net
(root)  nameserver = d.root-servers.net
(root)  nameserver = e.root-servers.net
(root)  nameserver = f.root-servers.net
(root)  nameserver = g.root-servers.net
(root)  nameserver = h.root-servers.net
(root)  nameserver = i.root-servers.net
(root)  nameserver = j.root-servers.net
(root)  nameserver = k.root-servers.net
(root)  nameserver = l.root-servers.net
(root)  nameserver = m.root-servers.net
a.root-servers.net      internet address = 198.41.0.4
a.root-servers.net      AAAA IPv6 address = 2001:503:ba3e::2:30
b.root-servers.net      internet address = 192.228.79.201
c.root-servers.net      internet address = 192.33.4.12
d.root-servers.net      internet address = 128.8.10.90
e.root-servers.net      internet address = 192.203.230.10
f.root-servers.net      internet address = 192.5.5.241
f.root-servers.net      AAAA IPv6 address = 2001:500:2f::f
g.root-servers.net      internet address = 192.112.36.4
h.root-servers.net      internet address = 128.63.2.53
h.root-servers.net      AAAA IPv6 address = 2001:500:1::803f:235
i.root-servers.net      internet address = 192.36.148.17
i.root-servers.net      AAAA IPv6 address = 2001:7fe::53
伺服器:  UnKnown
Address:  192.83.166.9

名稱:    www.doggy.com.tw
Served by:
- ns2.miniasp.com

          doggy.com.tw
- ns1.miniasp.com

          doggy.com.tw
```

得知了這一層原理，在設定 DNS 的過程中就不會再怕怕的了，而且在需要變更 Nameserver 的 IP 位址時也不用怕會影響到眾多客戶的 NS 設定，瞭解這些細節之後對 DNS 管理的自信心再度提升許多。^\_\_^

**心得分享**

昨天在[噗浪上](http://www.plurk.com/willh/invite)分享了一段話：「無師自通的人通常有個好習慣，就是永遠對自己學會的東西保持著懷疑的態度，因為不知道自己的理解到底是不是對的，需要透過很多管道來證明一些似是而非的觀念。」似乎獲得一些跟我一樣都靠自修學習的人的迴響，算是有感而發的一段話。

其實我在技術學習的過程中遇到過很多挫折與困難，更尤其是在初學者的階段經常卡到沒有人能解釋的問題，有時候因為時間壓力就這樣錯過了深入細節的機會，所以對那些似是而非的觀念或學藝不精的技術一直不敢很有自信的表達，也不太敢說「我精通了某種技術」，因為當你學的越多，越會發現自己的不足，也需要用更謙卑的態度面對與學習各種新知，甚至於是經常修正自己以往的觀念。

之前也跟在 IT 業界頗為資深的好友聊過在應徵面試的過程，當有人年資只有 2 ~ 3 年的人跟你說他「精通」**某些領域**或**眾多領域**的時候，那很肯定他一定不夠精通，問幾個問題大概就能探出虛實，但我還是很肯定他的自信，如果這份是自信而非自傲，那麼當被證明觀念有偏差時就會自動導正之前錯誤的觀念，如果是自傲，可能就會引發衝突或人員不合，如此一來也會增加溝通上的困擾。

所以表現的有**自信**與**自傲**的差別在哪呢？這也是一個非常多人問我的問題，我個人認為「自信應該是讓對方知道我對我自己的觀點有信心，隨時歡迎來證明我是錯的，我並不會因為你的觀念跟我不同，或是時時來挑戰我的觀念而感到不悅」，然而「自傲的人在表達觀點時永遠讓別人覺得自己是笨蛋，只要觀點不同就有可能認為是呆子，如果有人硬要挑戰他的觀念又不能說服他時就會處於一種寒流的狀態，也許會引發冷戰也說不定」。

我時常跟公司的技術人員說，對學習到的技術必須要有自信，才能不斷成長，要有自信心支持你才能放心的向上爬，如果你一直處於沒有自信的階段（也許好幾年），那只能說你過程中學習的時間不夠、專心的時間不夠、與他人互動的次數太少，當然，如果在工作上能有一個不錯的環境可以經常與同事討論技術上的種種細節是比較好些，要是無法這樣的人也可以選擇各種技術論壇或社交網站尋找同好，或是乾脆找一間技術導向的公司（例如我們公司）都是不錯的選擇。

雖然我自己都是自學而成，但是我熱愛與人分享技術，除了自己找資料學習之外，也會想辦法與他人互動，互動的過程往往會有意料之外的收穫，當你有一天樂於當一個願意付出、樂於分享的人，相信你的世界也會海闊天空的。

在這民國 100 年、西元 2011 年的第一篇文章，祝各位在新的一年都能萬事順順利利、技術兔飛猛進！ ^\_\_^

**相關連結**

-   [國內受理註冊域名的機構清單](https://www.twnic.tw/dnservice/register/registrar.php?lang=zh-tw)
