php / php/php-src

dns_get_record() does not support a request to a specific NS server to determine the NS records of a domain.

オープン
#9,924 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

まだ誰も着手していません。

Category: DNS Extension: standard Feature
主要言語
C
スター
40.4k
フォーク
8.1k
平均マージ
2日 13時間
マージ済み PR(30日)
96

説明

Description

The task is to determine. that my client, which is the owner of the domain, has specified the correct NS records with the registrar, and I can accept it for service on my dns server.

Many people mistakenly think that it is enough to check the NS-record of the domain, but it is not so!
To make things worse, almost all DNS-servers, after accepting a domain for service, create the same NS-records, so that the client could register subdomains (www, mail, etc.). But this NS record only affects subdomains or child domains, not the domain itself.
For example, I will take the domain umi.ru (it is very difficult to find a domain where these records are different).
dig +short NS umi.ru or var_export(dns_get_record('umi.ru', DNS_NS));

ns1.umi.ru.
ns2.umi.ru.
ns3.umi.ru.
ns4.umi.ru.

These NS records are specified by the DNS server, not the domain registrar, and affect subdomains, but not the domain itself.

To get the exact NS records that are specified at the domain registrar. and that respond directly to the domain, that is, to which DNS-server to apply when a request comes to this domain, you need to do the following.
1 Define the parent zone (domain level above) for umi.ru parent zone ru.
2 Get the list of NS-servers of the parent zone.
dig +short NS ru or var_export(dns_get_record('ru', DNS_NS));

a.dns.ripn.net.
b.dns.ripn.net.
d.dns.ripn.net.
e.dns.ripn.net.
f.dns.ripn.net.

3 Get the NS record from exactly one of these servers (authoritative servers).
dig NS @a.dns.ripn.net umi.ru or ... but there is no such function in php and you can't make this request through dns_get_record(). :-(

.......................................................................................
UMI.RU.                 345600 IN NS ns1.umi.RU.
UMI.RU.                 345600 IN NS ns2.umi.RU.
UMI.RU.                 345600 IN NS ns3.umi.RU.
.......................................................................................

Registry and order does not matter, but these 3 NS records prescribed, rather than 4 as above, the registrar of the domain and it is them that I need to get and check to be sure that I can bind this domain to my dns-server.
Most have the same, but it is not always the case and need to get the latter.

I need to be able to get them in php without calling exec('dig NS @a.dns.ripn.net umi.ru', $out, $exit); var_export($out);.

コントリビューションガイド

コントリビューションガイドを開く

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

調査の方向性

まず、PHP の dns_get_record() の動作と、issue に対応する dig NS @server domain クエリを調べます。呼び出し元が特定の権威サーバーを選択するにはどうすればよいかを確認し、インターフェースを定義する前に既存の DNS レコード API を検討します。完了の条件は、PHP が exec('dig ...') を呼び出さずに、指定したサーバーからドメインの NS レコードを直接取得できることです。

索引モデルが issue の本文から書いたものです。

評価

技術スタック
php
領域
networking
issue の種類
機能追加
難易度
5/5
見積もり時間
1週間以上
活発さ
停滞
明瞭さ
おおむね明確
初心者へのやさしさ
35/100

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。