Domain-Name-System

DNS txt 記錄將子域指向其他域

  • July 13, 2018

我在 gandi.net 有一個 SimpleHosting 實例,連接到 Gandi 的一個域mygandidomain.org,以及另一個在myrootdomain.name其他地方註冊的域。

我成功地在我myrootdomain.name的 DNS 記錄中添加了一個 CNAME 條目,讓一個子域subdomain.myrootdomain.name指向我在 Gandi 的 SimpleHosting 實例,即:

subdomain 10800 IN CNAME mygandidomain.org.

當我現在subdomain.myrootdomain.name使用 Google Chrome 訪問時,我收到一條錯誤消息:“錯誤 404 Vhost 未知。” 此錯誤消息來自 Gandi,而不是來自我的其他域名註冊商。所以我斷定CNAME條目已經生效。

但是,為了解決這個錯誤,我只閱讀了之後的說明。Gandi 給出的指示告訴我應該執行以下操作:

Gandi 的指示說我應該指出它gpaas12.dc2.gandi.net.,即

添加 CNAME 行

subdomain 10800 IN CNAME gpaas12.dc2.gandi.net.

代替

subdomain 10800 IN CNAME mygandidomain.org.

…並且,為了授權自己成為域的所有者,我應該刪除其中的任何一個嗎?我應該保留哪一個,以符合 Gandi 的說明添加:

@ 10800 IN TXT “test=s0m3r4nD0mG!bB3ri$hStr1nG” 我還應該添加一個 TXT 條目:

@ 10800 IN TXT "test=s0m3r4nD0mG!bB3ri$hStr1nG"

帶有一些由 Gandi 提供的亂碼隨機字元串。

所以我就這麼做了。由於我不能直接輸入這些行,但必須使用一些輸入 Web 界面,我輸入了一次 TXT 條目值,一次帶引號,一次不帶引號,子域(輸入subdomain.myrootdomain.name.“主機”輸入欄位)和根域(輸入myrootdomain.name.到“主機”輸入欄位),只是為了確定,因為我不允許在該輸入欄位中輸入“@”或“*”。

我將所有添加和更改的 DNS 條目的 TTL 更改為 300。所以它們應該早就更新了。但是探勘時仍然會發生以下情況:

$ dig txt subdomain.myrootdomain.name

; <<>> DiG 9.10.3-P4-Ubuntu <<>> txt subdomain.myrootdomain.name
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 50813
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 512
;; QUESTION SECTION:
;subdomain.myrootdomain.name.   IN  TXT

;; ANSWER SECTION:
subdomain.myrootdomain.name. 3599   IN  CNAME   mygandidomain.org
mygandidomain.org.  10799   IN  TXT "v=spf1 include:_mailcust.gandi.net ?all"

;; Query time: 52 msec
;; SERVER: 127.0.1.1#53(127.0.1.1)
;; WHEN: Wed Jul 11 05:42:59 CEST 2018
;; MSG SIZE  rcvd: 85

