前書き

タイトルの通り、cz.nic が作っているFREDをインストールして、適当なTLDゾーンを作ってみたいと思います。
IANAから正式に委任されているTLD*を使うのは気が引けるので(多分問題ないと思いますが)、今回は example を TLDとしてみます。

* Root Zone Database

インストール

今回インストールをする環境情報です。Ubuntu 16.04 でやりたいと思います。
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.4 LTS
Release: 16.04
Codename: xenial
fred@ubuntu:~$ uname -a
Linux ubuntu 4.4.0-119-generic #143-Ubuntu SMP Mon Apr 2 16:08:24 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
公式の手順に従い、
何も考えずに Installation script を叩いてみます。
$ sudo su -
# wget https://fred.nic.cz/files/fred/fred-ubuntu-install.sh
# . fred-ubuntu-install.sh
上記シェルスクリプトが何をしているかは、Installation stepsに書いてあります。

TLDゾーンの作成

つづいて TLDゾーンの作成に移ります。やり方は2つ存在するようです。
1つは、ゾーンのセットアップスクリプトを実行する方法。2つめは、手動でコマンドをたたいていく方法。
1つめの方法を公式から引用します。
$ wget https://fred.nic.cz/files/fred/fred-config-zone.py
$ python fred-config-zone.py cz > fred-config-cz.sh
$ . fred-config-cz.sh
上記スクリプト fred-config-zone.py は 作成したい TLD名を引数にとるスクリプトで、
TLDゾーンのセットアップ用のコマンドを標準出力に出力します。
但し、上記スクリプトには実在するTLD名を与えないと動かないようです。
どうもTLDゾーンのSOA等を引いて、セットアップ用に値を取ってきているようです。
(シリアルとかTTLとか)

とういうことで、2つめの方法、コマンドを愚直に叩いていく方法でセットアップをしていこうと思います。
セットアップは以下の流れで実施する必要がある様です。それぞれのタスクは、インストール時に作られた
fred-adminというコマンドで行えるようです。fred-admin --help で詳細な使い方が分かります。
  • 1. ゾーンの作成
  • 2. レジストラ用アカウントの作成
  • 3. 課金に関する情報の作成(レジストラへ課金する為)

1. ゾーンの作成

コマンドを実行します。
$ fred-admin --zone_add
--zone_fqdn=example
--ex_period_min=12
--ex_period_max=120
--ttl=18000
--hostmaster=hostmaster@nic.example
--refresh=900
--update_retr=300
--expiry=604800
--minimum=900
--ns_fqdn=a.dns.example
--ex_period_minは登録可能期間の最小値(月単位)、--ex_period_maxは登録可能期間の最大値(月単位)
を表しているようです。それ以外のオプションは、TLDゾーンのSOAレコードに記載される値です。

つづいて、TLDゾーンの権威DNSサーバーを登録します。
$ fred-admin --zone_ns_add --zone_fqdn=example --ns_fqdn=a.dns.example --addr=127.0.0.1

2. レジストラアカウントの作成

作成できるレジストラのタイプは、common registrar と system registrar の2つが存在するようです。
system registrar については、レジストリ自身がゾーンの情報を変更するためのアカウントで、
common registrarアカウントはそれ以外の目的のアカウントとなる様です。
system registrarを作成し認証情報を設定し、example ゾーンへの権限を追加します。
認証情報の設定については、fred-clientが使用するクライアント証明書(/usr/share/fred-client/ssl/test-cert.pem)の
fingerprintを正しく設定する必要があります。フィンガープリントの作り方は以下の通り。
$ openssl x509 -noout -fingerprint -md5 -in /path/to/cert.pem | cut -d= -f2
$ fred-admin --registrar_add    --handle=REG-SYS --reg_name="System registrar"    --country=JP --system
$ fred-admin --registrar_acl_add --handle=REG-SYS --certificate="上記で作ったfingerprintの値。16新数2桁のコロン区切り" --password=passwd
$ fred-admin --registrar_add_zone --zone_fqdn=example --handle=REG-SYS

3. 課金情報の作成

EPPにおけるそれぞれの操作に対応した形で課金情報の設定をする事ができるようです。
CreateDomainにはいくら、RenewDomainにはいくら、それ以外のEPP操作にはいくら
という感じです。
$ fred-admin --price_add --operation='CreateDomain' --zone_fqdn=example    --operation_price 150 --period 1
$ fred-admin --price_add --operation='RenewDomain' --zone_fqdn=example --operation_price 200 --period 1
$ fred-admin --price_add --operation='GeneralEppOperation' --zone_fqdn=example --operation_price 0.05 --period 1 --enable_postpaid_operation

ドメインを登録してみる

さて、セットアップを一通り終えましたので実際にドメインを登録してみたいと思います。
登録するドメインは、nic.example とします。
レジストラアカウントは、system registrar を使用します。
登録の前に、登録対象のドメイン nic.example をwhoisで引いてみます。
$ whois -h localhost nic.example
% Domain Information over Whois protocol
%
% Whoisd Server Version: 3.10.2

%ERROR:101: no entries found
%
% No entries found.
ドメインを登録するには、fred-clientコマンドを使用します。
fred-clientコマンドを使用する方法については、以前紹介してみています。(FRED試してみる(3))。
fred-clientが使用する認証情報については、REG-SYSアカウントのもので適当に設定する必要があります。
設定ファイルは、/etc/fred/fred-client.confです。
$ fred-client
FredClient upstream/2.10.1-132-gad39
Type "help", "license" or "credits" for more information.

Using configuration from /etc/fred/fred-client.conf
Connecting to localhost, port 700 ...
Connected!

REG-SYS@localhost> check_contact ID99
ID99: Available. Not in registry: Object is available.
REG-SYS@localhost> create_contact ID99 'Nanashi no Gombei' nanashi.gombei@nic.example 'Example Street' ExampleCity 12300 JP
Do you really want to send this command to the server? (y/N): y
Contact ID: ID99
Created on: 2018-06-25T02:49:00+09:00
REG-SYS@localhost> check_contact ID99
ID99: Not available. Registered already
REG-SYS@localhost> info_contact ID99
Contact ID: ID99
Repository object ID: C0000000001-EPP
Created by: REG-SYS
Designated registrar: REG-SYS
Created on: 2018-06-25T02:49:00+09:00
Name: Nanashi no Gombei
Street: Example Street
City: ExampleCity
Postal code: 12300
Country code: JP
Password for transfer: NWmUd5vp
Email: nanashi.gombei@nic.example
Status: ok - Object is without restrictions
Disclose: voice
fax
email
vat
ident
notify_email
Hide: addr
REG-SYS@localhost> !create_nsset
Interactive input mode started. Press Ctrl+C to abort or Ctrl+D to finish command.
NSSET ID [required]: ID99
LIST of DNS[1/9] / Name server [required]: ns1.nic.example
LIST of DNS[1/9] / Server address[1/oo] [optional]: 127.0.0.1
LIST of DNS[1/9] / Server address[2/oo] [optional]:
LIST of DNS[2/9] / Name server [required]: ns2.nic.example
LIST of DNS[2/9] / Server address[1/oo] [optional]: 127.0.0.1
LIST of DNS[2/9] / Server address[2/oo] [optional]:
LIST of DNS[3/9] / Name server [optional]:
Technical contact[1/oo] [required]: ID99
Technical contact[2/oo] [optional]:
Password required by server to authorize the transfer [optional]: test
Report range level (0 - 10; higher = more detailed) [optional]:
Client transaction ID [optional]:

Interactive input completed. [Press Enter]
Command to issue:
create_nsset ID99 ((ns1.nic.example 127.0.0.1), (ns2.nic.example 127.0.0.1)) ID99 test
Do you really want to send this command to the server? (y/N): y
NSSET ID: ID99
Created on: 2018-06-25T02:52:20+09:00
REG-SYS@localhost> info_nsset ID99
NSSET ID: ID99
Repository object ID: N0000000002-EPP
Created by: REG-SYS
Designated registrar: REG-SYS
Created on: 2018-06-25T02:52:20+09:00
Password for transfer: test
Status: ok - Object is without restrictions
Technical contact: ID99
Name servers: ns1.nic.example, (127.0.0.1)
ns2.nic.example, (127.0.0.1)
Report level: 3
REG-SYS@localhost> create_domain nic.example ID99 NULL ID99
Do you really want to send this command to the server? (y/N): y
Domain name: nic.example
Created on: 2018-06-25T02:53:18+09:00
Expiration date: 2019-06-24
REG-SYS@localhost> quit
Logout command sent to server

History IOError: [Errno 13] Permission denied
Ending session at localhost
Disconnected.
無事登録できたので、whoisとRDAPを引いてみます。
$ whois -h localhost nic.example
% Domain Information over Whois protocol
%
% Whoisd Server Version: 3.10.2
% Timestamp: Sun Jun 24 17:54:56 2018

domain: nic.example
registrant: ID99
nsset: ID99
registrar: REG-SYS
registered: 25.06.2018 02:53:18
expire: 24.06.2019

contact: ID99
name: Nanashi no Gombei
address: Example Street
address: ExampleCity
address: 12300
address: JP
registrar: REG-SYS
created: 25.06.2018 02:49:00

