DNS SubDomainの委任

Posted on 2020/03/02

ToC

DNS SubDomainの委任

委任とは…

ドメインに新しくサブドメインを作成します。その際に、そのサブドメインの管理権限を 他の権威サーバーに移すことをゾーンの委任と言います。ゾーンの委任により別の管理者が サブドメインを管理できるようになります。

委任の想定ケース

example.io という親ドメイン親を保持していると仮定します。 今回、新たに blueprint.example.io というサブドメインを作成して、 そのサブドメインを委任をしてもらうことを想定したケースを実施してみたいと思います。 現在、親ドメインであるexample.io のネームサーバーはAWSのRoute 53を利用しており、 blueprint.example.ioのネームサーバーにAlibaba DNSを採用します。

classDiagram class 親ドメイン{ ドメイン名: example.io DNSサーバー: Route 53 } class サブドメイン{ ドメイン名: blueprint.example.io DNSサーバー: Alibaba DNS } 親ドメイン o-- サブドメイン

Alibaba Cloudの提供するDNSサービスであるAlibaba DNSでも、2019/8/13のアップデートにより サブドメインを管理できるようになりました。これにより、今回の想定ケースが実装を行うことできます。

ビジネスニーズに合わせて、ドメイン名は他のDNSサービスで解決し、サブドメイン名を AlibabaCloud DNS で解決できるようになりました。またドメイン名とサブドメイン名を 違う AlibabaCloud のアカウントで管理できるようになりました。 https://jp.alibabacloud.com/news/product

ゾーンカットの実施

親ドメイン側で登録する内容

親ドメイン側では、サブドメインの委任(ゾーンカット)を示す情報の登録が必要です。 具体的には、サブドメインのネームサーバーを示すNSレコードセットを登録します。

blueprint.example.io.  IN  NS  ns7.alidns.com.
blueprint.example.io.  IN  NS  ns8.alidns.com.

なお、Alibaba DNSをサブドメインの権威サーバーとして登録する際には、 Alibaba DNSから親ドメインの所有者の検証を行うために追加の TXTレコードセット を 登録して置く必要があります。 こちらは、事前にAlibaba Cloudの Alibaba DNSのコンソールから登録情報を取得します。

/posts/2020/03/img/blueprint-domain02_hu20db914e7b313ed05801cbe4ad3ff421_48063_600x0_resize_lanczos_3.png
/posts/2020/03/img/blueprint-domain03_hu9a7637938c2ec7e2e4841807da014b0c_81912_600x0_resize_lanczos_3.png

コンソールで取得したホスト名と値を指定したレコードをAWSに登録します。

alidnscheck.example.io.  IN  TXT  YOUR-CODE-1234567890

サブドメイン側で登録する内容

サブドメイン側の権威サーバーにドメインの作成(SOAレコードセット )とサブドメインの ネームサーバーを示すNSレコードセットを登録します。

blueprint.example.io.  IN  SOA  ns7.alidns.com. hostmaster.hichina.com.  2020010410 3600 1200 86400 360
blueprint.example.io.  IN  NS  ns7.alidns.com.
blueprint.example.io.  IN  NS  ns8.alidns.com.
/posts/2020/03/img/blueprint-domain04_hu01d345df9f53ae5e285e00e53db19bc0_223435_600x0_resize_lanczos_3.png

ドメインの登録(SOAレコードの登録)

SOAレコードの登録は、Alibaba Cloudでは「ドメインの登録」により、実行します。 先ほどは、「ドメインの所有者の検証コードの取得」画面となりましたが、 親ドメインへTXTレコードセット が登録されているため登録が続行できるようになります。

/posts/2020/03/img/blueprint-domain01_hu55bc095d784575354e895f7193c609a1_202044_600x0_resize_lanczos_3.png

登録情報の確認

これで blueprint.example.ioは、Alibaba DNSで管理されるようになりました。 別のレコードセットを登録・追加することも可能です。

Alibaba ROSのサンプル

Infrastructure as Codeも同時に実施したので、参考までにAlibaba ROSのテンプレートも 下記に記載しておきます。 

ROSTemplateFormatVersion: '2015-09-01'
Parameters:
  DomainName:
    Type: String
    Description: Domain name
    Default: blueprint.example.io
  GroupName:
    Type: String
    Description: Domain group name
    Default: blueprint
Resources:
  DomainGroup:
    Type: 'ALIYUN::DNS::DomainGroup'
    Properties:
      GroupName:
        Ref: GroupName
  Domain:
    Type: 'ALIYUN::DNS::Domain'
    Properties:
      DomainName:
        Ref: DomainName
      GroupId:
        'Fn::GetAtt':
          - DomainGroup
          - GroupId
  NsDomainRecord1:
    Type: 'ALIYUN::DNS::DomainRecord'
    Properties:
      RR: '@'
      DomainName:
        Ref: DomainName
      Value: ns7.alidns.com
      TTL: 900
      Line: default
      Type: NS
    DependsOn: Domain
  NsDomainRecord2:
    Type: 'ALIYUN::DNS::DomainRecord'
    Properties:
      RR: '@'
      DomainName:
        Ref: DomainName
      Value: ns8.alidns.com
      TTL: 900
      Line: default
      Type: NS
    DependsOn: Domain
Outputs:
  GroupName:
    Description: The name of the domain name group
    Value:
      'Fn::GetAtt':
        - Domain
        - GroupName
  DomainId:
    Description: Domain ID
    Value:
      'Fn::GetAtt':
        - Domain
        - DomainId
  DomainName:
    Description: Domain name
    Value:
      'Fn::GetAtt':
        - Domain
        - DomainName
  DnsServers:
    Description: The DNS list for the domain name under resolution
    Value:
      'Fn::GetAtt':
        - Domain
        - DnsServers
  GroupId:
    Description: Domain name group ID
    Value:
      'Fn::GetAtt':
        - DomainGroup
        - GroupId
  NsDomainRecord1Id:
    Description: Parse the ID of the record
    Value:
      'Fn::GetAtt':
        - NsDomainRecord1
        - RecordId
  NsDomainRecord2Id:
    Description: Parse the ID of the record
    Value:
      'Fn::GetAtt':
        - NsDomainRecord2
        - RecordId