こんにちは
この記事では、PowerDNSソリューションに基づく信頼できるDNSサーバーの構成について説明します。 PowerDNSは、高性能で無料のオープンソースDNSサーバーです。
PowerDNS-C ++で記述された高性能DNSサーバーで、GPLライセンスの下でライセンスされています。 開発は、Unixシステムのサポートのフレームワーク内で実行されます。 Windowsシステムはサポートされなくなりました。
サーバーはオランダの会社PowerDNS.com Bert Hubertによって開発され、フリーソフトウェアコミュニティによってサポートされています。
PowerDNSは、任意のデータソースからDNS情報を受信できる柔軟なデータストレージ/アクセスアーキテクチャを使用します。 これには、ファイル、BINDゾーンファイル、リレーショナルデータベース、またはLDAPディレクトリが含まれます。
PowerDNSは、データベースからのクエリを処理するようにデフォルトで設定されています。
バージョン2.9.20のリリース後、ソフトウェアは2つのコンポーネント-(Authoritative)Server(authoritative DNS)およびRecursor(recursive DNS)の形式で配布されます。 公式ウェブサイト:
www.powerdns.comそれでは、公式ウェブサイト
www.centos.orgからダウンロードしたクリーンなCentOSオペレーティングシステムから始めましょう。
私のハードウェア構成:
HDD:15Gb
RAM:16Gb
CPU:8 * 2.4GHz
OS:CentOS 7(x64)
配布:CentOS-7-x86_64-Minimal-1503-01.iso
私のソフトウェアバージョン:
PowerDNS Authoritative v3.4.8
PowerDNS再帰v3.7.3
Poweradmin v2.1.7

1)システムを更新し、リポジトリを接続します:
yum update -y yum clean all rpm -Uvh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-5.noarch.rpm rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
私たちはチェックします:
yum repolist
2)さまざまな便利なユーティリティをインストールする
yum install net-tools wget bind-utils tcpdump unzip telnet traceroute -y
3)firewalldを無効にしてiptablesをインストールする
systemctl stop firewalld systemctl disable firewalld yum -y install iptables-services systemctl enable iptables.service systemctl start iptables.service iptables -L -v -n
ファイアウォールルールを作成する
vi /etc/sysconfig/iptables
そして、iptablesを再起動します
service iptables restart
4)管理用のスクリプトを含むフォルダーを作成する
mkdir /script
vi /script/reload.sh <code> service pdns restart service httpd restart </code> chmod +x /script/*.sh
5)データベースをインストールします。 Centos 7では、MariaDBの方が適しています。
いくつかのオプションがあります:
-レプリケーションなしのローカルデータベース
-SQLクラスター。
レプリケーションなしのローカルデータベースのインストールリポジトリを追加します。
sudo vi /etc/yum.repos.d/MariaDB.repo
ファイルに次の行を挿入します。
[mariadb] name = MariaDB baseurl = http://yum.mariadb.org/10.0/centos7-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1
インストールする
yum install MariaDB-client MariaDB-common MariaDB-compat MariaDB-devel MariaDB-server MariaDB-shared -y
mysqlを開始します
sudo /etc/init.d/mysql start
次に、次のコマンドを実行して、データベースサーバーを保護します。
sudo mysql_secure_installation
次に、完了するまで残りのプロンプトに対して「Y」(はい)を選択します。
Enter current password for root (enter for none): press Enter Set root password? Y New password: Type new root password Re-enter new password: Confirm the password Remove anonymous users? Y Disallow root login remotely? Y Remove test database and access to it? Y Reload privilege tables now? Y
最後に、MariaDBの/ etc /にあるデフォルトのcnf.iniファイルを置き換える必要があります。 しかし、最初に行く必要があります:
cd /usr/share/mysql
そして、このフォルダーで使用可能な事前定義済みのcnf.ini構成(Huge、MediumおよびSmall)のいずれかを使用します。
cnf.iniファイルをバックアップしましょう。
sudo mv /etc/cnf.ini /etc/cnf.ini.bak
次に、事前設定の1つをMariaDBにコピーします。
sudo cp /usr/share/mysql/my-huge.cnf /etc/cnf.ini
MariaDBを再起動し、自動実行に追加します
sudo /etc/init.d/mysql restart systemctl status mysql systemctl enable mysql ss -tnlp | grep 3306 netstat -tap | grep mysql
ユーザーを作成する必要があります。そのために、彼は任意のコンピューターから接続できます。
mysql -u root -p GRANT ALL PRIVILEGES ON *.* TO 'imperituroard'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION; exit
Navicat Premiumプログラムなどを使用して、データベースへの接続を試みることができます。
また、PowerDNSのデータベースとして、SQLクラスターを使用できます。SQLクラスターの構成クラスターノードは、PowerDNS自体と同じサーバーにインストールされます。 あるサーバーでゾーンが変更されると、データベースが複製されるため、ゾーンは別のサーバーで変更されます。
次のようにクラスターをインストールしました。
記事の最初の部分のようにMariaDBリポジトリを追加し、必要なパッケージをインストールします。
sudo setenforce 0 sudo yum -y install socat sudo yum -y install MariaDB-Galera-server MariaDB-client rsync galera sudo service mysql start sudo /usr/bin/mysql_secure_installation
ユーザーを作成する
mysql -u root -p <source lang="sql"> DELETE FROM mysql.user WHERE user=''; GRANT ALL ON *.* TO 'root'@'%' IDENTIFIED BY 'dbpassDw1yx78whxwF5sX'; GRANT USAGE ON *.* to sst_user@'%' IDENTIFIED BY 'dbpassDw1yx78whxwF5sX'; GRANT ALL PRIVILEGES on *.* to sst_user@'%'; FLUSH PRIVILEGES; quit
ノードの構成
最初のノード:
sudo service mysql stop sudo cat >> /etc/my.cnf.d/server.cnf << EOF binlog_format=ROW default-storage-engine=innodb innodb_autoinc_lock_mode=2 innodb_locks_unsafe_for_binlog=1 query_cache_size=0 query_cache_type=0 bind-address=0.0.0.0 datadir=/var/lib/mysql innodb_log_file_size=100M innodb_file_per_table innodb_flush_log_at_trx_commit=2 wsrep_provider=/usr/lib64/galera/libgalera_smm.so wsrep_cluster_address="gcomm://172.24.184.177,172.24.184.178" wsrep_cluster_name='ard_cluster' wsrep_node_address='172.24.184.177' wsrep_node_name='db1' wsrep_sst_method=rsync wsrep_sst_auth=sst_user:dbpassDw1yx78whxwF5sX EOF
2番目のノード:
sudo service mysql stop sudo cat >> /etc/my.cnf.d/server.cnf << EOF binlog_format=ROW default-storage-engine=innodb innodb_autoinc_lock_mode=2 innodb_locks_unsafe_for_binlog=1 query_cache_size=0 query_cache_type=0 bind-address=0.0.0.0 datadir=/var/lib/mysql innodb_log_file_size=100M innodb_file_per_table innodb_flush_log_at_trx_commit=2 wsrep_provider=/usr/lib64/galera/libgalera_smm.so wsrep_cluster_address="gcomm://172.24.184.177,172.24.184.178" wsrep_cluster_name='ard_cluster' wsrep_node_address='172.24.184.178' wsrep_node_name='db2' wsrep_sst_method=rsync wsrep_sst_auth=sst_user:dbpassDw1yx78whxwF5sX EOF
プライマリノード(プライマリ)で実行中
sudo /etc/init.d/mysql start --wsrep-new-cluster
他のノードで実行(セカンダリ)
sudo /etc/init.d/mysql start
複製を検証する
各メモで、クラスターの状態を確認します。
mysql -u root -p -e "show status like 'wsrep%'"
最初のノードでテストデータベースを作成する
mysql -u root -p -e 'CREATE DATABASE clustertest;' mysql -u root -p -e 'CREATE TABLE clustertest.mycluster ( id INT NOT NULL AUTO_INCREMENT, name VARCHAR(50), ipaddress VARCHAR(20), PRIMARY KEY(id));' mysql -u root -p -e 'INSERT INTO clustertest.mycluster (name, ipaddress) VALUES ("db1", "172.24.184.177");'
各ノードでこのベースの存在を確認します。
mysql -u root -p -e 'SELECT * FROM clustertest.mycluster;'
すべてのノードで、時刻を正しく設定する必要があります。これは必須です。 そうしないと、ドナーからのSSTノードでは、同期されたノードがアクティビティの兆候なしに何かを待つだけになるという事実に遭遇します。
ntpをインストールします。
yum install ntp -y systemctl enable ntpd.service service ntpd start
/etc/ntp.confファイルでntpサーバーを指定することもできます
6)PowerDNS用のデータベースを作成および構成します
公式ウェブサイト
doc.powerdns.comで説明/ rootにpdns.sqlファイルを作成し、コマンドを実行します。
mysql -u root -p < /root/pdns.sql
Pdns.sqlファイルの内容 CREATE DATABASE powerdns character set utf8; GRANT ALL ON powerdns.* TO 'imperituroard'@'localhost' IDENTIFIED BY 'password'; FLUSH PRIVILEGES; USE powerdns; CREATE TABLE domains ( id INT AUTO_INCREMENT, name VARCHAR(255) NOT NULL, master VARCHAR(128) DEFAULT NULL, last_check INT DEFAULT NULL, type VARCHAR(6) NOT NULL, notified_serial INT DEFAULT NULL, account VARCHAR(40) DEFAULT NULL, PRIMARY KEY (id) ) Engine=InnoDB; CREATE UNIQUE INDEX name_index ON domains(name); CREATE TABLE records ( id INT AUTO_INCREMENT, domain_id INT DEFAULT NULL, name VARCHAR(255) DEFAULT NULL, type VARCHAR(10) DEFAULT NULL, content VARCHAR(64000) DEFAULT NULL, ttl INT DEFAULT NULL, prio INT DEFAULT NULL, change_date INT DEFAULT NULL, disabled TINYINT(1) DEFAULT 0, ordername VARCHAR(255) BINARY DEFAULT NULL, auth TINYINT(1) DEFAULT 1, PRIMARY KEY (id) ) Engine=InnoDB; CREATE INDEX nametype_index ON records(name,type); CREATE INDEX domain_id ON records(domain_id); CREATE INDEX recordorder ON records (domain_id, ordername); CREATE TABLE supermasters ( ip VARCHAR(64) NOT NULL, nameserver VARCHAR(255) NOT NULL, account VARCHAR(40) NOT NULL, PRIMARY KEY (ip, nameserver) ) Engine=InnoDB; CREATE TABLE comments ( id INT AUTO_INCREMENT, domain_id INT NOT NULL, name VARCHAR(255) NOT NULL, type VARCHAR(10) NOT NULL, modified_at INT NOT NULL, account VARCHAR(40) NOT NULL, comment VARCHAR(64000) NOT NULL, PRIMARY KEY (id) ) Engine=InnoDB; CREATE INDEX comments_domain_id_idx ON comments (domain_id); CREATE INDEX comments_name_type_idx ON comments (name, type); CREATE INDEX comments_order_idx ON comments (domain_id, modified_at); CREATE TABLE domainmetadata ( id INT AUTO_INCREMENT, domain_id INT NOT NULL, kind VARCHAR(32), content TEXT, PRIMARY KEY (id) ) Engine=InnoDB; CREATE INDEX domainmetadata_idx ON domainmetadata (domain_id, kind); CREATE TABLE cryptokeys ( id INT AUTO_INCREMENT, domain_id INT NOT NULL, flags INT NOT NULL, active BOOL, content TEXT, PRIMARY KEY(id) ) Engine=InnoDB; CREATE INDEX domainidindex ON cryptokeys(domain_id); CREATE TABLE tsigkeys ( id INT AUTO_INCREMENT, name VARCHAR(255), algorithm VARCHAR(50), secret VARCHAR(255), PRIMARY KEY (id) ) Engine=InnoDB; CREATE UNIQUE INDEX namealgoindex ON tsigkeys(name, algorithm);
7)PowerDNS autoritativeをインストールします。
Epelリポジトリ経由
yum install pdns pdns-backend-mysql pdns-tools pdns-backend-postgresql -y systemctl enable pdns.service systemctl start pdns.service netstat -tap | grep pdns
powerdnsリポジトリ経由
バージョン4.0.0の場合:
yum -y install epel-release yum-plugin-priorities curl -o /etc/yum.repos.d/powerdns-auth-40.repo https://repo.powerdns.com/repo-files/centos-auth-40.repo yum install pdns
またはソースから
PowerDNS
ソースはgithubにあります。
ソースからアセンブリに必要なプログラムをインストールし、事前設定を実行します。
yum install autoconf automake bison flex g++ git libboost-all-dev libtool make pkg-config ragel libmysqlclient-dev unzip yum groupinstall "Development Tools" cd /etc/yum.repos.d/ wget http://download.opensuse.org/repositories/home:waziers/CentOS_CentOS-6/home:waziers.repo wget http://springdale.math.ias.edu/data/puias/unsupported/6/x86_64/ragel-6.6-2.puias6.x86_64.rpm rpm -i ragel-6.6-2.puias6.x86_64.rpm yum install -y LuaJIT LuaJIT-devel openssl-devel boost-devel sqlite-devel mysql mysql-devel wget https://github.com/PowerDNS/pdns/archive/master.zip unzip master.zip cd pdns-master ./bootstrap
次に、PowerDNSを収集してインストールします。 利用可能なオプションも確認できます。
cd /root/pdns-master ./configure --help ./configure --with-luajit --with-lua --with-gnu-ld --with-sqlite3 --with-mysql-lib--with-mysql make make install
8)信頼できるサーバーを構成します
cp /etc/pdns/pdns.conf /etc/pdns/pdns.conf.bak vi /etc/pdns/pdns.conf
権限のあるPowerDNSサーバー構成ファイル setuid=pdns setgid=pdns launch=gmysql gmysql-host=127.0.0.1 gmysql-user=imperituroard gmysql-password=password gmysql-dbname=powerdns gmysql-dnssec=yes
再起動
service pdns restart
長所
PowerDNS Authoritative v4.x構成の説明9)再帰的なDNSをセットアップする
yum install pdns-recursor -y vi /etc/pdns-recursor/recursor.conf
chkconfig pdns-recursor on service pdns-recursor start
v4.0.0 powerdnsリポジトリ経由
curl -o /etc/yum.repos.d/powerdns-rec-40.repo https://repo.powerdns.com/repo-files/centos-rec-40.repo yum install pdns-recursor
10)Web管理インターフェースのインストール
準備アクション。
yum -y install httpd php php-devel php-gd php-imap php-ldap php-mysql php-odbc php-pear php-xml php-xmlrpc php-mbstring php-mcrypt php-mhash gettext -y chkconfig --levels 235 httpd on systemctl enable httpd.service systemctl start httpd.service service httpd start yum -y install php-pear-DB php-pear-MDB2-Driver-mysql -y
Apacheを構成する
vi /etc/httpd/conf/httpd.conf
Web GUIへのアクセスをオープンします
Apacheを再起動します。 service httpd restart
ウェブサイトPowerAdminから最新バージョンをダウンロードする11)www.poweradmin.org私はバージョンを使用2.1.7 cd /root wget -O poweradmin.zip https://github.com/poweradmin/poweradmin/archive/master.zip -c unzip poweradmin.zip -d /var/www/html/ mv /var/www/html/poweradmin* /var/www/html/poweradmin chown -R apache:apache /var/www/html/poweradmin/ cp /var/www/html/poweradmin/inc/config-me.inc.php /var/www/html/poweradmin/inc/config.inc.php vi /var/www/html/poweradmin/inc/config.inc.php
このファイルの行が変更されます:デフォルトのセッション暗号化キーを変更します$db_host = 'localhost';
$db_port = '3306';
$db_user = 'imperituroard';
$db_pass = 'password';
$db_name = 'powerdns';
$db_type = 'mysql';
$session_key = 'fg234v95ms@4n)kf!kje%7vh*eved';
config.inc.phpファイル <?php /** * Sample configuration file with default values * * @package Poweradmin * @copyright 2007-2010 Rejo Zenger <rejo@zenger.nl> * @copyright 2010-2014 Poweradmin Development Team * @license http://opensource.org/licenses/GPL-3.0 GPL */ // NOTE: Do not edit this file, otherwise it's very likely your changes // will be overwritten with an upgrade. // Instead, create the file "inc/config.inc.php" and set the variables you // want to set there. Your changes will override the defaults provided by us. // Better description of available configuration settings you can find here: // <https://github.com/poweradmin/poweradmin/wiki/Configuration-File> // Database settings $db_host = 'localhost'; $db_port = '3306'; $db_user = 'imperituroard'; $db_pass = 'password'; $db_name = 'powerdns'; $db_type = 'mysql'; //$db_file = ''; # used only for SQLite, provide full path to database file //$db_debug = false; # show all SQL queries $db_layer = 'PDO'; # or MDB2 //$db_ssl_ca = ''; // Security settings // This should be changed upon install $session_key = 'fg234v95ms@4n)kf!kje%7vh*eved'; $password_encryption = 'md5'; // or md5salt // Interface settings $iface_lang = 'en_EN'; $iface_style = 'example'; $iface_rowamount = 50; $iface_expire = 1800; $iface_zonelist_serial = false; $iface_title = 'Poweradmin'; $iface_add_reverse_record = true; // Predefined DNS settings $dns_hostmaster = ''; $dns_ns1 = ''; $dns_ns2 = ''; $dns_ttl = 86400; $dns_fancy = false; $dns_strict_tld_check = false; $dns_top_level_tld_check = false; // Don't allow to create top level TLDs $dns_third_level_check = false; // Timezone settings // See <http://www.php.net/manual/en/timezones.php> for help. //$timezone = 'UTC'; // Logging settings // Syslog usage - writes authentication attempts to syslog // This facility could be used in combination with fail2ban to // ban IPs with break-in attempts $syslog_use = false; $syslog_ident = 'poweradmin'; // On Windows usually only LOG_USER is available $syslog_facility = LOG_USER; // PowerDNSSEC settings $pdnssec_use = false; $pdnssec_command = '/usr/bin/pdnssec'; // LDAP settings $ldap_use = false; $ldap_debug = false; $ldap_uri = 'ldap://domaincontroller.example.com'; $ldap_basedn = 'OU=Users,DC=example,DC=com'; $ldap_binddn = 'GROUP\lookupuser'; $ldap_bindpw = 'some_password'; $ldap_user_attribute = 'sAMAccountName'; $ldap_proto = 3;
再起動 service httpd restart service pdns restart
12)最終セットアップアドレス172.24.184.177/poweradmin/install/index.phpに 移動します。172.24.184.177はサーバーのIPです。そして、提案されたすべてのデータを入力します。インストールが完了したら、/ var / www / html / poweradmin / installフォルダーを削除し、172.24.184.177 / poweradmin / index.phpのWeb管理インターフェイスに移動します。セットアップ時には、いくつかの機能があります。 127.0.0.1ではなくlocalhostを入力します-最後のステップで制限された権限を持つユーザーを作成する必要があります。そうでない場合、管理者は制限された権限を持ちます。そして、ここにウェブインターフェースがあります(ロシア語があります):
13)文学v3.xの場合 のpdnsデーモンの管理DNS階層での相互作用の説明PSこの記事は私の話の最初の部分です。次のパートでは、パフォーマンスを最適化するためのさらなる設定などについて説明します。