開発者ドキュメント

Ubuntu18.04でDNSControlを使用してDNSを展開および管理する方法

著者は、 Electronic Frontier Foundation Inc を選択して、 Write forDOnationsプログラムの一環として寄付を受け取りました。

序章

DNSControlinfrastructure-as-codeツールであり、バージョン管理、テスト、自動展開などの標準的なソフトウェア開発原則を使用してDNSゾーンを展開および管理できます。 DNSControlはStackExchangeによって作成され、Goで記述されています。

DNSControlを使用すると、ゾーンファイルがプログラム可能な形式で保存されるため、手動のDNS管理の落とし穴の多くが解消されます。 これにより、ゾーンを複数のDNSプロバイダーに同時に展開し、構文エラーを識別し、DNS構成を自動的にプッシュして、人的エラーのリスクを減らすことができます。 DNSControlのもう1つの一般的な使用法は、DNSを別のプロバイダーにすばやく移行することです。 たとえば、DDoS攻撃やシステム停止が発生した場合です。

このチュートリアルでは、DNSControlをインストールして構成し、基本的なDNS構成を作成して、ライブプロバイダーへのDNSレコードの展開を開始します。 このチュートリアルの一部として、DNSプロバイダーの例としてDigitalOceanを使用します。 別のプロバイダーを使用する場合、セットアップは非常に似ています。 終了すると、安全なオフライン環境でDNS構成を管理およびテストし、それを本番環境に自動的に展開できるようになります。

前提条件

このガイドを開始する前に、次のものが必要です。

これらの準備ができたら、root以外のユーザーとしてサーバーにログインして開始します。

ステップ1—DNSControlをインストールする

DNSControlはGoで記述されているため、サーバーにGoをインストールし、GOPATHを設定することからこの手順を開始します。

GoはUbuntuのデフォルトのソフトウェアリポジトリ内で利用可能であり、従来のパッケージ管理ツールを使用してインストールすることができます。

ローカルパッケージインデックスを更新して、新しいアップストリームの変更を反映することから始めます。

  1. sudo apt update

次に、golang-goパッケージをインストールします。

  1. sudo apt install golang-go

インストールを確認した後、aptはGoとそれに必要なすべての依存関係をダウンロードしてインストールします。

次に、Goに必要なパス環境変数を構成します。 これについて詳しく知りたい場合は、GOPATHの理解でこのチュートリアルを読むことができます。 ~/.profileファイルを編集することから始めます。

  1. nano ~/.profile

ファイルの最後に次の行を追加します。

〜/ .profile
...
export GOPATH="$HOME/go"
export PATH="$PATH:$GOPATH/bin"

これらの行をファイルの最後に追加したら、保存して閉じます。 次に、ログアウトして再度ログインするか、ファイルを再度ソースして、プロファイルをリロードします。

  1. source ~/.profile

Goをインストールして構成したので、DNSControlをインストールできます。

go getコマンドを使用して、コードのコピーをフェッチし、自動的にコンパイルしてGoディレクトリにインストールできます。

  1. go get github.com/StackExchange/dnscontrol

これが完了したら、インストールされているバージョンをチェックして、すべてが機能していることを確認できます。

  1. dnscontrol version

出力は次のようになります。

Output
dnscontrol 0.2.8-dev

dnscontrol: command not foundエラーが表示された場合は、Goパスの設定を再確認してください。

DNSControlをインストールしたので、構成ディレクトリを作成し、DNSControlをDNSプロバイダーに接続して、DNSレコードを変更できるようにすることができます。

ステップ2—DNSControlの構成

このステップでは、DNSControlに必要な構成ディレクトリを作成し、DNSプロバイダーに接続して、DNSレコードにライブ変更を加え始めることができるようにします。

まず、DNSControl構成を保存できる新しいディレクトリを作成してから、そのディレクトリに移動します。

  1. mkdir ~/dnscontrol
  2. cd ~/dnscontrol

注:このチュートリアルでは、DNSControlの初期設定に焦点を当てます。 ただし、本番環境で使用する場合は、DNSControl構成を Git などのバージョン管理システム(VCS)に保存することをお勧めします。 これの利点には、完全なバージョン管理、テストのためのCI / CDとの統合、シームレスなロールバック展開などが含まれます。

DNSControlを使用してBINDゾーンファイルを書き込む場合は、zonesディレクトリも作成する必要があります。

  1. mkdir ~/dnscontrol/zones

BINDゾーンファイルは、DNSゾーン/レコードをプレーンテキスト形式で保存するための生の標準化された方法です。 もともとはBINDDNSサーバーソフトウェアに使用されていましたが、現在ではDNSゾーンを保存するための標準的な方法として広く採用されています。 DNSControlによって生成されたBINDゾーンファイルは、カスタムまたはセルフホストのDNSサーバーにインポートする場合、または監査目的で役立ちます。

ただし、DNSControlを使用してDNSの変更を管理対象プロバイダーにプッシュするだけの場合は、zonesディレクトリは必要ありません。

次に、creds.jsonファイルを構成する必要があります。これにより、DNSControlがDNSプロバイダーに対して認証を行い、変更を加えることができます。 creds.jsonの形式は、使用しているDNSプロバイダーによって若干異なります。 独自のプロバイダーの構成を見つけるには、公式DNSControlドキュメントのサービスプロバイダーリストを参照してください。

~/dnscontrolディレクトリにファイルcreds.jsonを作成します。

  1. cd ~/dnscontrol
  2. nano creds.json

DNSプロバイダーのサンプルcreds.json構成をファイルに追加します。 DNSプロバイダーとしてDigitalOceanを使用している場合は、次を使用できます。

〜/ dnscontrol / creds.json
{
  "digitalocean": {
    "token": "your-digitalocean-oauth-token"
  }
}

このファイルは、DNSControlに接続するDNSプロバイダーを通知します。

DNSプロバイダーに何らかの形式の認証を提供する必要があります。 これは通常、APIキーまたはOAuthトークンですが、公式のDNSControlドキュメントのサービスプロバイダーリストに記載されているように、一部のプロバイダーは追加情報を必要とします。

警告:このトークンはDNSプロバイダーアカウントへのアクセスを許可するため、パスワードと同じように保護する必要があります。 また、バージョン管理システムを使用している場合は、トークンを含むファイルが除外されていることを確認してください(例: .gitignore)を使用するか、何らかの方法で安全に暗号化されます。

DNSプロバイダーとしてDigitalOceanを使用している場合は、前提条件の一部として生成したDigitalOceanアカウント設定で必要なOAuthトークンを使用できます。

複数の異なるDNSプロバイダーがある場合(たとえば、複数のドメイン名や委任されたDNSゾーンの場合)、これらすべてを同じcreds.jsonファイルで定義できます。

初期DNSControl構成ディレクトリを設定し、DNSControlがDNSプロバイダーに対して認証して変更できるようにcreds.jsonを構成しました。 次に、DNSゾーンの構成を作成します。

ステップ3—DNS構成ファイルを作成する

このステップでは、ドメイン名または委任されたDNSゾーンのDNSレコードを含む初期DNS構成ファイルを作成します。

dnsconfig.jsは、DNSControlのメインDNS構成ファイルです。 このファイルでは、DNSゾーンとそれに対応するレコードがJavaScript構文を使用して定義されています。 これはDSLまたはドメイン固有言語として知られています。 DNSControlの公式ドキュメントのJavaScriptDSL ページに、詳細が記載されています。

まず、~/dnscontrolディレクトリにDNS構成ファイルを作成します。

  1. cd ~/dnscontrol
  2. nano dnsconfig.js

次に、次のサンプル構成をファイルに追加します。

〜/ dnscontrol / dnsconfig.js
// Providers:

var REG_NONE = NewRegistrar('none', 'NONE');
var DNS_DIGITALOCEAN = NewDnsProvider('digitalocean', 'DIGITALOCEAN');

// Domains:

D('example.com', REG_NONE, DnsProvider(DNS_DIGITALOCEAN),
    A('@', 'your-server-ipv4-address')
);

このサンプルファイルは、特定のプロバイダー(この場合はDigitalOceanによってホストされるexample.com)のドメイン名またはDNSゾーンを定義します。 Aレコードの例もゾーンルート(@)に対して定義されており、ドメイン/ウェブサイトをホストしているサーバーのIPv4アドレスを指しています。

基本的なDNSControl構成ファイルを構成する3つの主要な機能があります。

公式のDNSControlドキュメントのサービスプロバイダーリストを使用して、NewRegistrar()NewDnsProvider()、およびD()を適宜構成する必要があります。

DNSプロバイダーとしてDigitalOceanを使用していて、(権威のあるネームサーバーではなく)DNSを変更するだけでよい場合は、前のコードブロックのサンプルはすでに正しいです。

完了したら、ファイルを保存して閉じます。

この手順では、関連するプロバイダーを定義して、DNSControlのDNS構成ファイルを設定します。 次に、いくつかの有用なDNSレコードをファイルに入力します。

ステップ4—DNS構成ファイルにデータを入力する

次に、DNSControl構文を使用して、DNS構成ファイルにWebサイトまたはサービスに役立つDNSレコードを入力できます。

DNSレコードが生の行ごとの形式で書き込まれる従来のBINDゾーンファイルとは異なり、DNSControl内のDNSレコードは、D()関数の関数パラメーター(ドメイン修飾子)として定義されます。ステップ3。

ドメイン修飾子は、AAAAAMXTXTNS、[ X133X]

モバイルバージョンを終了