ConoHaのインフラでDNSサーバを構築する方法を紹介

こんにちはっ、陸ステです!
※この記事は「ConoHa Advent Calendar 2022」の15日の枠です。

14日目は@CloudRemixさんのConoHa VPS割引きっぷの無料SSL証明書を使ってみるでした。
今年のAdvent Calendarでは美雲このはちゃんも7日目/19日目に参加されています!
(19日目は他の方へ開放されたみたいです。)

余談ですがブログ見てConoHaショップ実店舗(ブース)でPayPayに対応しているの新鮮でした(は?)

今回はConoHa Advent Calendar 2021でちょっと触れた通りDNSサーバーを構築する方法を紹介していきます。 (需要があるかわからないですが(?))

ドメインを取得する

サーバーを構築する前にドメインがないと始まらないので、ドメインを取得します。
今回はGMOインターネットグループ株式会社さんに問い合わせて「cnhnet.jp」の
取得許諾を得てConoHaドメインで取得しました。意味合いは、「ConoHa」のcnhと
インターネット、ネットワークの「net」を示したものです。
ドメインのTLDはJPRSが管理する.jpドメインです。

※ドメインの取得は今回省略します。

サーバーのOS、ソフトウェアを選定する

まずはサーバーのOSから選定していきます。

サーバーOS

今回は私が代表となっている組織でも使っている「AlmaLinux」を使っていきます。
(インストール方法が変わりますが、他のOSでも同じ方法で動くとは思います。)

サーバーソフトウェア

DNSサーバーのソフトウェアについてはBIND(named)が有名ですが脆弱性などが
高頻度で不定期に発見されたりするため、脆弱性対応等管理が非常に大変です。
今回はGMOさんでも使われているPowerDNSで構成していきたいと思います。
(PowerDNSも脆弱性等発見されることはありますが頻度はかなり低いと考えられます。)
参考:ZabbixとOpenStack Designate(PowerDNS)を使って自前実装 (スライド 1)
   gdnsdでかんたんGSLB(その1)

ネット上の情報だとPowerDNSをslaveとして動作させることが推奨されていない記事が
あるので、本番環境での運営時のslaveはUnboundやNSDでslaveを動作させたほうがよいと思います。

サーバの構成を考える

今回は以下のようなサーバ構成にしたいと思います。

DNSレコードを管理する為のバックエンドをConoHaさんのDBサーバー(DBaaS)
DNS問い合わせ・名前解決のサーバーをConoHaさんのVPS(IaaS)で構成します。
DBサーバーとVPS間の通信はローカルネットワークにて通信するように構成します。

本番環境で運用する場合は複数台で構成と耐障害性強化で他社さんのサーバーでも運用するのが良いと思います。
今回は本番環境での運営ではないため、上記の考慮はしません。

サーバーを契約する(データベース)

ConoHaコントロールパネルにログインし、「サーバーを追加」で「サービス」を
DBサーバーにして契約していきます。
ログイン済みの方→ダッシュボード

DNSサーバー以外にもDBを使う場合は、ディスク容量を注視し必要に応じてプランを上げたり下げたりしてください!
(50GB~100GB使う場合、VPSにMariaDBかMySQLを入れても良いと思います。)

©GMO Internet Group, Inc. | 再利用は禁止です。

サーバーを契約する(インスタンス)

次に「VPS」を契約します、今回は紹介用なので512MBで契約します。
※本番環境の場合やあとからスペックアップすることを考えると512MBからは変えられないため1GBからの方がいいと思います。

パスワードを入力したら「追加」を推します。

本来ならDNSサーバーには2つ~3つ必要ですがConoHaさんにはイメージ機能があり、
サーバーのデータを複製したりすることが可能なので今回は一つのサーバーを構成後に
イメージ機能を使って作業の簡素化を図りたいと思います。(微調整は必要になりますが)

プライベートネットワークを接続する

