DNSSECについて

DNS Security Extensions(DNSSEC)は、アプリケーションとDNSリゾルバーが偽造または操作されたDNSデータを使用しないように保護するために設計されたテクノロジーです。

問題:攻撃者がDNS応答を改ざんしたり、 DNSキャッシュをポイズニングしたりして、アドレスバーに正当なドメイン名が含まれている悪意のあるサイトにユーザーを誘導する可能性があります。

解決策: DNSSECで構成された権限のあるDNSサーバーは、秘密鍵を使用して各リソースレコードにデジタル署名することにより、この種の攻撃を防ぎます。 DNSリゾルバーは、公開鍵とデジタル署名を使用してゾーンレコードの整合性を検証します。

NSDについて

Name Server Daemon( NSD )は、 NLNetLabsによって開発されたオープンソースの信頼できる唯一のDNSサーバーソフトウェアです。 簡単に設定できるように、BINDスタイルのゾーンファイルを使用します。

権限のある専用DNSサーバーは、担当するゾーンのクエリに対する回答を提供します。 この記事では、2つのドメイン名に対して独自の信頼できるNSDネームサーバーを設定します。 両方のドメイン名に対してDNSSEC署名付き応答を提供するようにNSDを構成します。

前提条件

この記事では、読者が次の分野に精通している必要があります。

この記事では、次の2つのドメイン名を使用します。

次の2つのドロップレットはNSDを実行します。

ホスト名 IPアドレス
master.example.com 1.1.1.1
slave.example.com 2.2.2.2

チュートリアル全体を通して、 1.1.1.1 をマスターネームサーバーのIPアドレスに置き換え、2.2.2.2をスレーブネームサーバーのIPアドレスに置き換える必要があります。

この記事の目的は、自身のドメインのDNSSECステータスに関係なく、DNSSECを使用するドメインにサービスを提供できるネームサーバーを設定する方法を示すことです。 ドメインexample.comは、便宜上、ネームサーバーに使用されます。 ネームサーバーのドメイン名にDNSSECを設定する必要はありません。 ネームサーバーは、master.my-soa.comおよびslave.my-soa.comに簡単に設定できます。

また、ドメインを解決する場所のIPアドレスを念頭に置く必要があります。 これらのドメインにウェブホストをまだ設定していない場合は、ウェブサーバーを実行する別のテストドロップレットを作成できます。 Ubuntu14.04イメージのLAMPを選択します。

LAMPドロップレットのIPアドレスは3.3.3.3になります。 このIPは、両方のドメイン名のAレコードとして使用され、Webブラウザーから解決されるかどうかを確認します。 チュートリアル全体を通して、3.3.3.3を目的のウェブホストIPアドレスに置き換える必要があります。

DNSSEC用語

DNSSECは、公開鍵暗号化の概念に取り組み、新しいDNSレコードタイプを導入します。 このセクションでは、この記事で使用されるいくつかの用語について説明します。

キー

  • ZSK Z one S igning K eyは、キーのプライベート/パブリックペアです。 秘密鍵はすべてのDNSレコードのデジタル署名を作成し、公開鍵はDNSリゾルバーがそれを検証するために使用します。
  • KSK K ey S igning K eyは、キーのプライベート/パブリックペアです。 秘密鍵はZSKに署名し、公開鍵はそれを検証します。

記録

  • DNSKEY :KSKおよびZSKの公開キーが含まれています。
  • RRSIG R esource R ecord Sig natureは各レコードに存在し、そのレコードのデジタル署名を提供します。 RRSIGレコードは、レコード自体とZSKに基づいています。
  • DS DエレゲーションS ignerレコードは、DNSKEYレコードの整合性を検証するために使用されます。 このレコードは、ドメインレジストラのコントロールパネルに入力され、TLDの権限のあるネームサーバーに存在します。

ドメインにDNSSECを設定するには、ネームサーバーとレジストラの両方で適切なレコードが必要です。

DNSSECのしくみ

最初に、ドメイン所有者の観点から DNSSEC について説明します(それはあなたです!)。 ネームサーバーからのすべてのDNSレコードが署名されていることを確認する必要があります。 そうすれば、誰かがDNSレコードをスプーフィングしようとした場合、それらはfalseとして識別され、訪問者は悪意のあるサイトにアクセスすることを回避できます。

