独自のDNSサーバー(BIND)をホストする理由はさまざまです。たとえば、マシンを頻繁にデプロイして強制終了したり、ロードする必要がある場合があります。 DNSを介して非常に迅速にバランスを取ります。
ただし、60台のサーバーができたので、すべてのレコードを追跡するのに苦労し、ゾーンファイルを編集するときに間違いを犯しがちです。まだ悪いことは何もありませんが(バックアップとして他のDNSプロバイダーを使用しています)、ファイルを手動で編集するよりも良い方法を探しています。
また、悪名高い chef を使用して新しいインスタンスをデプロイするのは簡単なので、これを手作業で行うのは、最も時間がかかるようなものです。これを自動化できれば興味があります。誰もがこれについて知っていますか?このゾーンファイルを編集および維持するための良い習慣は何ですか?
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 -%>
これは1か月前のことですが、これを管理するための自動システムのセットアップを完了しました。これは、以下を含むgitリポジトリで構成されています。
ゾーンファイルを更新したい場合-これがプロセスです。
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あなたになります。
これは、テキスト構成の力に伴う苦痛です。毎日変更する必要がない限り、60のゾーンファイルを処理する数は少ないと思いますが、 PowerDNS のようにデータベース(PostgreSQLなど)からのDNSデータをサポートするサーバーの方が適しているかもしれません。 =。これにより、データを処理するための簡単なスクリプト/ページ/アプリを作成できます(顧客にフロントエンドを提供することもできます)。
SQLを使用して、サーバーのスレーブになるようにバインドを構成することもできます。これにより、マスターからゾーン情報が自動的に読み込まれます。
ベストプラクティスについて:
vim
マクロを使用して複数のファイルを編集していますが、sedやその他のツールを使用して編集できますこれらのルールを試してください
すべてのサーバーがchef構成で定義されていると想定しているので、そのデータを使用してゾーンファイルを単純に生成するのはどうでしょうか。 chefがこのための内部機能を持っているかどうかはわかりませんが、スクリプトを作成するのは比較的簡単なはずです。物事を分離しておくために、これらの「動的」サーバーを独自のゾーンに委任することをお勧めします。
そうは言っても、負荷分散の目的でDNSを使用してもよろしいですか?
シリアル番号が上がったことを確認するなどの整合性検証スクリプト、およびSCMは、おそらくSubversionのようなもの、またはローカルで優先される毒が何であれ、履歴と元に戻す機能を備えています。
Svnのようなデータを取得したら、人間がゾーンファイルを編集できるようにしながら、個々のホストを追加/削除するツールを使用できます。
それ以外の場合は、フラットファイルからデータベースにデータを移動するためのさまざまなオプションがあります。 PowerDNSは1つであり、BindのDLZパッチはもう1つです。パフォーマンスの観点から、これらが公開されているゾーンである場合は、データベースでバックアップされたサーバーを非表示のマスターとして保持し、AXFR/IXFRに変更を公開マスターに伝播させてストックバインドを実行できるようにする必要があることに注意してください。内部ゾーン(corp.example.com)の場合、これはやり過ぎの可能性があります。
60台のサーバーの場合、WebminのBINDモジュールは適切に機能するはずです。 このリスト も確認してください
編集:私は質問の最初の文を読んでいませんでした。
Puppet/chefを介して、または独立して、独自のスクリプトをロールする以外に、これを行う安価な方法があるかどうかはわかりません。
私は、BINDの上にあるいくつかの商用の「DNS管理」ソリューションを知っています。また、レコードをすばやく追加/削除するための簡単なWebインターフェイスとSOAP/RestAPIも提供します。最近いくつかの製品を評価したので、必要に応じてこれらの企業に情報を提供できます。