上のほうで解説した構成にしたいので、ConoHaのローカルネットワークを追加します。
まずVPSを停止します。停止はダッシュボードからできます。(コンパネログイン済みの方

左下にこのような通知がでればシャットダウンは成功です。

そしたら左側のネットワークのプライベートネットワークに進みます。

そしたらこのような画面が開きますので、「DBサーバー接続用ネットワーク」を開きます。

右側の青いボタン(設定)をクリックします。

そしたら「接続しない」を「接続する」に切り替えます。

そしたら保存をクリックします。あとからインスタンスを複製したときも
接続するように設定変更します!また、そのときはに説明しますね!

「成功しました。」となり、「接続する」の右側にIPが記載されていれば問題ありません!

そしたらインスタンスを起動します。
「サーバー」→DNSサーバーとして追加したサーバー→起動→「はい」

こちらも「実行しました VPS起動:(ネームタグ)」となれば完了です。

今回記事ではIPを伏せたりしているので、説明にならないと思ったので
ConoHaさんの公式サポートサイトを参考にしてDB用ネットワークを
接続しておいてください!

DBサーバー接続用ネットワークを使う

次にDBユーザとDB追加を行います。

データベース追加

「サーバー」→タイプがDBサーバーのもをクリックします。

このような画面になりましたら+データベースと+ユーザーでDBとユーザを作成していきます。

今回は紹介用なのでどのIPアドレスからアクセスできるようにしますが、本番環境の際は
ユーザー側についてはプライベートネットワーク接続時に表示されたIPで追加することをおすすめします。 (172.で始まるIP)

作成後はこんな感じになっているか確認してください!

データベースリスト側

ユーザーリスト側

データベースとユーザー追加後に接続先データベースの設定から追加するのを忘れないでください!(スクショ撮り忘れました…)

ユーザー追加時にphpMyAdminがありますが、DNSレコードは基本
WebGUIで出来るようにするのであってもなくても問題ありません。

ソフトウェアのセットアップ

準備が整いましたのでVPSをセットアップしていきます。
SSH接続でもコンソール機能でもどちらでもかまいません。
私はSSH接続で設定していきます。
※Linuxの基本的な設定やセキュリティ対策等は完了していることを前提とします※

もしまだやってないよ!って方は13日目のhironobu_sさんのVPSセットアップ時にやることリストが参考になると思います!

SSH接続ができたら、まずはDNSソフトウェアをインストールします。(以下:コマンド)

sudo yum install -y pdns pdns-backend-mysql pdns-tools

インストールが完了したら「Complete!」が出力されます。
※日本語化した場合は、「完了しました!」的な感じだったと思います。

インストールが完了したらpdns.confファイルを変更していきます。

sudo vi /etc/pdns/pdns.conf

エディターが起動したらまずDNSのバージョンを非表示にします。
「version-string」を以下のようにして「anonymous」にします。
コメントアウトを外して変えてもいいですが、付け足したほうが楽だと思います()

version-string=anonymous

次にid.server実行時にホスト名が出ないようにします。
「server-id=」をdisabledにします。
こちらもコメントアウト外しても問題ありませんが付け足す方法でも問題ありません。

server-id=disabled

次にDNSのバックエンド情報を設定していきます。
「launch=bind」を探します。

見つかりましたらこれはコメントアウトして以下、内容をその下辺りに追記します。

launch=gmysql:dns
gmysql-dns-host=private.*****.tyo2.database-hosting.conoha.io
gmysql-dns-dbname=*****_cnhnet_dns1
gmysql-dns-user=*****_cnhnet_dns1
gmysql-dns-password=ConoHa_Infra-DNSserver***
gmysql-dns-dnssec=yes

因みに:dnsはなくても問題はないです、もし:dnsを書かない場合は
gmysql-のあともdns等の文字列は消してください。
ただバックアップ等でバックエンドを増やすことを想定するとつけておいてもいいかもしれません。

ちなみにDNSSECを使う予定がないならdnssecをnoにしても問題はないです。
ただ使うときに設定変更が必要になるかもしれないのでyesにしておくことをオススメします。

設定が終わったらエディターを保存してDBを構成していきます。

mysql -h(gmysql-dns-hostの値) -u(gmysql-dns-userの値) -p(gmysql-dns-passwordの値) (gmysql-dns-dbnameの値) < /usr/share
/doc/pdns/schema.mysql.sql

これでデータベースの準備は完了です。

一度構成や設定に問題ないか確認するためにcnhnet.jpのゾーンを作成してみます。

pdnsutil create-zone cnhnet.jp ns-a1.cnhnet.jp

正常にゾーンが作成されました。
実際に名前解決できるか確認してみます。

dig ANY @localhost.risupu.jp cnhnet.jp

正常にDNSゾーンが生成されていて、DNSも返答されてくることが確認できました。
ただこれだけではDNSレコードが保管されてるデータベースを触ることができません。
phpMyAdminを使ってもDNSレコードの追加/編集/削除はできますが、
phpMyAdminから直接操作することはあまりおススメできません。

今回はPoweradminというweb上で操作できるソフトウェアをインストールしていきます。
ただ今回はレンタルサーバーに入れてDNSと共存させないようにしていきたいと思います。
Poweradminのインストール方法は圧縮ファイルを解凍するだけなので省略します。 (すいません…)
省略してしまったのでわからない部分がありましたら、コメントで教えてください!()
一応参考記事貼り付けておきます… (時間に余裕があったら解説します…!)
CentOS7 - PowerDNS構築手順 (Qiita)

先ほど紹介し忘れていましたが、DNSサーバーのバージョンはこのコマンドで確認できます。
※localhost.risupu.jpの部分は、各自サーバアドレスになおしてください!

dig @localhost.risupu.jp version.bind chaos txt

ホスト名関係はこのコマンドで確認できます。

dig @localhost.risupu.jp id.server chaos txt

status: がSERVFAILかREFUSEDなら正常に設定できていますので、安心してください!

一通りの作業が終わったらファイヤーウォールでDNSの通信が着信できるようにします。

sudo firewall-cmd --zone=public --add-service=dns --permanent && sudo firewall-cmd --reload

これで一通りの作業とファイヤウォールの設定は完了です。

管理画面からレコードを確認してみる

Poweradmin (執筆時点でv3.3.0)の導入が完了したら、
DNSレコードを簡単に管理することが可能になります。
設定後のログイン画面はこんな感じ(?)

ログイン後のトップページはこんな感じ、至ってシンプル(前に入れたときよりデザイン変わってるの草)

ちなみにDBのユーザーアカウント作成時にIPをちゃんと書いてた方は
レンタルサーバーに入れてPoweradmin動かすときはレンタルサーバIP版も
ユーザー追加とデータベース接続先追加が必要なので注意してください!

もうこれでDNSレコードは簡単にいじれます。
「ゾーン一覧」からゾーン追加した「cnhnet.jp」があります!

次のゾーンを編集からDNSレコード追加したり削除したり編集したりができます。
一応編集画面はこんな感じです

今回は構築までが紹介範囲なので実際に運用はしませんが同じような感じで
RisuPuでもDNSサーバを運営しています!(ソフトウェアや構成は非公開)
構築がメインなので省略していますがドメインレジストラでホスト情報の登録と
構築したDNSでネームサーバの運用台数分のDNSを追加しておきましょう!

リゾルバDNSも紹介しようか迷いましたが、Unbound等をインストールして
すこし設定構成いじるだけで終わる予感がしたので記事にするのはやめました(は?)

インスタンスを複製する

大体の設定が終わったらVPSを一旦シャットダウンして「イメージ保存」をします。
終わったらサーバー追加からイメージタイプ「保存イメージ」からインスタンスを複製してください!
参考:イメージ保存(テンプレート作成)のやり方を教えて下さい。
   イメージ保存機能を使う

あとはDB接続用のプライベートネットワーク接続とネットワーク設定構成の一部変更も
忘れないように気をつけてください!(本当は紹介したかったんですが、時間に余裕がなくて省略することになりました。すみません…)

さいごに

最後に今回ドメイン取得に関して可否を確認していただいたConoHa(GMO)さんにはこの場をお借りしてお礼申し上げます。
この記事に需要があれば幸いです。また、長い記事にも関わらず見ていただきありがとうございます!!
もし紹介している中で不明点や改善案等がありましたらコメントから教えてください!

それでは陸ステでした!

©GMO Internet Group, Inc.

コメント

トップへ戻る