では、どのように設定しますか? まず、ドメインごとに、ネームサーバー上に2つの一意の秘密/公開キーのペアを生成する必要があります。 ドメインの公開キーは、そのドメインのゾーンファイルにリストされているDNSKEYレコードに保存されます。 他の2つのタイプのレコード、DSレコードとRRSIGレコードは、DNSKEYレコードから生成されます。 これらの3種類のレコードは、すべて暗号的にリンクされています。 つまり、3つのうちの1つを見ると、他の2つが有効かどうかがわかります。

(注:わかりやすくするために、ドメインごとに各タイプのレコードの倍数がありますが、この説明の残りの部分では、それらを単数形で参照します。)

次に、DSレコードをレジストラにアップロードします。レジストラはそれをドメインのTLDネームサーバーに公開します。 DSレコードを公開する唯一の方法はレジストラを介することであるため、これはドメイン所有者がDSレコードを公開した人であることを証明し、そのDSレコードの有効性を証明します。 DSレコードの目的は、TLDネームサーバーとドメインで実行しているネームサーバーの間に認証チェーンを確立することです。 これは、DSレコードがDNSKEYに基づいているために機能します。したがって、DNSリゾルバーはDNSKEYがDSレコードと一致し、ドメインに対して正しいものであることを確認できます。

RRSIGレコードは、レコード値自体(IPアドレスなど)とDNSKEYに基づく他のタイプのDNSレコード(A、MXなど)に付随する署名です。

DNSKEY、DS、およびRRSIGレコードが構成されたので、DNSSECがドメイン用にセットアップされました。

次に、ユーザーの観点から説明します。 ユーザーがドメインにアクセスしたいとします。そのため、ユーザーはDNSリゾルバーにドメインのAレコードを照会します。 この例では、再帰DNSリゾルバーは、TLDネームサーバーのDSレコードに対して、このドメインのDNSKEYの有効性をすでにチェックしていますが、これも初めて簡単にチェックできます。

このクエリがどのように機能するかを次に示します。

  1. ユーザーはAレコードのクエリを送信し、DNSSEC対応の再帰DNSサーバーに到達します。
  2. DNSサーバーは、DSレコードを検出することにより、照会されたドメインがDNSSECをサポートしていることを検出します。 DOビットを含むAレコードのクエリを権限のあるネームサーバーに送信します。
  3. ネームサーバーは、Aレコードと対応するRRSIGレコードで応答します。
  4. 再帰DNSサーバーは、AレコードとファイルにあるDNSKEYレコードの値を計算し、復号化されたRRSIGレコードと照合します。 (DSレコードをチェックして、DNSKEYレコードがファイルにない場合は、最初に検証できます。)ハッシュが一致する場合、DNSサーバーはAレコードをユーザーに返します。ユーザーはWebサイトにアクセスできます。

DNSSECの仕組みの詳細については、この記事をお読みください。 DNSSEC用語のより包括的なリストについては、thisをお読みください。

ステップゼロ—ドメインとレジストラのサポートを確認します

独自のNSDネームサーバーでDNSSECを設定することを決定する前に、ドメイン拡張子(.com、.orgなど)とレジストラがDNSSECをサポートしていることを確認してください。

ドメイン拡張がDNSSECに対応しているかどうかを確認するには、次のコマンドを使用してDNSKEYレコードをクエリします。

dig DNSKEY com. +short

これにより、次のように公開キーが返されます。

256 3 8 AQPbokupKUJ5LLAtDEs6R3nDOHxF2jQEFtJEFTiDcfbsZia4fg3EK9Wv D9ZIr+7t2n1ddqRGHnTTInHTjduaKFPqm2iKaDHdrc6095o1mzqojnd1 bTtI45XNu61QmT5IU4VPT7HDUSby+53gLAsjLPyNsNEMp7Cc52RVxCHD no9efw==
257 3 8 AQPDzldNmMvZFX4NcNJ0uEnKDg7tmv/F3MyQR0lpBmVcNcsIszxNFxsB fKNW9JYCYqpik8366LE7VbIcNRzfp2h9OO8HRl+H+E08zauK8k7evWEm u/6od+2boggPoiEfGNyvNPaSI7FOIroDsnw/taggzHRX1Z7SOiOiPWPN IwSUyWOZ79VmcQ1GLkC6NlYvG3HwYmynQv6oFwGv/KELSw7ZSdrbTQ0H XvZbqMUI7BaMskmvgm1G7oKZ1YiF7O9ioVNc0+7ASbqmZN7Z98EGU/Qh 2K/BgUe8Hs0XVcdPKrtyYnoQHd2ynKPcMMlTEih2/2HDHjRPJ2aywIpK Nnv4oPo/

