Genel

Freebsd Üzerine Powerdns, poweradmin kurulumu

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

cd /usr/ports/dns/powerdns-recursor
make config
Setuid işaretli olursa, bu uid üzerinden çalıştırabiliriz.
make install clean

echo ‘pdns_recursor_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.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir