web-dev-qa-db-ja.com

ゾーンファイルの管理

独自のDNSサーバー(BIND)をホストする理由はさまざまです。たとえば、マシンを頻繁にデプロイして強制終了したり、ロードする必要がある場合があります。 DNSを介して非常に迅速にバランスを取ります。

ただし、60台のサーバーができたので、すべてのレコードを追跡するのに苦労し、ゾーンファイルを編集するときに間違いを犯しがちです。まだ悪いことは何もありませんが(バックアップとして他のDNSプロバイダーを使用しています)、ファイルを手動で編集するよりも良い方法を探しています。

また、悪名高い chef を使用して新しいインスタンスをデプロイするのは簡単なので、これを手作業で行うのは、最も時間がかかるようなものです。これを自動化できれば興味があります。誰もがこれについて知っていますか?このゾーンファイルを編集および維持するための良い習慣は何ですか?

5

Chef検索を使用すると、検出されたノードのホスト名/ fqdnとIPアドレスを使用して、Chefでゾーンファイルをテンプレートとして動的に構築できます。

hosts = search(:node, "*:*")

template '/path/to/zonefile' do
  source 'zonefile.erb'
  variables(:hosts => hosts)
  owner 'root'
  group 'root'
  mode 0644
end

また、テンプレートは、検索の各結果のホスト名、fqdn、およびIPアドレスを使用して、渡されたhosts変数を反復処理します。考案された例:

<% @hosts.each do |h| -%>
<%= h['fqdn'] %>. IN A <%= h['ipaddress'] %>
<% end -%>
2
jtimberman

これは1か月前のことですが、これを管理するための自動システムのセットアップを完了しました。これは、以下を含むgitリポジトリで構成されています。

  1. すべてのプライマリゾーンと構成ファイル。
  2. すべてのセカンダリゾーンと構成ファイル。
  3. セカンダリネームサーバーのスクリプトをビルドする-Ubuntu10.0.4LTS
  4. プライマリネームサーバーとセカンダリネームサーバーの両方を更新できる非常にシンプルなCapistranoレシピ。

ゾーンファイルを更新したい場合-これがプロセスです。

git pull #to make sure it's current.
#Open the zone file and edit.
git diff #verify the change is what I want.
git commit -a; git Push
cap primary:update #that also sends a notify to my secondary who pulls down the new zone
cap secondary:update #if I'm just updating the secondary.

それは本当に簡単に機能します-私は何かをするためにたくさんのサーバーにログインする必要はありません-そして私が何を変えているかを見るのはとても簡単です。

また、それは私に変化の良い歴史を与えてくれます。

リポジトリのコピーが必要な場合は、lemmeが知っているだけで、DMあなたになります。

3
darron

これは、テキスト構成の力に伴う苦痛です。毎日変更する必要がない限り、60のゾーンファイルを処理する数は少ないと思いますが、 PowerDNS のようにデータベース(PostgreSQLなど)からのDNSデータをサポートするサーバーの方が適しているかもしれません。 =。これにより、データを処理するための簡単なスクリプト/ページ/アプリを作成できます(顧客にフロントエンドを提供することもできます)。

SQLを使用して、サーバーのスレーブになるようにバインドを構成することもできます。これにより、マスターからゾーン情報が自動的に読み込まれます。

ベストプラクティスについて:

  • ゾーンファイルに不要なコメントがないようにしてください。
  • タブ/スペースの正しい使用を強制する
  • ゾーンファイルのドメイン名を使用する
  • vimマクロを使用して複数のファイルを編集していますが、sedやその他のツールを使用して編集できます
2
coredump

これらのルールを試してください

  • ゾーンの変更をスレーブに通知するようにマスターDNSサーバーを構成します。
  • バージョンを自動的にインクリメントするツールを使用してゾーンファイルを編集します。私はemacsを使用しています。
  • ゾーンファイルをバージョン管理システム(CVS、Subversion、またはGIT)に保存します。
  • ゾーンファイルをコミットしたり、マスターサーバーをリロードしたりする前に、ソース管理システムに対してゾーンファイルを差分します。変更を視覚的に確認します。できれば、書面による変更仕様に照らして確認します。変更仕様をコミットメッセージとして使用します。
  • マスターバインドサーバーを再起動するのではなく、リロードを使用して変更を更新します。ソース管理システムからゾーン構成を更新し、マスターサーバーを1つのステップでリロードするスクリプトを検討してください。
  • ゾーン構成で短いタイムアウトを使用します。変更間の予想頻度よりも少なくする必要があります。
  • フォワードゾーンとリバースゾーンの両方を管理している場合は、共通の仕様から両方のファイルを生成するツールの使用を検討してください。
1
BillThor

すべてのサーバーがchef構成で定義されていると想定しているので、そのデータを使用してゾーンファイルを単純に生成するのはどうでしょうか。 chefがこのための内部機能を持っているかどうかはわかりませんが、スクリプトを作成するのは比較的簡単なはずです。物事を分離しておくために、これらの「動的」サーバーを独自のゾーンに委任することをお勧めします。

そうは言っても、負荷分散の目的でDNSを使用してもよろしいですか?

1
andol

シリアル番号が上がったことを確認するなどの整合性検証スクリプト、およびSCMは、おそらくSubversionのようなもの、またはローカルで優先される毒が何であれ、履歴と元に戻す機能を備えています。

Svnのようなデータを取得したら、人間がゾーンファイルを編集できるようにしながら、個々のホストを追加/削除するツールを使用できます。

それ以外の場合は、フラットファイルからデータベースにデータを移動するためのさまざまなオプションがあります。 PowerDNSは1つであり、BindのDLZパッチはもう1つです。パフォーマンスの観点から、これらが公開されているゾーンである場合は、データベースでバックアップされたサーバーを非表示のマスターとして保持し、AXFR/IXFRに変更を公開マスターに伝播させてストックバインドを実行できるようにする必要があることに注意してください。内部ゾーン(corp.example.com)の場合、これはやり過ぎの可能性があります。

1
Phil P

60台のサーバーの場合、WebminのBINDモジュールは適切に機能するはずです。 このリスト も確認してください

編集:私は質問の最初の文を読んでいませんでした。

Puppet/chefを介して、または独立して、独自のスクリプトをロールする以外に、これを行う安価な方法があるかどうかはわかりません。

私は、BINDの上にあるいくつかの商用の「DNS管理」ソリューションを知っています。また、レコードをすばやく追加/削除するための簡単なWebインターフェイスとSOAP/RestAPIも提供します。最近いくつかの製品を評価したので、必要に応じてこれらの企業に情報を提供できます。

0
Not Now