所以 CNAME 似乎仍然指向mygandidomain.org,因為我在一開始就設置了它(在將其更改為 之前gpaas12.dc2.gandi.net.

我不知道這是否不好,因為如果我理解正確的話,它mygandidomain.org應該指向託管實例。gpaas12.dc2.gandi.net(我實際上可以通過 訪問我的 Gandi 託管網站mygandidomain.org

但是,我想我應該看到我subdomain.myrootdomain.name現在添加的任何 TXT 條目。

如果我正確理解這些行:

;; QUESTION SECTION:
;subdomain.myrootdomain.name.   IN  TXT

…這意味著有一個 TXT 條目subdomain.myrootdomain.name,但是,它是空的?

Gandi 域的 DNS 條目中似乎只有一個非空的 TXT 條目:

;; ANSWER SECTION:
subdomain.myrootdomain.name. 3599   IN  CNAME   mygandidomain.org
mygandidomain.org.  10799   IN  TXT "v=spf1 include:_mailcust.gandi.net ?all"

…,這與我應該添加到的 TXT 條目無關myrootdomain.name

我確實使用提供的字元串值添加了指定的 TXT 條目,一次帶引號,一次不帶引號, formyrootdomain.name和 for subdomain.myrootdomain.name

關於用於探勘的 TXT 條目的相同結果myrootdomain.name(我認為 TXT 條目應該是,根據 Gandi 的說明):

;; QUESTION SECTION:
;myrootdomain.name.     IN  TXT

只有一個空的 TXT 條目?更改現在是否應該尚未生效?

我還通過https://developers.google.com/speed/public-dns/cache的界面在 Google 的公共 DNS (8.8.8.8) 中多次刷新了 CNAME 和 TXT 條目,用於myrootdomain.namesubdomain.myrootdomain.name. 我在這台機器上使用 Google DNS 伺服器作為我的主 DNS。

當我subdomain.myrootdomain.name使用 Google Chrome 瀏覽器時,我仍然收到錯誤“錯誤 404 Vhost unknown”。- 從 DNS 探勘結果來看,這可能是意料之中的。此錯誤消息來自 Gandi,因此至少 CNAME(togpaas12.dc2.gandi.net或仍然 to mygandidomain.org)已在那裡生效。我猜,只有應該有助於授權域所有權的 TXT 條目仍然無法辨識。

但奇怪的是,當我subdomain.myrootdomain.name使用 Firefox 訪問時,我仍然從我的非 Gandi 域提供商處收到較舊的錯誤消息:“此地址下沒有配置網站。”

我的 TXT 輸入輸入有問題嗎?正如我所說,我將它們添加到兩者subdomain.myrootdomain.name(可能不符合 Gandi 的說明)以及 to myrootdomain.name(可能符合 Gandi 的說明),只是因為我無法輸入“@”或“*”代替,並想確保我包含了預期的條目。而且我還添加了兩次,一次包含引號,一次不包含引號,假設 Gandi 只會選擇正確的條目。

我應該刪除其中任何一個嗎?我應該保留哪一個,以符合 Gandi 的說明添加:

@ 10800 IN TXT "test=s0m3r4nD0mG!bB3ri$hStr1nG"

我看不到我的輸入實際上是如何轉化為這些文本行的。

但是$ dig ....到目前為止,他們似乎都沒有出現。我不應該看到他們在做的時候出現$ dig ...嗎?正如我所說,TTL 是 300(起初更長),我做了Google DNS 刷新的事情。

感謝您提供有關如何解釋這裡發生的事情的任何提示和技巧。

編輯:它現在工作。不太確定,但我的直覺是我添加的額外 TXT 條目subdomain.mydomain.name.在某種程度上與subdomain.mydomain.name.. 手冊說只為mydomain.name.而不是添加TXT subdomain.mydomain.name.,但正如我解釋的那樣,我“只是為了確定”兩者都做了。我不太確定這就是訣竅,但這是我改變的最後一件事,現在它起作用了。

這個相當長的問題是在 Server Fault 上多次看到的常見誤解的集合。此外,像這樣的問題通常會通過我們可以測試的實際域獲得更詳細的答案。我希望您在閱讀這些內容後對這裡發生的事情有更好的理解:

  • >

當我subdomain.myrootdomain.name使用 Google Chrome 瀏覽器時,我仍然收到錯誤“錯誤 404 Vhost unknown”。- 從 DNS 探勘結果來看,這可能是意料之中的。

這與 DNS 無關:您可以看到 Gandi 的頁面這一事實表明 DNS 已指向他們的伺服器,但他們的 Web 伺服器未配置為辨識它。要連結域,您首先需要從實例控制面板將虛擬主機添加到您的實例

不在 Gandi 的域的第二步是為子域添加 ,CNAMETXT在域頂點:@ IN TXT相當於myrootdomain.name. IN TXT. 從手冊中可以看出,該TXT記錄的形式似乎是subdomain=hash. 如果您給定的記錄確實有test=s0m3r4nD0mG!bB3ri$hStr1n,那可能是 ment fortest.myrootdomain.name而不是您的subdomain.myrootdomain.name. 在這種情況下,您需要從頭開始添加您計劃使用的確切子域。

  • >
;; QUESTION SECTION:
;subdomain.myrootdomain.name.   IN  TXT

…這意味著 subdomain.myrootdomain.name 有一個 TXT 條目,但是它是空的?

不,這是顯示您要查找的內容的問題部分。它不是空的,它只是沒有結果。結果在答案部分。它不是空的:

;; ANSWER SECTION:
subdomain.myrootdomain.name. 3599   IN  CNAME   mygandidomain.org
mygandidomain.org.  10799   IN  TXT "v=spf1 include:_mailcust.gandi.net ?all"
  • >

我將所有添加和更改的 DNS 條目的 TTL 更改為 300。所以它們應該早就更新了。

查詢被記憶體TTL幾秒鐘。如果之後更改 TTL 時間,它不會影響已記憶體的查詢。它最初被記憶體了10800幾秒鐘,即 3 個小時,其中這3599幾秒鐘是在上次編輯您的問題時留下的。

如果您需要檢查記錄是否在您的權威名稱伺服器上更新,您必須直接對它們執行查詢(替換NS為您的域的實際值):

dig subdomain.myrootdomain.name A @authoritative1.example.com
dig myrootdomain.name TXT @authoritative1.example.com
  • 如果您TXT在已經有記錄的子域上添加CNAME記錄,它不起作用是正常的:它會顯示TXT來自規範名稱,而不是,就像在您的結果中一樣。如果主機名有CNAME記錄,則它不能有其他類型的其他資源記錄。想知道為什麼嗎?我有一個答案,而且 AndrewB 對一個規範問題更加詳細。

引用自:https://serverfault.com/questions/920401