WHOISの後継技術「RDAP」を試しにさわってみた #dnsops

6/28に開催された「DNS Summer Day 2017」、そこの1セッションでWHOISの次世代プロトコルが紹介されていました。

【レポート】DNS Summer Day 2017 DNS気になる話「WHOIS」 #dnsops

WHOISといえば、IPアドレスやドメインの情報を調べるためには必須の技術で、それはオンプレミスだろうがクラウドだろうが変わりません。どのように変化するのかは気になるところです。よい機会なので少し試しにさわってみました。

例として、いま使っているIPアドレス(グローバルIPアドレス)の情報を検索してみました。
都内某所から httpbin.org にアクセスすると、現在は「 61.210.10x.xxx 」というIPアドレスを使っていることが分かります。

$ curl -s httpbin.org/ip
{
  "origin": "61.210.10x.xxx"
}

まずはWHOISで

まずは従来からの、whoisコマンドで検索してみます。

WHOISコマンドはmacOSには最初からはいっていましたが、Linuxディストリビューションによっては追加インストールする必要があるかも知れません。

最初に、国内のレジストリであるJPNICのデータベースにアクセスしてみます。

$ whois -h whois.nic.ad.jp 61.210.10x.xxx
[ JPNIC database provides information regarding IP address and ASN. Its use   ]
[ is restricted to network administration purposes. For further information,  ]
[ use 'whois -h whois.nic.ad.jp help'. To only display English output,        ]
[ add '/e' at the end of command, e.g. 'whois -h whois.nic.ad.jp xxx/e'.      ]

Network Information:
a. [Network Number]             61.210.0.0/16
b. [Network Name]               INFOWEB
g. [Organization]               InfoWeb(Fujitsu Ltd.)
:

使っているプロバイダ(InfoWeb)などの情報が出力されました。

同じIPアドレスを、今度は APNIC に問い合わせてみます。

$ whois -h whois.apnic.net 61.210.10x.xxx
:
% Information related to '61.210.0.0 - 61.210.255.255'

inetnum:        61.210.0.0 - 61.210.255.255
netname:        INFOWEB
descr:          InfoWeb(Fujitsu Ltd.)
country:        JP
:
remarks:        This information has been partially mirrored by APNIC from
remarks:        JPNIC. To obtain more specific information, please use the
remarks:        JPNIC WHOIS Gateway at
remarks:        http://www.nic.ad.jp/en/db/whois/en-gateway.html or
remarks:        whois.nic.ad.jp for WHOIS client. (The WHOIS client
remarks:        defaults to Japanese output, use the /e switch for English
remarks:        output)
:

そこそこ大量に出力されますが、最後の方に同じような情報が記載されています。

ですが両者を比べてみると、例えばIPアドレスレンジのフォーマットが違いますし、
方やb. [Network Name]
方やnetname:と、同じプロバイダ名が書いてある行であっても項目名がばらばらです。

人間が読む分には、適度にフォーマットされていて読みやすくはあるのですが、
もしこれをプログラムなどで再利用しようとしたとしたら、問い合わせるデータベースごとにパーサを変えるか、正規表現でがんばるか。。。あまり明るい未来が見えません。

さらに、もし RIPE のデータベースにアクセスした場合には、このように表示されて結果を得ることは出来ません。

$ whois -h whois.db.ripe.net 61.210.10x.xxx
inetnum:        61.0.0.0 - 61.255.255.255
netname:        NON-RIPE-NCC-MANAGED-ADDRESS-BLOCK
descr:          IPv4 address block not managed by the RIPE NCC
remarks:        ------------------------------------------------------
remarks:
remarks:        You can find the whois server to query, or the
remarks:        IANA registry to query on this web page:
remarks:        http://www.iana.org/assignments/ipv4-address-space

RDAPの場合

次にRDAPで、同じ情報を検索してみます。

RDAPはRESTful APIなので、特別なクライアントがなくてもアクセスできます。

残念ながらまだJPNICはRDAPを提供していませんので、その上流であるAPNICにアクセスしてみます。

$ curl http://rdap.apnic.net/ip/61.210.10x.xxx
{
  "handle" : "61.200.0.0 - 61.215.255.255",
  "startAddress" : "61.200.0.0",
  "endAddress" : "61.215.255.255",
  "ipVersion" : "v4",
  "name" : "JPNIC-NET-JP",
  "type" : "ALLOCATED PORTABLE",
  "country" : "JP",
  "objectClassName" : "ip network",
  "entities" : [ {
:

きれいなJSONが返ってきました。ちゃんと、JPNICにアロケートされているところまでは出力されます。

では、同じクエリをRIPEにアクセスしたらどうなるでしょうか。

$ curl -v https://rdap.db.ripe.net/ip/61.210.10x.xxx
*   Trying 193.0.6.142...
* Connected to rdap.db.ripe.net (193.0.6.142) port 443 (#0)
:
< HTTP/1.1 301 Moved Permanently
< Date: Fri, 07 Jul 2017 01:22:25 GMT
< Server: Jetty(9.3.z-SNAPSHOT)
< Location: https://rdap.apnic.net/ip/61.210.10x.xxx
:

ちゃんと、APNICのアドレスにリダイレクトされています。curl-Lオプションを付けて実行すれば、気にすること無くアクセスができるということですね。

$ curl -L https://rdap.db.ripe.net/ip/61.210.10x.xxx
{
  "handle" : "61.200.0.0 - 61.215.255.255",
  "startAddress" : "61.200.0.0",
  "endAddress" : "61.215.255.255",
:

いまはIPアドレスが中心ですが、そのうちドメイン名まで広がっていくと思います。遅かれ早かれJPNIC等の国別レジストリも対応するでしょうから、今後に注目でしょうか。

参考