出力がない場合は、そのドメイン拡張に対するDNSSECサポートがないことを示しています。

TLDがDNSSECをサポートしている場合は十分ではありません。 ドメインレジストラには、コントロールパネルにDSレコードを入力するためのオプションも必要です。 これは、「レジストラ名 dnssec」をグーグルで検索するか、レジストラに直接問い合わせることで確認できます。 DNSSECをサポートする人気のあるレジストラは次のとおりです。

TLDとドメインレジストラの両方がDNSSECをサポートしていることを確認したら、カスタムネームサーバーの設定を開始できます。

ステップ1—両方のサーバーにNSDをインストールしてセットアップする

このステップでは、マスターサーバーとスレーブサーバーの両方にNSDをインストールして構成します。 ドメインexample.comのDNSレコードも設定します。 このセクションは、NSDのクイックセットアップとして機能します。 NSDの設定の詳細な手順については、この記事をお読みください。

マスターサーバー

NSDサーバーパッケージに加えて、マスターサーバーには次のパッケージが必要です。

  • ldnsutils :DNSSECキー生成およびゾーン署名用。
  • haveged エントロピーの増加の場合。 このパッケージをインストールすると、キー生成プロセスが高速化されます。

インストール中のエラーを回避するには、nsdという名前のシステムユーザーを作成します。

useradd -r nsd

-r オプションは、システムユーザーを作成します。 リポジトリを更新し、NSD、ldnsutils、およびhavegedをインストールします。

apt-get update
apt-get install nsd ldnsutils haveged

マスターサーバーからスレーブサーバーへのDNSゾーン転送は、共有シークレットによって保護されます。 次のコマンドを使用して、シークレットをランダムに生成します。

dd if=/dev/random count=1 bs=32 2> /dev/null | base64

出力文字列を書き留めます。 マスターサーバーとスレーブサーバーの両方の構成ファイルで使用します。

sHi0avMk1bME89cnJdHkYzFBbvQmQ8YZ

ゾーンファイル用に別のディレクトリを作成します。

mkdir /etc/nsd/zones

NSDの構成ファイルを編集します。

nano /etc/nsd/nsd.conf

1つ目は、ゾーンファイル、ログ、およびPID(プロセスID)ファイルの場所を指定するserverセクションです。

server:
    username: nsd
    hide-version: yes
    zonesdir: "/etc/nsd/zones"
    logfile: "/var/log/nsd.log"
    pidfile: "/run/nsd/nsd.pid"

hidden-version ディレクティブは、CHAOSクラスクエリが実行されたときにNSDがバージョンを返すのを防ぎます。

key セクションでは、 mykey という名前のキーを定義し、以前に生成されたシークレットを入力します。

key:
    name: "mykey"
    algorithm: hmac-sha256
    secret: "sHi0avMk1bME89cnJdHkYzFBbvQmQ8YZ"

zoneセクションには、ドメイン名、ゾーンファイル名、およびそのスレーブサーバーの詳細が含まれます。

zone:
    name: example.com
    zonefile: example.com.zone
    notify: 2.2.2.2 mykey
    provide-xfr: 2.2.2.2 mykey
zone:
    name: foobar.org
    zonefile: foobar.org.zone
    notify: 2.2.2.2 mykey
    provide-xfr: 2.2.2.2 mykey

notify:および Provide-xfr:行には、スレーブサーバーIPアドレスが必要です。 ファイルを保存し、example.comのゾーンファイルを作成します。

nano /etc/nsd/zones/example.com.zone

以下のデータをゾーンファイルに追加します。 すべてのエントリをカスタマイズする必要があるため、変数はマークされていません。

$ORIGIN example.com.
$TTL 1800
@       IN      SOA     master.example.com.    email.example.com. (
                        2014080301
                        3600
                        900
                        1209600
                        1800
                        )
@       IN      NS      master.example.com.
@       IN      NS      slave.example.com.
master  IN      A       1.1.1.1
slave   IN      A       2.2.2.2
@       IN      A       3.3.3.3
www     IN      CNAME   example.com.
@       IN      MX      10 aspmx.l.google.com.
@       IN      MX      20 alt1.aspmx.l.google.com.
@       IN      MX      20 alt2.aspmx.l.google.com.
@       IN      MX      30 aspmx2.googlemail.com.
@       IN      MX      30 aspmx3.googlemail.com.

