Internette dökümanlar genelde centos ve debian türevleri için yazılmış. Bende kendime not alayım dedim.
Poweradmin kullanacağımız için apache+php+mysql triosuna ihtiyacımız olacak. Ayrıca powerdns’i mysql backend şeklinde derleyeceğiz. Öncelikle kısaca bir bu üçlüyü derleyelim.
Tek domain çalıştıracağım için direkt, php apache modül şeklinde çalıştıracağım.
cd /usr/ports/langs/php5/
make install clean
Apache ile derleyeceğimiz için, zaten alayını kuracak gerekli modül ve bileşenlerin.
Poweradmin pear, php-mysql,php-pdo_mysql, mcrpyto bileşenlerine ihtiyaç duyduğunu söylüyor. En son kurduğumda iki mbstring gibi bir bileşen olmadığı için hata çıkartmıştı. Hem o sebeple hemde ben farklı işlemler kullanacağım için, sık kullanılan php bileşenlerini kuracağım.
cd /usr/ports/lang/php5-extensions/
make install clean
Pear kurulumu yapmamız gerekiyor.
cd /usr/ports/devel/pear
make install
Hem powerdns hem poweradmin kullanacağımız için, aynı zamanda mysql veritabanı kuralım.
cd /usr/ports/databases/mysql55-server
make install clean
Phpmyadmin kurulumu yapalım, zira tabloları kontrol etmek için işimize yarayacak.
cd /usr/ports/databases/phpmyadmin/
make install clean
—————————————————————————————-
Powerdns kurulumu;
Hem pdns hem de pdns-recursor yazılımını kullanacağız. recursor için sorgulara ben sadece local veya kendi subnetim için izin vereceğim. Zira kurduğumuz sunucuya manyağın biri dadanıp, sürekli sorgu atabilir.
cd /usr/ports/dns/powerdns
make config
Ben mysql destekli kuracağım için mysql-backend opsiyonunu seçiyorum. Ayrıca tools opsiyonunda ekstra araçlar var, onu da seçiyorum. Ayrıca experimental fakat mydns-backend opsiyonunu seçip, mydns-migrate deneyeceğim.
make install clean
echo ‘pdns_enable=”YES”‘ >> /etc/rc.conf
Powerdns için gerekli olan tablo ve veritabanını ayarlayalım.
Önce mysql root kullanıcısına bir şifre verelim.
#mysqladmin -u root -h localhost password ‘yenisifre’
powerdns veritabanını oluşturalım.
#mysql -u root -pşifre create database powerdns;exit;
powerdns için kullanıcı oluşturup tüm yetkileri verelim.
##mysql -u root -pşifre GRANT ALL ON powerdns.* TO ‘powerdns’@’localhost’ IDENTIFIED BY ‘yenisifre’;FLUSH PRIVILEGES;exit;
Tablolar için aşağıdaki .sql dosyasını import edebilir veya tek tek yazabiliriz.
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)
);
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(6) DEFAULT NULL,
content VARCHAR(255) DEFAULT NULL,
ttl INT DEFAULT NULL,
prio INT DEFAULT NULL,
change_date INT DEFAULT NULL,
primary key(id)
);
CREATE INDEX rec_name_index ON records(name);
CREATE INDEX nametype_index ON records(name,type);
CREATE INDEX domain_id ON records(domain_id);
CREATE TABLE supermasters (
ip VARCHAR(25) NOT NULL,
nameserver VARCHAR(255) NOT NULL,
account VARCHAR(40) DEFAULT NULL
);
Konfigürasyon dosyaları /usr/local/etc/pdns dizininde tutuluyor. pdns.conf dosyası içerisine aşağıdaki ibareleri yazalım.
gmysql-host=127.0.0.1
gmysql-user=powerdns
gmysql-password=sifre
gmysql-dbname=powerdns
daemon=yes
gmysql-dnssec=no
allow-recursion=127.0.0.1/24
allow-axfr-ips=192.168.0.1/24
guardian=yes
launch=gmysql
local-address=192.168.0.10
local-port=53
log-dns-details=on
log-failed-updates=on // 4 versiyonunda iptal.
loglevel=1
master=yes
slave=yes
recursor=127.0.0.1
Sırası ile, recursion yapılmasına izin verilen network. axfr yapılmasına izin verilen ip veya subnet. mysql ile çalışacağı, portu, master ve slave olarak çalışması.
Ayarlar elbette bu kadar değil. Zilyon tane ayarı var powerdns. Şu an için sadece çalışmasını amaçlıyoruz.
/usr/local/etc/rc.d/pdns start
Poweradmin Kurulumu
Poweradmin Freebsd ports ağacında bulunmuyor. İndirmemiz gerekecek. poweradmin.org sitesinden güncel sürümü indirelim.
tar -zxvf power.xxx.tgz
http://ipadresi/poweradmin/install
Yönergeleri takip ederek kurulumu tamamlarız. En son çıkan ibareyi /inc/config-me.inc.php dosyasının içine yazıp, dosyanın adını config.inc.php olarak değiştirmemiz gerekecek.
Ben kurarken ufak bir hata aldım. toolkit.inc.php dosyası config-me.inc.php dosyasını require etmeye çalışıyordu. Dosyadaki satırı config.inc.php şeklinde değşiştirip, uğraşmadım.
config.inc.php dosyasında varsayılan session encryption anahtarını değiştirmemiz gerekiyor.
openssl rand -base64 32
çıkan anahtarı dosyadaki ilgili satıra yapıştırıyoruz.
Alınan Notlar:
Powerdns 3.4.1 versiyonunda database şeması da değişmiş. Şu şekilde update etmemiz gerekiyor;
ALTER TABLE records ADD disabled TINYINT(1) DEFAULT 0; ALTER TABLE records MODIFY content VARCHAR(64000) DEFAULT NULL; ALTER TABLE records ADD ordername VARCHAR(255) BINARY DEFAULT NULL; ALTER TABLE records ADD auth TINYINT(1) DEFAULT 1; ALTER TABLE records MODIFY type VARCHAR(10); ALTER TABLE supermasters MODIFY ip VARCHAR(64) NOT NULL; ALTER TABLE supermasters MODIFY account VARCHAR(40) NOT NULL; ALTER TABLE supermasters ADD PRIMARY KEY(ip, nameserver); CREATE INDEX recordorder ON records (domain_id, ordername); 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 TINYINT(1), 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); 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);
Bunu sql sorgusu olarak çalıştırmalıyız.
*nameserver olarak belirttiğimiz ns’ler native olarak tanıtılması gerekiyor. native olarak tanıtıldıktan sonra ns kayıtları a kaydı şeklinde eklenmeli.
*slave olarak kullanılacaksa, diğer dns sunucularda izin verilmesi gerekiyor.
bind üzerinde, allow-transfer bölümüne powerdns sunucu adı yazılması gerek. mydns ise mydns.conf dosyasında, axfr=yes yapılmalı. plesk üzerinde bind kullanılıyorsa, ayarlarda, dns templates bölümünde, zone transfere powerdns ip adresini yazmak yeterli. her oluşturduğu zone’a bu ipyi ekleyecektir.
varsayılan soa kayıtları aşağıdaki şekilde olacak.
primary name server = ns1.domain.com
responsible mail addr = admin.domain.com
serial =
refresh = 3600 (8 hours)
retry = 1800 (2 hours)
expire = 1209600 (7 days)
default TTL = 3600 (1 day)
ns1.domain.com admin.[ZONE] [SERIAL] 3600 1800 1209600 3600
*lokal adres olarak iki ipyi tek seferde girmek gerekiyor. 127.0.0.1 de yapılabilir fakat bu sefer recursor problem çıkartabilir.
*allow-recursion mevzusunu araştırmak lazım. herkese sorguyu vermek problemli olduğu gibi vermeyince de geç cevap veriyor.