MyDNS - DNS Server mit MySQL
Beschreibung
MyDNS ist ein DNS Server der anders als BIND oder MaraDNS, seine Eintragungen in eine SQL Datenbank anlegt. Zusätzlich verfügt dieses Program über ein Webinterface das die Administration unheimlich erleichtert. Das Wiki ist in zwei bereiche Aufgeteilt die Benutzung des Programms und die Installation. Ich habe mit absicht die Benutzung zuerst geschrieben.
Arbeiten mit My DNS
http://ip-des-dns-servers Das Webinterface ist simpel aufgebaut, oben sind 2 Menupunkte angeordnet, DNS und System. Auf der Linke seite ist die Zone ion unserm fall SOA zu sehen.
Neue Zone Anlegen
Klick auf "DNS" und "Add New Zone"
Origin: local.
Name Server: dns-server.local.
Admin Email: nick.mailserver.de.
Serial No.: 2006112006
Refresh: 28800
Retry: 7200
Expire: 604800
Minimum TTL: 86400
TTL: "leer"
Active: Yes
Zone Transfers: "leer"
Neue Records Anlegen
Name: PC1 Type: A Data: 192.168.0.50 Preference/Priority: 10 TTL: 86400
Installation
MySQL Installieren
MySQL Datenbank installieren:
Möglicherweise werden hier folgende Fragen gestellt:
# Enable suExec? <-- Yes # Which web server would you like to reconfigure automatically? <-- apache, apache2 # Do you want me to restart apache now? <-- Yes
nun sollte man ein SQL Passwort setzen:
Die MySQL ist nun Fertig installiert.
MyDNS Installieren
MyDNS Programm installieren:
Alternativ für andere Distributionen: http://mydns.bboy.net/
Konfiguration
Einrichtung der Datenbank
Jetzt muss eine Datenbank erstellt werden ich wervende dafür folgende Informationen:
DB-Name: mydns DB-User: mydns DB-Passwort: mydns-passwort
Datenbank erstellen mit:
MyDNS Datenbank und MyDNS User erstellen:
REATE DATABASE mydns; GRANT SELECT, INSERT, UPDATE, DELETE ON mydns.* TO 'mydns'@'localhost' IDENTIFIED BY 'mydns_password'; GRANT SELECT, INSERT, UPDATE, DELETE ON mydns.* TO 'mydns'@'localhost.localdomain' IDENTIFIED BY 'mydns_password'; FLUSH PRIVILEGES; quit;
hier werden die Tabellen in die DB erstellt
Noch 2 weitere Spalten in die SOA Tabelle der MyDNS Dantebank erstellen
ALTER TABLE mydns.soa ADD COLUMN active ENUM('Y','N') NOT NULL;
ALTER TABLE mydns.soa ADD INDEX (active);
ALTER TABLE mydns.soa ADD COLUMN xfer CHAR(255) NOT NULL;
quit;
Config & Skripte
als Nächstes müssen wir einige Konfigurationsdateien erstellen.
##
## /etc/mydns.conf
## Fri Oct 21 16:36:32 2005
## For more information, see mydns.conf(5).
##
# DATABASE INFORMATION
db-host = localhost # SQL server hostname
db-user = mydns # SQL server username
db-password = mydns_password # SQL server password
database = mydns # MyDNS database name
# GENERAL OPTIONS
user = nobody # Run with the permissions of this user
group = nogroup # Run with the permissions of this group
listen = * # Listen on these addresses ('*' for all)
# CACHE OPTIONS
zone-cache-size = 1024 # Maximum number of elements stored in the zone cache
zone-cache-expire = 60 # Number of seconds after which cached zones expires
reply-cache-size = 1024 # Maximum number of elements stored in the reply cache
reply-cache-expire = 30 # Number of seconds after which cached replies expire
# ESOTERICA
log = LOG_DAEMON # Facility to use for program output (LOG_*/stdout/stderr)
pidfile = /var/run/mydns.pid # Path to PID file
timeout = 120 # Number of seconds after which queries time out
multicpu = 1 # Number of CPUs installed on your system
allow-axfr = no # Should AXFR be enabled?
allow-tcp = yes # Should TCP be enabled?
ignore-minimum = no # Ignore minimum TTL for zone?
soa-table = soa # Name of table containing SOA records
rr-table = rr # Name of table containing RR data
Ganz wichtig ist die Anmeldung an der Datenbank, diese Einträge sollte genau überprüft werden um später Fehlfunkionen zu vermeiden.
Nun Brauchen wir noch ein Start skript.
#! /bin/sh
#
# mydns Start the MyDNS server
#
# Author: Falko Timme <ft@falkotimme.com>.
#
# set -e
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
NAME=mydns
DAEMON=/usr/local/sbin/$NAME
DESC="DNS server"
SCRIPTNAME=/etc/init.d/$NAME
# Gracefully exit if the package has been removed.
test -x $DAEMON || exit 0
case "$1" in
start)
echo -n "Starting $DESC: $NAME"
$DAEMON --background
echo "."
;;
stop)
echo "Stopping $DESC: $NAME."
kill -9 `pidof $NAME` &> /dev/null
;;
restart)
echo "Restarting $DESC: $NAME."
$0 stop && sleep 1
$0 start
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart}" >&2
exit 1
;;
esac
exit 0
Das Skript sollte noch ausführbar gemacht werden, und anschließend gestartet:
für ein Autostart eintrag:
MyDNS Webinterface
Das Webinterface ist im Quellpakett mit dabei, wenn nicht einfach manuell downloaden http://mydns.bboy.net/ und in Apache root oder ein belibigen Webverzeichniss Kopieren.
nun die admin.php editieren
/*****************************************************************************
CONFIGURABLE OPTIONS
*****************************************************************************/
/*
** Set the following four variables to the hostname of your SQL server, the
** username and password used to access that server, and the name of the
** database where your MyDNS data resides.
*/
$dbhost = "localhost";
$dbuser = "mydns";
$dbpass = "mydns_password";
$dbname = "mydns";
/*
** This script uses MySQL by default. To use PostgreSQL instead, set
** '$use_pgsql' to '1'.
*/
$use_pgsql = 0;
/*
** The following two variables tell this script the name of your SOA
** table and the name of your RR table.
*/
$soa_table_name = "soa";
$rr_table_name = "rr";
/*
** The following two values configure the number of records shown per page
** in the zone browser and the resource record editor, respectively.
*/
$zone_group_size = 25;
$rr_group_size = 20;
/*
** This script can automatically update the serial number for a zone
** whenever a client modifies any record in that zone.
** Setting '$auto_update_serial' to '1' will enable this option.
*/
$auto_update_serial = 1;
/*
** This script can automatically update PTR records when you modify,
** add, or delete A records. To enable this functionality, set
** '$auto_update_ptr' to '1'. If you enable this, be sure to fill in
** the values for '$default_ns' and '$default_mbox', below, so that
** new SOA records will have the correct information.
*/
$auto_update_ptr = 1;
/*
** If this option is nonzero, this script will not complain if the
** TTL for a record is set below the zone minimum.
**
** Note that if $ttl_min below is nonzero, that value will still be
** checked.
*/
$ignore_minimum_ttl = 1;
/*
** The following values are used by this script to enforce minimum values
** for SOA and RR records. The script will prevent clients from entering
** values lower than these numbers.
*/
$ttl_min = 300;
$refresh_min = 300;
$retry_min = 300;
$expire_min = 86400;
/*
** The following two variables specify the default nameserver for new
** SOA records, and the default administrator mailbox for new SOA records.
** These will be filled in automatically whenever a new zone is created.
*/
$default_ns = "ns1.example.com.";
$default_mbox = "admin.example.com.";
/*
** The following array specifies default records for new SOA records.
** These get inserted automatically whenever a SOA is inserted.
** The format of each record is (name, type, aux, data).
*/
$default_records = array(
array("", "NS", 0, "ns1.example.com."),
/* array("", "MX", 10, "mail.example.com.") */
);
/*
** The following five values will be used as default values whenever new
** zones are created.
*/
$default_ttl = 86400;
$default_refresh = 28800;
$default_retry = 7200;
$default_expire = 604800;
$default_minimum_ttl = 86400;
/*
** The remainder of these variables enable cosmetic changes.
*/
$fontsize = 12; /* Default font size (pixels) */
$font_color = "#663300"; /* Font color */
$page_bgcolor = "white"; /* Page background color */
$help_bgcolor = "#FFFFCC"; /* Main screen help box background color */
$soa_bgcolor = "#FFFF99"; /* SOA editor background color */
$list_bgcolor_1 = "#FFFFCC"; /* List items #1 background */
$list_bgcolor_2 = "#FFFFAA"; /* List items #2 background */
$query_bgcolor = "#FFFFCC"; /* Search query input background color */
$query_fgcolor = "black"; /* Search query input font color */
$input_bgcolor = "white"; /* Text input box background color */
$input_fgcolor = "black"; /* Text input box font color */
/**** End of configurable options *******************************************/
MyDNS Config (Webinterface)
Das MyDNS webinterface ist nicht das selbe das weiter oben installiert wurde. Es lässt sich sehr gut bedienen und ist verständlich aufgebaut. Die installation erfolgt in nur wenige Schritte.
Download: http://www.mydnsconfig.org
nun die Datei entpacken und aufm webserver verschieben.:
Jetzt noch einige Konfigurationsoptionen:
<?php
ini_set('register_globals',0);
$conf["app_title"] = "MyDNSConfig";
$conf["app_version"] = "1.0.0";
$conf["rootpath"] = "/var/www/html/mydns";
$conf["fs_div"] = "/"; // File system divider, \\ on windows and / on linux and unix
$conf["classpath"] = $conf["rootpath"].$conf["fs_div"]."lib".$conf["fs_div"]."classes";
$conf["temppath"] = $conf["rootpath"].$conf["fs_div"]."temp";
/*
Database Settings
*/
$conf["db_type"] = 'mysql';
$conf["db_host"] = 'localhost';
$conf["db_database"] = 'mydns';
$conf["db_user"] = 'mydns';
$conf["db_password"] = 'mydns_password';
/*
External programs
*/
//$conf["programs"]["convert"] = "/usr/bin/convert";
//$conf["programs"]["wput"] = $conf["rootpath"]."\\tools\\wput\\wput.exe";
/*
Themes
*/
$conf["theme"] = 'default';
$conf["html_content_encoding"] = 'text/html; charset=iso-8859-1';
$conf["logo"] = 'themes/default/images/mydnsconfig_logo.gif';
/*
Default Language
*/
$conf["language"] = 'en';
/*
Auto Load Modules
*/
$conf["start_db"] = true;
$conf["start_session"] = true;
/*
DNS Settings
*/
$conf["auto_create_ptr"] = 1; // Automatically create PTR records?
$conf["default_ns"] = 'ns1.example.com.'; // must be set if $conf['auto_create_ptr'] is 1. Don't forget the trailing dot!
$conf["default_mbox"] = 'admin.example.com.'; // Admin email address. Must be set if $conf['auto_create_ptr'] is 1. Replace "@" with ".". Don't forget the trailing dot!
$conf["default_ttl"] = 86400;
$conf["default_refresh"] = 28800;
$conf["default_retry"] = 7200;
$conf["default_expire"] = 604800;
$conf["default_minimum_ttl"] = 86400;
?>
Hier auch ganz wichtig der Parameter rootpath sollte unbedingt geprüft und angepasst werden!
MyDNS Config (SQL)
Als Letztes noch die MySQL SOA Tabelle anpassen:
Use mydns; ALTER TABLE `rr` ADD `sys_userid` INT NOT NULL, ADD `sys_groupid` INT NOT NULL AFTER `sys_userid`, ADD `sys_perm_user` VARCHAR( 5 ) NOT NULL AFTER `sys_groupid`, ADD `sys_perm_group` VARCHAR( 5 ) NOT NULL AFTER `sys_perm_user`, ADD `sys_perm_other` VARCHAR( 5 ) NOT NULL AFTER `sys_perm_group`; ALTER TABLE `soa` ADD `sys_userid` INT NOT NULL, ADD `sys_groupid` INT NOT NULL AFTER `sys_userid`, ADD `sys_perm_user` VARCHAR( 5 ) NOT NULL AFTER `sys_groupid`, ADD `sys_perm_group` VARCHAR( 5 ) NOT NULL AFTER `sys_perm_user`, ADD `sys_perm_other` VARCHAR( 5 ) NOT NULL AFTER `sys_perm_group`; CREATE TABLE `sys_user` ( `userid` int(11) NOT NULL auto_increment, `sys_userid` int(11) NOT NULL default '0', `sys_groupid` int(11) NOT NULL default '0', `sys_perm_user` varchar(5) NOT NULL default '', `sys_perm_group` varchar(5) NOT NULL default '', `sys_perm_other` varchar(5) NOT NULL default '', `username` varchar(100) NOT NULL default '', `passwort` varchar(100) NOT NULL default '', `modules` varchar(255) NOT NULL default '', `startmodule` varchar(255) NOT NULL default '', `app_theme` varchar(100) NOT NULL default 'default', `typ` varchar(20) NOT NULL default 'user', `active` tinyint(4) NOT NULL default '1', `name` varchar(100) NOT NULL default '', `vorname` varchar(100) NOT NULL default '', `unternehmen` varchar(100) NOT NULL default '', `strasse` varchar(100) NOT NULL default '', `ort` varchar(100) NOT NULL default '', `plz` varchar(10) NOT NULL default '', `land` varchar(50) NOT NULL default '', `email` varchar(100) NOT NULL default '', `url` varchar(255) NOT NULL default '', `telefon` varchar(100) NOT NULL default '', `fax` varchar(100) NOT NULL default '', `language` varchar(10) NOT NULL default 'de', `groups` varchar(255) NOT NULL default '', `default_group` int(11) NOT NULL default '0', PRIMARY KEY (`userid`) ) TYPE=MyISAM AUTO_INCREMENT=2 ; INSERT INTO `sys_user` (`userid`, `sys_userid`, `sys_groupid`, `sys_perm_user`, `sys_perm_group`, `sys_perm_other`, `username`, `passwort`, `modules`, `startmodule`, `app_theme`, `typ`, `active`, `name`, `vorname`, `unternehmen`, `strasse`, `ort`, `plz`, `land`, `email`, `url`, `telefon`, `fax`, `language`, `groups`, `default_group`) VALUES (1, 1, 0, 'riud', 'riud', '', 'admin', '21232f297a57a5a743894a0e4a801fc3', 'admin,designer,resellers,sites,dns', 'dns', 'default', 'admin', 1, '', 'Administrator', '', '', '', '', '', '', '', '', '', 'en', '1,2', 1); quit;
so jetzt sollte der server unter dem angegebenen Pfad das MyDNS Webinterface anzeigen.
Hinweise
Anmeldung am Webinterface
User: admin Passwort: admin
Bekannte Probleme
es sollte kein anderer Dienst auf Port 53 lauffen sonst kann MyDNS nicht gestartet werden.
mit dem Befehl
lässt sich prüfen welce Ports von welcher Anwendung benutzt werden.