このファイルを保存して、foobar.orgのゾーンファイルを作成します。

nano /etc/nsd/zones/foobar.org.zone

2番目のゾーンファイル:

$ORIGIN foobar.org.
$TTL 1800
@       IN      SOA     master.example.com.    email.example.com. (
                        2014080301
                        3600
                        900
                        1209600
                        1800
                        )
@       IN      NS      master.example.com.
@       IN      NS      slave.example.com.
@       IN      A       3.3.3.3
www     IN      CNAME   foobar.org.
@       IN      MX      0 mx.sendgrid.com.

ファイルを保存し、nsd-checkconfコマンドを使用して構成エラーを確認します。

nsd-checkconf /etc/nsd/nsd.conf

有効な構成では何も出力されません。 NSDサーバーを再起動します。

service nsd restart

dig コマンドを使用して、DNSレコードがドメインに対して有効であるかどうかを確認します。

dig ANY example.com. @localhost +norec +short

このコマンドからの出力例:

master.example.com. email.example.com. 2014080301 3600 900 1209600 1800
master.example.com.
slave.example.com.
3.3.3.3
10 aspmx.l.google.com.
20 alt1.aspmx.l.google.com.
20 alt2.aspmx.l.google.com.
30 aspmx2.googlemail.com.
30 aspmx3.googlemail.com.

2番目のドメインに対してdigコマンドを繰り返します。

dig ANY foobar.org. @localhost +norec +short

マスターサーバーにNSDを正常にインストールして構成し、2つのゾーンも作成しました。

スレーブサーバー

スレーブサーバーではキーの生成や署名が行われないため、NSDパッケージのみが必要です。

nsdという名前のシステムユーザーを作成します。

useradd -r nsd

リポジトリを更新してNSDをインストールします。

apt-get update
apt-get install nsd

ゾーンファイル用のディレクトリを作成します。

mkdir /etc/nsd/zones

NSD構成ファイルを編集します。

nano /etc/nsd/nsd.conf

構成ディレクティブを追加します。

server:
    username: nsd
    hide-version: yes
    zonesdir: "/etc/nsd/zones"
    logfile: "/var/log/nsd.log"
    pidfile: "/run/nsd/nsd.pid"

key:
    name: "mykey"
    algorithm: hmac-sha256
    secret: "sHi0avMk1bME89cnJdHkYzFBbvQmQ8YZ"

zone:
    name: example.com
    zonefile: example.com.zone
    allow-notify: 1.1.1.1 mykey
    request-xfr: 1.1.1.1 mykey
zone:
    name: foobar.org
    zonefile: foobar.org.zone
    allow-notify: 1.1.1.1 mykey
    request-xfr: 1.1.1.1 mykey

mykeysecretは、マスターサーバーに入力されたものとまったく同じである必要があります。 allow-notifyおよびrequest-xfr行でマスターサーバーのIPアドレスを使用します。

構成エラーを確認します。

nsd-checkconf /etc/nsd/nsd.conf

NSDサービスを再起動します。

service nsd restart

nsd-control コマンドを使用して、両方のドメインのゾーン転送を強制します。

nsd-control force_transfer example.com
nsd-control force_transfer foobar.org

次に、このサーバーがドメインexample.comのクエリに応答できるかどうかを確認します。

dig ANY example.com. @localhost +norec +short

これがマスターと同じ結果を返す場合、このゾーンは正しく設定されています。 foorbar.orgドメインに対してdigコマンドを繰り返して、そのゾーンが正しく設定されているかどうかを確認します。 これで、ドメインexample.comfoobar.orgに対して権限を持つNSDDNSサーバーのペアができました。

この時点で、Webブラウザでドメインにアクセスできるはずです。 それらは、私たちが設定したデフォルトのLAMPサーバー、または指定したホストに解決されます。

ステップ2—キーを生成し、ゾーンに署名します

このステップでは、ドメインごとにゾーン署名キー(ZSK)とキー署名キー(KSK)のペア(プライベートとパブリック)を生成します。 このセクションのコマンドは、特に指定がない限り、マスターサーバーで実行する必要があります。

