2

Google クラウド DNS をテストしており、gcloud コマンドを使用して TXT レコードを作成しようとしました。ただし、作成されたレコードは予期せずエスケープされます。

これは私がしたことです:

% gcloud dns records --zone="myzonename" edit

「追加」セクションで、次のような TXT レコードを追加しました。

{
    "kind": "dns#resourceRecordSet",
    "name": "example.com.",
    "rrdatas": [
        "v=spf1 include:_spf.google.com ~all",
    ],
    "ttl": 84600,
    "type": "TXT"
},

gcloud コマンドはエラーなしで終了し、TXT レコードがゾーンに作成されました。ただし、作成されたレコードは次のようになります。

{
    "kind": "dns#resourceRecordSet",
    "name": "example.com.",
    "rrdatas": [
        "\"v=spf1\" \"include:_spf.google.com\" \"~all\"",
    ],
    "ttl": 84600,
    "type": "TXT"
},

ご覧のとおり、二重引用符はデータに保持されます。DNS サーバーからの応答にも二重引用符とスペースが含まれていることを確認しました。

% nslookup -type=TXT example.com. ns-cloud-e1.googledomains.com.
Server:     ns-cloud-e1.googledomains.com.
Address:    216.239.32.110#53

example.com text = "v=spf1" "include:_spf.google.com" "~all"

期待される出力はexample.com text = "v=spf1 include:_spf.google.com ~all"

この不要なエスケープを停止するにはどうすればよいですか?

4

2 に答える 2

3

DNS TXT レコードは、それぞれが 255 オクテット未満の「文字列」のリストで構成されます (RFC 1035 を参照)。ゾーン ファイル形式では、これを一連の空白で区切られた文字列として表現します。各文字列は、引用符で囲んだり、引用符で囲んだりすることができます。文字列の 1 つに空白が埋め込まれている場合は、引用形式を使用する必要があります。

システムは入力を 3 つの文字列のリストとして解釈していますが、単一の文字列で TXT レコードを作成しようとしているようです。試す:

{
   "kind": "dns#resourceRecordSet",
   "name": "example.com.",
   "rrdatas": [
       "\"v=spf1 include:_spf.google.com ~all\"",
   ],
   "ttl": 84600,
   "type": "TXT"
},

外側の引用符は JSON 文字列用です。内部の JSON 用にエスケープされたものは、ゾーン ファイル形式の一部です。お役に立てれば。

于 2014-04-09T14:52:30.477 に答える
0

ここで同じ問題...

gcloud SDK のバグのようです。

スペースをエスケープすることで回避しました:

{
  "kind": "dns#resourceRecordSet",
  "name": "example.com.",
  "rrdatas": [ "v=spf1\\ mx\\ include:_spf.google.com\\ ~all" ],
  "ttl": 21600,
  "type": "TXT"
}

2 つの円記号でスペースをエスケープする必要があります。

ではごきげんよう!

于 2014-04-08T20:44:31.750 に答える