Linux

綁定區域錯誤 - 輸入意外結束

  • April 21, 2020

Everyting 似乎沒問題,但我得到了 Unexpected end of input :

$TTL    10800
@       IN      SOA     ns1.riddimdub.com.
admin.radiohost.riddimdub.com. (
       1        ; Serial
       10800       ; Refresh after 3 hours
       3600       ; Retry after 1 hour
       604800       ; Expire after 1 week
       3600 )     ; Negative caching TTL of 1 day
@       IN      NS      ns1.riddimdub.com.
@       IN      NS      ns2.riddimdub.com.
radiohost.riddimdub.com.        IN       MX     10      radiohost.riddimdub.com.
radiohost.riddimdub.com.        IN      A       185.40.20.124
ns1     IN      A       185.40.20.124
ns2     IN      A       185.40.20.124
www     IN      CNAME   radiohost.riddimdub.com.
mail    IN      A       185.40.20.124
ftp     IN      CNAME   radiohost.riddimdub.com.

我還得到了 Unexpected RR type 10800。

可能是什麼問題呢?

作為人類,我可以將文件的這一部分辨識為應該是SOA記錄的內容:

@       IN      SOA     ns1.riddimdub.com.
admin.radiohost.riddimdub.com. (
       1        ; Serial
       10800       ; Refresh after 3 hours
       3600       ; Retry after 1 hour
       604800       ; Expire after 1 week
       3600 )     ; Negative caching TTL of 1 day

但是,如果這些行被正確解析,那麼上面的實際意思並不是這樣。

問題

由於主文件格式使用換行符作為記錄之間的分隔符*,因此記錄數據的第一個欄位之後的換行符意味著這應該是SOA記錄:

@       IN      SOA     ns1.riddimdub.com.

*) 除了可以花哨並使用括號 ( ( )) 以跨多行的方式格式化單個記錄(純粹是出於樣式/人類可讀性的原因)。

由於一條SOA記錄必須有七個記錄數據欄位,但這個假定SOA記錄只有一個欄位,因此您會收到“輸入意外結束”錯誤。

(我完全希望原始錯誤消息也引用了發生這種情況的行號。)

SOA接下來,當其餘的記錄數據從下一行開始並被視為下一條記錄時,您會遇到二次故障。

在那裡您使用了括號,因此整個位被讀取為跨多行的單個記錄。

然後將假定的“下一條記錄”解釋為:

admin.radiohost.riddimdub.com.    1            10800     ...
^                                 ^            ^
owner name                        ttl          "must be the record type, I guess"?!

這會導致“未知 RR 類型 10800”錯誤消息。

這個錯誤並不是那麼重要,只要你解決了第一個問題,它就會消失,這會SOA在錯誤的上下文中留下一半的記錄價值。

修復

有多種寫法:

SOA最簡單的(不使用花哨的語法,對於記錄實際包含的內容可能是最直覺的):

@       IN      SOA     ns1.riddimdub.com. admin.radiohost.riddimdub.com. 1 10800 3600 604800 3600

很常見的多行格式,為註釋串列和計時器騰出空間:

@       IN      SOA     ns1.riddimdub.com. admin.radiohost.riddimdub.com. (
       1        ; Serial
       10800    ; Refresh after 3 hours
       3600     ; Retry after 1 hour
       604800   ; Expire after 1 week
       3600 )   ; Negative caching TTL of 1 hour

另一種選擇,如果您想註釋所有內容:

@       IN      SOA     ns1.riddimdub.com. ( ; Mname (master nameserver)
       admin.radiohost.riddimdub.com. ; Rname (email address)
       1        ; Serial
       10800    ; Refresh after 3 hours
       3600     ; Retry after 1 hour
       604800   ; Expire after 1 week
       3600 )   ; Negative caching TTL of 1 hour

請注意您如何將記錄的欄位寫入同一行(寫入記錄的典型方式),或者您必須使用括號來指定如何將記錄拆分為多行。

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