MyDNS - DNS Server mit MySQL

From Q
Jump to navigation Jump to search

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"

File: Neue DNS Zone anlegen

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

File: Neuer PC anlegen

Name:                       PC1
Type:                       A 
Data:                       192.168.0.50
Preference/Priority:        10
TTL:                        86400


Installation

MySQL Installieren

MySQL Datenbank installieren:

# # emerge mysql

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:

# mysqladmin -u root password EIGENESPASSWORT

Die MySQL ist nun Fertig installiert.


MyDNS Installieren

MyDNS Programm installieren:

# emerge mydns

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:

# mysql -u root -p
# Enter password: EIGENESPASSWORT


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

# mydns --create-tables
# Enter password: EIGENESPASSWORT

Noch 2 weitere Spalten in die SOA Tabelle der MyDNS Dantebank erstellen

# mysql -u root -p
# Enter password: EIGENESPASSWORT
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.


File: /etc/mydns.conf
##
##  /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.

File: /etc/init.d/mydns
#! /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:

# chmod 775 /etc/init.d/mydns
# /etc/init.d/mydns start

für ein Autostart eintrag:

# rc-update add mydns default

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.

# cp /tmp/mydns-1.1.0/contrib/admin.php /var/www/html/mydns

nun die admin.php editieren

File: /var/www/html/mydns/admin.php
/*****************************************************************************
        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.:

# tar xvfz mydnsconfig-<version>.tar.gz
# cd mydnsconfig
# cp -fr * /var/www/html/mydns

Jetzt noch einige Konfigurationsoptionen:

File: /var/www/html/mydns/lib/config.inc.php

<?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:

# mysql -u root -p

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

# netstat -nap

lässt sich prüfen welce Ports von welcher Anwendung benutzt werden.