現在のディレクトリをNSDのゾーンディレクトリに変更します。

cd /etc/nsd/zones

ldns-keygen コマンドは、キーファイルを生成し、その名前を次の形式で出力します。 K<domain>+<algorithm>+<key-id>. この名前を書き留める代わりに、後で簡単に参照できるように変数に割り当てます。

RSASHA1-NSEC3-SHA1アルゴリズムでZSKを生成します。

export ZSK=`ldns-keygen -a RSASHA1-NSEC3-SHA1 -b 1024 example.com`

次に、同じコマンドに -k オプションを追加して、KSKを生成します。

export KSK=`ldns-keygen -k -a RSASHA1-NSEC3-SHA1 -b 2048 example.com`

このディレクトリには、次の6つの追加ファイルが含まれます。

  • .private拡張子の付いた2つの秘密鍵。
  • .key拡張子の付いた2つの公開鍵。
  • .ds拡張子を持つ2つのDSレコード。

ステップ3では、異なるダイジェストタイプのDSレコードを生成するため、混乱を避けるために、これらのDSレコードファイルを削除してください。

rm $ZSK.ds $KSK.ds

foobar.orgドメインに対してldns-keygenコマンドを繰り返します。

export ZSK2=`ldns-keygen -a RSASHA1-NSEC3-SHA1 -b 1024 foobar.org`
export KSK2=`ldns-keygen -k -a RSASHA1-NSEC3-SHA1 -b 2048 foobar.org`
rm $ZSK2.ds $KSK2.ds

ldns-signzone コマンドは、DNSゾーンに署名するために使用されます。 このコマンドの-sオプションは、salt値を取ります。 ランダムな文字を生成し、SHA1ハッシュを計算し、この値をソルトとして渡します。

ldns-signzone -n -p -s $(head -n 1000 /dev/random | sha1sum | cut -b 1-16) example.com.zone $ZSK $KSK

example.com.zone.signedという名前の新しいファイルが作成されます。

foobar.orgドメインに対してldns-signzoneコマンドを実行します。

ldns-signzone -n -p -s $(head -n 1000 /dev/random | sha1sum | cut -b 1-16) foobar.org.zone $ZSK2 $KSK2

NSDは、.signedゾーンファイルを使用するように構成する必要があります。 構成ファイルを編集します。

nano /etc/nsd/nsd.conf

両方のドメインのzone:セクションの下にある zonefile:オプションを変更します。

zone:
    name: example.com
    zonefile: example.com.zone.signed
    notify: 2.2.2.2 mykey
    provide-xfr: 2.2.2.2 mykey
zone:
    name: foobar.org
    zonefile: foobar.org.zone.signed
    notify: 2.2.2.2 mykey
    provide-xfr: 2.2.2.2 mykey

変更を適用してゾーンファイルをリロードするには、次のコマンドを実行します。

nsd-control reconfig
nsd-control reload example.com
nsd-control reload foobar.org

DNSクエリを実行して、DNSKEYレコードを確認します。

dig DNSKEY example.com. @localhost +multiline +norec

これにより、ZSKとKSKの公開鍵が次のように出力されます。

; <<>> DiG 9.9.5-3-Ubuntu <<>> DNSKEY example.com. @localhost +norec +multiline
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14231
;; flags: qr aa; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;example.com.                IN DNSKEY

;; ANSWER SECTION:
example.com.            1800 IN DNSKEY 256 3 7 (
                                AwEAAbUfMzOJWWWniRSwDb2/2Q6bVpVoEPltPj0h5Qu6
                                hzBdYA4HJYlVXTJ6veNENI/5lV1y84Dhc47j4VAoA66F
                                j7xuTTZjzcuu0KAkQg8Jr2uCmmOuI/rZR7sWZMooHFZ1
                                JPPJZak8HKSNGvHXlMJiz9JPOA3ebJ/liG6lCGJshPah
                                ) ; ZSK; alg = NSEC3RSASHA1; key id = 2870