nsset: ID99
nserver: ns1.nic.example (127.0.0.1)
nserver: ns2.nic.example (127.0.0.1)
tech-c: ID99
registrar: REG-SYS
created: 25.06.2018 02:52:20
RDAPのアクセス先は、http://localhost/rdap/domain/nic.example となります。
{
"status": [
"active"
],
"fred_nsset": {
"nameservers": [
{
"ipAddresses": {
"v4": [
"127.0.0.1"
]
},
"objectClassName": "nameserver",
"handle": "ns1.nic.example",
"links": [
{
"href": "http://localhost/rdap/nameserver/ns1.nic.example",
"type": "application/rdap+json",
"rel": "self",
"value": "http://localhost/rdap/nameserver/ns1.nic.example"
~~~長いので省略~~~

肝心な example ゾーンのゾーンファイルですが、
/etc/fred/genzone.confのzonedirに指定したディレクトリにゾーンファイルが作られています。
$ cat /etc/bind/db.example
18000 ;default TTL for all records in zone
example. IN SOA a.dns.example. hostmaster.nic.example. (1529832016 900 300 604800 900)
IN NS a.dns.example.
a.dns.example. IN A 127.0.0.1
;
;--- domain records ---
;
nic.example. IN NS ns1.nic.example.
ns1.nic.example. IN A 127.0.0.1
nic.example. IN NS ns2.nic.example.
ns2.nic.example. IN A 127.0.0.1
最後に、レジストラへの課金情報ですが、
レジストリオペレータ向けのWebインターフェース(WebAdmin)が localhost:18456 にて動いているようで
そこから invoiceの情報をレジストラごとに見れそうでした。
今回は、system registrar によってドメインを登録したせいなのかわかりませんが、
特に請求情報を見つけられませんでした。

WebAdminについては、今後詳しく見ていこうと思います。

Posted at: 2018-06-24 01:35:32  Category: FRED


cz.nic が作っている FRED のwhois 並びに rdapのデモ環境ですが、
以前は、 demo.fred.nic.cz で動いていたと思います。

今はホスト名が変わり、demo.regtest.nic.cz となっている様子です。

Posted at: 2018-01-28 07:18:37  Category: FRED


前回記事に引き続き、FREDの機能を試してみます。

はじめに

前回記事で説明した通り、レジストラはレジストリに対して、ドメイン名の登録等申請を行うことができます。
今回は、Fred-clientを用い、 .cz ドメインのレジストラになった気分で申請を試して見ます。
デモ環境が一般に公開されてるのってすごいなー

クライアント

Python実装のFred-clientがCZ.NICのFREDのページ公開されています。
preconfigured client

レジストリに対するドメインの各種申請はEPP(Extensible Provisioning Protocol)によって行われます。
上記クライアントを起動すると CZ.NIC のデモ環境に接続しEPPをしゃべってくれます。
EPPの詳細についてはこちらをどうぞ。Extensible Provisioning Protocol (EPP)

使ってみる

このへんのページ(Fred-client HOW TO)を参考にドメインの登録を試してみたいと思います。
起動して、helpコマンドにより使えるコマンドを確認してみます。
fred-client-2.4 $ ./fred-client.py 
Unsupported language code: 'ja' in os.environ.LANG. Available codes are: cs, en. Set default to: 'en'.
FredClient 2.4
Type "help", "license" or "credits" for more information.

Using configuration from data_files/conf/fred/fred-client.conf
Connecting to demo.fred.nic.cz, port 700 ...
Connected!

REG-FRED_A@demo.fred.nic.cz> help
Type "help command" to get details of the chosen command.

Available session commands:
! license
escaped_input poll_autoack
confirm quit
credits validate
help verbose
lang fetch_from_info

Available EPP commands:
check_contact info_keyset prep_nssets_by_contact
check_domain info_nsset prep_nssets_by_ns
check_keyset list_contacts renew_domain
check_nsset list_domains sendauthinfo_contact
create_contact list_keysets sendauthinfo_domain
create_domain list_nssets sendauthinfo_keyset
create_keyset login sendauthinfo_nsset
create_nsset logout technical_test
credit_info poll transfer_contact
delete_contact prep_contacts transfer_domain
delete_domain prep_domains transfer_keyset
delete_keyset prep_domains_by_contact transfer_nsset
delete_nsset prep_domains_by_keyset update_contact
get_results prep_domains_by_nsset update_domain
hello prep_keysets update_keyset
info_contact prep_keysets_by_contact update_nsset
info_domain prep_nssets

Report bugs to fred@nic.cz
REG-FRED_A@demo.fred.nic.cz>
Fred-client How-Toのページによるとドメインを登録するには、
まずコンタクトの情報(ドメインの登録者に関する情報)を作成しないといけないとあります。
コンタクト情報を作成するには以下のようにcreate_contactコマンドを使うようです。
REG-FRED_A@localhost> create_contact ID01 'John Smith' john.smith@mail.com 'Working str. 21' Prague 12300 CZ
必須項目は7個で以下の通り。
contact_id (required) Contact ID
name (required) Name
email (required) Email
street (required) Street (list with max 3 items.)
city (required) City
pc (required) Postal code
cc (required) Country code

ということなので、以下のようにコンタクトを作成してみます。
REG-FRED_A@demo.fred.nic.cz> check_contact ID99
ID99: Available. Not in registry: Object is available.
REG-FRED_A@demo.fred.nic.cz> create_contact ID99 'Nanashi no Gombei' nanashi.gombei@example.tld 'Street' City 12300 CZ
Do you really want to send this command to the server? (y/N): y
Contact ID: ID99
Created on: 2018-01-27T12:51:37+01:00
REG-FRED_A@demo.fred.nic.cz> check_contact ID99
ID99: Not available. Registered already
REG-FRED_A@demo.fred.nic.cz> info_contact ID99
Contact ID: ID99
Repository object ID: C0001002337-CZ
Created by: REG-FRED_A
Designated registrar: REG-FRED_A
Created on: 2018-01-27T12:51:37+01:00
Name: Nanashi no Gombei
Street: Street
City: City
Postal code: 12300
Country code: CZ
Password for transfer: CkLPGFbG
Email: nanashi.gombei@example.tld
Status: ok - Object is without restrictions
Disclose: voice
fax
email
vat
ident
notify_email
addr
つづいて、登録したいドメインの権威DNSサーバーの情報を作成します。create_nssetコマンドによって行います。
コマンドの先頭に!を付加するとインタラクティブモードになり、コマンドの引数を各行で作成するようになる様です。
REG-FRED_A@demo.fred.nic.cz> !create_nsset
Interactive input mode started. Press Ctrl+C to abort or Ctrl+D to finish command.
NSSET ID [required]: ID99
LIST of DNS[1/9] / Name server [required]: ns1.test-test.cz
LIST of DNS[1/9] / Server address[1/oo] [optional]:
LIST of DNS[2/9] / Name server [required]: ns2.test-test.cz
LIST of DNS[2/9] / Server address[1/oo] [optional]:
LIST of DNS[3/9] / Name server [optional]:
Technical contact[1/oo] [required]: ID99
Technical contact[2/oo] [optional]:
Password required by server to authorize the transfer [optional]: test
Report range level (0 - 10; higher = more detailed) [optional]:
Client transaction ID [optional]:

Interactive input completed. [Press Enter]
Command to issue:
create_nsset ID99 ((ns1.test-test.cz), (ns2.test-test.cz)) ID99 test
Do you really want to send this command to the server? (y/N): y
NSSET ID: ID99
Created on: 2018-01-27T13:54:46+01:00
REG-FRED_A@demo.fred.nic.cz> info_nsset ID99
NSSET ID: ID99
Repository object ID: N0001002350-CZ
Created by: REG-FRED_A
Designated registrar: REG-FRED_A
Created on: 2018-01-27T13:54:46+01:00
Password for transfer: test
Status: ok - Object is without restrictions
Technical contact: ID99
Name servers: ns1.test-test.cz
ns2.test-test.cz
Report level: 3

最後に作成したコンタクト情報とnsset(権威DNSサーバーの情報)からドメインを登録してみます。
test-test.czを登録してみます。
REG-FRED_A@demo.fred.nic.cz> create_domain test-test.cz ID99 NULL ID99
Do you really want to send this command to the server? (y/N): y
Domain name: test-test.cz
Created on: 2018-01-27T14:01:30+01:00
Expiration date: 2019-01-27
REG-FRED_A@demo.fred.nic.cz> info_domain test-test.cz
Domain name: test-test.cz
Repository object ID: D0001002353-CZ
Created by: REG-FRED_A
Designated registrar: REG-FRED_A
Created on: 2018-01-27T14:01:30+01:00
Expiration date: 2019-01-27
NSSET ID: ID99
Password for transfer: fzW9XBWs
Status: ok - Object is without restrictions
Registrant ID: ID99

無事登録できたみたいなので、whoisもひいてみます。
create_domainを行ってからおおよそ1分程度以内にwhoisをひいてますが、すぐに反映されています。
$ whois -h demo.fred.nic.cz test-test.cz
% (c) 2006-2013 CZ.NIC, z.s.p.o.
%
% Intended use of supplied data and information
%
% Data contained in the domain name register, as well as information
% supplied through public information services of CZ.NIC association,
% are appointed only for purposes connected with Internet network
% administration and operation, or for the purpose of legal or other
% similar proceedings, in process as regards a matter connected
% particularly with holding and using a concrete domain name.
%
% Full text available at:
% http://www.nic.cz/page/306/intended-use-of-supplied-data-and-information/
%
% See also a search service at http://www.nic.cz/whois/
%
% Whoisd Server Version: 3.10.2
% Timestamp: Sat Jan 27 14:02:18 2018

domain: test-test.cz
registrant: ID99
nsset: ID99
registrar: REG-FRED_A
registered: 27.01.2018 14:01:30
expire: 27.01.2019

contact: ID99
name: Nanashi no Gombei
address: Street
address: City
address: 12300
address: CZ
e-mail: nanashi.gombei@example.tld
registrar: REG-FRED_A
created: 27.01.2018 12:51:37

nsset: ID99
nserver: ns1.test-test.cz
nserver: ns2.test-test.cz
tech-c: ID99
registrar: REG-FRED_A
created: 27.01.2018 13:54:46

Posted at: 2018-01-22 09:00:33  Category: FRED

Fred(Free Registry for ENUM and Domains)を試してみようの2回目です。
Try Outにあるように、レジストラや一般ユーザーの立場からFREDの機能を試してみたいと思います。

レジストリの機能

FREDに限らないですが、ドメインレジストリの機能は大きく分けて3つあるように思います。

  • 1. ドメインの登録等申請を受け付ける機能

  • 2. 受け付けた申請情報の一部をDNSのゾーン情報に反映し提供する機能

  • 3. 受け付けた申請情報の一部をWhoisやRDAP等RDS(Registration Directory Service)にて提供する機能

レジストリレジストラモデルの元では、1の申請はレジストラが行うことができます。
登録者(Registrant)はレジストラを介してレジストリに申請を行うことになります。

2の機能は、平たくいえば権威DNSサーバーを運用することです。
権威DNSサーバーには誰でもアクセスすることができます。

3の機能により、登録されているドメインに関する各種情報(登録者の情報など)を閲覧することができます。
基本的に誰でも閲覧することができます。
RDAPとかだとアクセス元ユーザーの属性に応じて情報量が変わることはあり得ます。

Try Out

FREDにはしっかりデモ環境があるっぽいです。すげー。
簡単に試せるので上記の3の機能にあたる、whoisをやってみます。
$ whois -h demo.fred.nic.cz test.cz
% (c) 2006-2013 CZ.NIC, z.s.p.o.
%
% Intended use of supplied data and information
%
% Data contained in the domain name register, as well as information
% supplied through public information services of CZ.NIC association,
% are appointed only for purposes connected with Internet network
% administration and operation, or for the purpose of legal or other
% similar proceedings, in process as regards a matter connected
% particularly with holding and using a concrete domain name.
%
% Full text available at:
% http://www.nic.cz/page/306/intended-use-of-supplied-data-and-information/
%
% See also a search service at http://www.nic.cz/whois/
%
% Whoisd Server Version: 3.10.2
% Timestamp: Sun Jan 21 16:09:56 2018

domain: test.cz
registrant: SB:GA
nsset: NSSET
registrar: REG-CZTEST_B
registered: 22.12.2010 13:57:38
changed: 22.12.2010 16:18:36
expire: 22.12.2011

contact: SB:GA
org: Organization
name: GA
address: Street
address: City
address: 12345
address: Czech Republic
address: CZ
e-mail: ga@example.com
registrar: REG-CZTEST_B
created: 22.12.2010 14:50:04

nsset: NSSET
nserver: nameserver.cz (1.1.2.0)
nserver: abc.psov.cz (123.123.10.1, 157.123.10.1)
tech-c: TEST
registrar: REG-CZTEST_A
created: 25.05.2010 10:13:07
changed: 15.06.2010 10:29:11

contact: TEST
org: organizace p\xc5\x99edko\xc5\xbeka, s.r.o.
name: tojdezm\xc4\x9bnit taky?
address: test
address: test
address: test
address: CZ
registrar: REG-FRED_B
created: 21.05.2010 11:54:14
changed: 02.09.2011 14:52:54
Posted at: 2018-01-17 09:11:20  Category: FRED


Fred(Free Registry for ENUM and Domains)というものがあります。
FREDはCZ.NIC(*1)が開発しているオープンソースのドメインレジストリシステムで、
czを含め12のドメインにて使用されているようです。(何れもccTLDのようです)

Introducing FRED - Who uses FRED

cz.nicといえば、Knot DNSで有名ですが、レジストリシステムもオープンソースで作ってるのですね。
本記事以降、FREDを試してみた結果を書いてみたいと思います。 

(*1) トップレベルドメイン .cz を管理運用している組織です。