日記:2021-03-15
とあるサイトがなんか壊れる
ブラウザのコンソールを見る
→名前解決に失敗している
digで引くと30個ぐらいAレコードが返ってくる(!!)
誰が悪いのか?
1サブドメインに30個もAレコードを指定しているサイト運営者
table:検証結果
クライアント サーバー 結果
dig upstream OK
mDNSResponder upstream OK
panopとmDNSResponderの相性が悪い どうしてdigはうまくやっているのか?
どうやら dig は普通より長いUDPペイロードを許容するらしい
mDNSResponderは指定していないのでデフォルトの512bytesまでになる?
この512bytesはIP層の「512bytes+ヘッダ分は絶対フラグメンテーション起こさずに転送させろよ」という仕様由来のはず
mDNSResponderはそういう指定をしていないので 512 bytes を越えて Truncate されている
https://gyazo.com/6a084273cd89de5b96ae97017d3a795b
Truncateされてしまったので仕方なく mDNSResponder は TCP で聞きにいく
…が、TCPで聞きにいってもなぜかTruncateされてしまう
https://gyazo.com/0327cbc1ca5be0a8e630f718e5c4d5c4
なんでだ?
………実は dig も +bufsize=512 すると同じことが起こる!
つまり dig がデフォルトでbufsizeを大きくしてくれているから起こっていないだけ
別に mDNSResponder が特段悪いわけではなかった!
ごめん Apple
これは miekg/dns 側なのか?それとも俺のライブラリの使い方が悪いのか?
よくわからん
ひょっとして上流の truncated をそのまま流している!?
ありそう
とりあえず繋がれたプロトコルに応じて上流にも同じプロトコルで繋げばいいかな
できた!