example.com.            1800 IN DNSKEY 257 3 7 (
                                AwEAAeMDpaVQJixHg1deUDBRRwVldJadgyRZPlieSoVf
                                ps3tYPvTD0nVBOQxenf+m4N/ALpnC5TH4GpxZLYS9IFc
                                rujudQrqA0UuTXBvIWP+XvuJ1yoyZCxO9PHV+GsefjI7
                                kvnmBD1V9UJlGVlHlB3YXHa3f/J5E0RujMnE4a19KG7b
                                HkYebK/2zjzhqXan9442VAG6jhw0lUUJZrCpZjMDEi9n
                                LhJOUSymxglQv1BftALmYnYcuHId9NCwZbvZMb7bS239
                                bm6ONjwqSHqW2slNhBnDVnng2tDfNwjR+eDz5oUbtw4b
                                LMtVACx1WzJEKbIN4rHY7aRe7Ao+4jvSJ8ozVrM=
                                ) ; KSK; alg = NSEC3RSASHA1; key id = 17385

;; Query time: 5 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Thu Sep 04 01:37:18 IST 2014
;; MSG SIZE  rcvd: 467

2番目のドメインに対してdigコマンドを繰り返し、応答を確認します。

dig DNSKEY foobar.org. @localhost +multiline +norec

マスターサーバーは、 signedDNS応答を提供するようになりました。

奴隷

このゾーンをスレーブサーバーに転送する必要があります。 スレーブサーバーにログインし、両方のゾーンの転送を強制します。

nsd-control force_transfer example.com
nsd-control force_transfer foobar.org

このサーバー上のDNSKEYレコードをクエリします。

dig DNSKEY example.com. @localhost +multiline +norec

これにより、マスターサーバーで見たのと同じDNSKEYが返されます。 両方のDNSサーバーは、署名されたDNS応答を提供するように構成されています。

ステップ3—DSレコードを生成する

このステップでは、2つのDSレコードを生成します。次のステップでは、ドメインレジストラのコントロールパネルに入力します。 DSレコードは、次の仕様になります。

アルゴリズム ダイジェストタイプ
DSレコード1 RSASHA1-NSEC3-SHA1 SHA1
DSレコード2 RSASHA1-NSEC3-SHA1 SHA256

次のコマンドは、マスターサーバーで実行されます。

ldns-key2ds コマンドは、署名されたゾーンファイルからDSレコードを生成します。 ゾーンファイルディレクトリに切り替えて、次のコマンドを実行します。

cd /etc/nsd/zones
ldns-key2ds -n -1 example.com.zone.signed && ldns-key2ds -n -2 example.com.zone.signed

-1 オプションはハッシュ関数としてSHA1を使用しますが、-2は同じためにSHA256を使用します。 -n オプションは、結果のDSレコードをファイルではなくstdoutに書き込みます。

これにより、2行の出力が返されます。

example.com. 1800    IN      DS      17385 7 1 c1b9f7f1425bc44976dc19165e48c60032e7820d
example.com. 1800    IN      DS      17385 7 2 98216f4d66d24dbb752c46523a747a97bbad49d5846bbaa6256b6950b4a40995

次の表に、これらのDSレコードの各フィールドを示します。

キータグ アルゴリズム ダイジェストタイプ ダイジェスト
DSレコード#1 17385 7 1 c1b9f7f1[…]
DSレコード#2 17385 7 2 98216f4d[…]

foobar.orgのDSレコードを生成します。

cd /etc/nsd/zones
ldns-key2ds -n -1 foobar.org.zone.signed && ldns-key2ds -n -2 foobar.org.zone.signed

上記の表に示すように、4つすべてのDSレコード(ドメインごとに2つ)のすべての部分を書き留めます。 次のステップでそれらが必要になります。

ステップ4—レジストラを使用してDSレコードを構成する

このセクションでは、ドメインレジストラのコントロールパネルにDSレコードを追加します。 これにより、DSレコードがトップレベルドメイン(TLD)のネームサーバーに公開されます。 この手順では、例としてGoDaddyのコントロールパネルを使用します。

GoDaddyにログインし、ドメイン名を選択します。

初めてのネームサーバーのセットアップのみ:

ネームサーバーを初めてセットアップするには、ホスト名セクションを1回実行する必要があります。 ネームサーバードメインがmy-soa.comのように異なる場合は、ネームサーバードメインのみに対してこの手順を実行する必要があります。

ホスト名セクションの管理をクリックします。

一部のレジストラは、これを「子ネームサーバー」と呼ぶ場合があります。 ホスト名の追加をクリックし、最初のドロップレットのIPを指すホスト名master.example.comを作成します。

追加をクリックします。 この手順をもう一度繰り返して、2番目のドロップレットのIPを指すホスト名slave.example.comを作成します。

すべてのドメイン:

これらの2つのホスト名は、このドメインのネームサーバーとして設定する必要があります。 NameserversセクションのManageをクリックして、両方を追加します。

DSレコードセクションの管理をクリックします。

適切なフィールドに詳細を入力します。 必要に応じて、前の手順のチャートを参照してください。

両方のレコードを保存します。

数分後、DSレコードをクエリします。

dig DS example.com. +trace +short | egrep '^DS'

出力には、両方のDSレコードが含まれている必要があります。

DS 17385 7 2 98216F4D66D24DBB752C46523A747A97BBAD49D5846BBAA6256B6950 B4A40995 from server 192.55.83.30 in 1 ms.
DS 17385 7 1 C1B9F7F1425BC44976DC19165E48C60032E7820D from server 192.55.83.30 in 1 ms.

2番目のドメインに対してこれらの手順を実行するときは、ネームサーバーが適切なネームサーバードメインに設定されていることを確認してください。

このドメインのホスト名を作成する必要はありません。

ステップ5—DNSSECの動作を確認する

DNSSECは、次のサイトで確認できます。

最初のWebサイトからのテストが成功すると、次の結果が表示されます。

マークされた線に注意してください。 簡単に言えば、彼らは次のように読んでいます。

  1. DSレコード#2(ダイジェストタイプSHA256)はKSK(キーID 17385)を検証します
  2. KSK(キーID 17385)は、他のDNSKEY(ZSK)を検証します
  3. ZSK(キーID 2870)は、Aレコードの署名を検証します

マスターサーバーとスレーブサーバーの両方がDNSSEC応答を提供するようになりました。

また、Webブラウザで両方のドメインを表示できる必要があります。 3.3.3.3で設定したテストWebサーバーのデフォルトのApache/Ubuntuページ、またはドメインの@エントリで指定したWebホストを指す必要があります。

ゾーンレコードの変更

ゾーンレコードを変更するには、署名されていないファイル( example.com.zone )を編集する必要があります。 変更したら、SOAシリアル番号をインクリメントし、変更を有効にするためにゾーンに再度署名する必要があります。

SOAシリアルは次の形式です。

YYYYMMDDnn

ゾーンファイルを変更する場合は、現在の日付に設定してください。 したがって、2014年9月22日に最初の変更を行うと、シリアルは次のようになります。

2014092201

同じ日に後続の変更を行う場合は、最初の2桁をインクリメントする必要があります。 SOAシリアルをインクリメントするのを忘れた場合、ゾーンファイルに加えられた変更はスレーブサーバーに転送されません。

注:に変更を加える .signed ファイルは直接署名を無効にし、検証の失敗を引き起こします。

ゾーンに署名するために毎回長いコマンドを入力する代わりに、シェルスクリプトを作成します。 マスターDNSサーバーにファイルを作成して編集します。

nano /usr/local/bin/dnszonesigner

次のコードを貼り付けます。

#!/bin/bash
PDIR=`pwd`
ZONEDIR="/etc/nsd/zones" #location of your zone files
DOMAIN=$1
cd $ZONEDIR
KSK=$(basename $(grep -r "`grep '(ksk)' $DOMAIN.zone.signed | cut -f3-10`" K$DOMAIN.*.key | cut -d':' -f1) .key)
ZSK=$(basename $(grep -r "`grep '(zsk)' $DOMAIN.zone.signed | cut -f3-10`" K$DOMAIN.*.key | cut -d':' -f1) .key)
/usr/bin/ldns-signzone -n -p -s $(head -n 1000 /dev/random | sha1sum | cut -b 1-16) -f $ZONEDIR/$DOMAIN.zone.signed $DOMAIN.zone $ZSK $KSK
/usr/sbin/nsd-control reload $DOMAIN
/usr/sbin/nsd-control notify $DOMAIN
cd $PDIR

これらの行のほとんどは、手動で実行したチュートリアルの前半から認識されているはずです。

このファイルを実行可能にします。

chmod +x /usr/local/bin/dnszonesigner

DNSレコードを追加、削除、または編集した後は、必ず SOAシリアルをインクリメントして、このスクリプトを実行してください。

dnszonesigner example.com

このシェルスクリプトは、 $ PATH 変数で定義されたディレクトリに配置されているため、どのディレクトリからでも機能します。

追加の読み物

シャロンキャンベルによる追加コピー