Installing A FreeBSD 7.0 DNS Server With BIND

Version 1.0
Author: Mohamed Ghaleb <Mohamed_Ghaleb [at] msn [dot] com> (English and German only please)

As FreeBSD is known as one of the most stable and reliable operating systems, I decided to publish some useful articles for it, mixing it with services we need on daily bases.

This tutorial shows how to set up a FreeBSD based server that offers DNS services. This tutorial is written for the 64-bit version of FreeBSD, but should apply to the 32-bit version.

I want to say first that this is not the only way of setting up such a system. There are many ways of achieving this goal but this is the way I take. I do not issue any guarantee that this will work for you!

 

1 Requirements

To install such a system you will need:

  1. FreeBSD boot only CD
  2. Fast Internet connection

 

2 Preliminary Note

In this tutorial I use the hostname dnsfreebsd.tm.local with the IP address 192.168.0.100 and the gateway 192.168.0.2.. These settings might differ for yours, so you have to replace them where appropriate.

This Article assumes that you have a new server, or a server that you are able to format.

 

3 The Base System

Insert your FreeBSD install CD into your system and boot from it. Leave it  till it will boot on its own or you can press [ENTER].

Select your country, highlight the [OK] button and then press [ENTER].

Select the Keyboard type, highlight the [OK] button and then press [ENTER].

For simplicity choose Standard, highlight the [OK] button and then press [ENTER].

Highlight the [OK] button and then press [ENTER].

For Automatic configuration, press A and then Q.

Choose Standard MBR.

Highlight the [OK] button and then press [ENTER] to go ahead for the partitioning step.

Again I pressed A and then Q, you can do your own partitioning if you want.

Scroll down to User and press the [SPACEBAR].

Share this page:

Suggested articles

3 Comment(s)

Add comment

Comments

By: Anonymous

Hi,

Great post.

This is a complementary article that explains howto setup IPv6 DNS zones with bind.

Cheers.

By: Anonymous

Here is details on instalation php, bind, apache, mysql on freebsd:

After installation , run update:
#uname -a
#freebsd-update fetch
#freebsd-update install
#reboot
#uname -a

Port update:
#cp /usr/share/examples/cvsup/ports-supfile /root

#ping -c 3 cvsup6.freebsd.org
#ee /root/ports-supfile
(*default host=cvsup6.FreeBSD.org)

Starting update:
#csup -g -L 2 /root/ports-supfile

#whereis bash      //you can use: cd `whereis -q bash`    ; whereis -b bash    gives you path of binary
#cd /usr/ports/shells/bash
#make install
#hash
#rehash

#whereis portaudit
#cd /usr/ports/ports-mgmt/portaudit
#make install
#/usr/local/sbin/portaudit -Fda

#chsh -s /usr/local/bin/bash
#exit

#> /etc/motd     //write empty motd file, it displays on login

#whereis mc
#cd /usr/ports/misc/mc
#make install


Set static IP address:
#ee /etc/rc.conf
Add lines:
ifconfig_em0="inet 192.168.111.9 netmask 255.255.255.240"
defaultrouter="192.168.111.1"

Add user "user1" in group wheel so he can switch to root
#pw usermod student -G wheel



Installing BIND DNS service on FreeBSD:
#cd /usr/ports/dns/bind97/
#make config
#make install

Create file:
#cp /etc/make.conf /etc/make.conf.old
#ee /etc/make.conf
Add here this:
"NO_BIND = YES"

Editing file named.conf:
#mcedit /var/named/etc/namedb/named.conf
 - delete localhost 127.1.0.0
 - set forwarders
 - add on the end of file:
 zone "facebook.ba"
 {
 type master;
 file "master/facebook.ba";
 allow-transfer {localhost;};
 allow-update {key rndc-key;};
 }
 

Creating rndc key:
#rndc-confgen -a
#cd /var/named/etc/namedb
#cp named.conf named.conf.old
#cat rndc.key >> named.conf

Creating master file:
#cd /var/named/etc/namedb/
#mcedit facebook.ba

Write into facebook.ba file:
    $TTL 3600
    facebook.ba IN SOA server.facebook.ba root.facebook.ba
    (
    1 ; Serial ; Increment by one after every change
    10800 ; Refresh every hour
    3600 ; Retry every 15 minutes
    604800 ; Expire 1000 hours
    86400 ) ; Minimum 1 hour

    ;DNS servers
    facebook.ba IN NS server.facebook.ba.

    ;Computer names
    server.facebook.ba IN A 192.168.1.103
    komp.facebook.ba IN A 192.168.1.102

    ;Aliases
    www IN CNAME server.facebook.ba
    ww1 IN CNAME komp.facebook.ba

    ;MX records
    facebook.ba IN MX 10 mail.facebook.ba.

Then copy file facebook.ba:
/var/named/etc/namedb/# cp facebook.ba working/

Change DNS servers on system:
#ee /etc/resolv.conf
Write into resolv.conf:
domain facebook.ba
nameserver 192.168.1.103

Set up config so BIND will start after reboot:
#ee /etc/rc.conf
Add this on the end:
hostname="facebook.ba"
named_enable="YES"

Start BIND
#/etc/rc.d/named start

Create emty file: /var/named/etc/namedb/working/managed-keys.bind:
> working/managed-keys.bind

Test if everything works:
#dig www.facebook.ba
#dig www.google.ba



Installing APACHE service:
#cd /usr/ports/www/apache22
#make config
#make install   (On menu set all default, you can only desellect ipv6)

Configuration:
Open httpd.conf located in /usr/local/etc/apache22
#ee /usr/local/etc/apache22/httpd.conf
Change:
 - ServerAdmin [email protected]   (put your e-mail address)
 - ServerName www.exaple.com:80  (Remove comment add change address to www.facebok.ba:80)

Testing:
#apachectl configtest

Setting up  automatic start of Apache on system startup:
#ee /etc/rc.conf
Add on the end of file:
apache22_enabled = "YES"
apache22_http_accept_enable= "YES"

Restart apache server:
/usr/local/etc/rc.d/apache22 start

Webpage in this path:/usr/local/www/apache22/data/index.html

Log files are here:
/var/log/httpd-access.log
/var/log/httpd-error.log


Instalation of MySQL database:
#cd /usr/ports/databases/mysql55-server
#make -D BUILD_OPTIMIZED install
#hash



Configuration of MySQL database
#mysql_install_db --user=mysql

#mysql_safe &
#mysqladmin -u root password 'localpassword'

Copying existing configuration:
#cp /usr/local/share/mysql/my-medium.cnf /var/db/mysql/my.cnf

Restricting remote using of database, throught network:
ee /var/db/mysql/my.cnf
Remove comment on line 45 so it looks like this:skip-networking

Configuration for startup of MySQL:
#ee /etc/rc.conf
Add on the end:
mysql_enable="YES"

Restart MySQL to apply all changes:
#/usr/local/etc/rc.d/mysql-server restart

Showing databases:
#mysqlshow -p

Check permissions of TMP folder:
#chown root:wheel /tmp
#chmod 777 /tmp
#chmod = t /tmp

Loging on server
#mysql -u root -p

Showing databases and working with dthat database:
#mysql> show databases;

Creating dtabase:
#mysql> create database ins2007;

Adding user with full permissions on database:
#mysql> grant all on ins2007. to [email protected] identified by 'password';

Adding userwith read permissions on base:
#mysql> grant select on ins2007.* to [email protected] identified by 'password'

Adding user with customized permisions on database:
#mysql grant (choose between select,insert,update,delete,create,drop) on ins2007.* [email protected] identified by 'password'

Removing users form dbase:
#mysql> revoke all privileges on ins2007.* from [email protected];

Removing users from MySQL servera:
#mysql> revoke all privileges, grant option from [email protected];
#mysql> drop user [email protected];

Erasing base:
mysql>drop database ins2007;

Showing privilegies for each user:
#mysql> show grants for [email protected];

Backup of all MySQL databases:
#mysqldump -u root -p --all-databases > /path/nameofbackup.sql

Backup only one database:
#mysqldump -u root -p --databases fitbaza > /path/iee nameofbackup.sql

Restore database:
#mysql -u root -p ins2007 < /path/nameofbackup.sql

Configuration file of MySQL database:
/var/db/mysql/my.cnf

Log file of MySQL database
/var/db/mysql/server.facebook.ba.err



Instalation of PHP
#cd /usr/ports/loang/php5
#make config ; make install
When menu appears choose Apache (Build  apache module), other leave default.

Edit Apache httpd.conf for php support:
#ee /usr/local/etc/apache22/httpd.conf
Change path of index.php:
<IfModule dir_module>
DirectoryIndex index.php index.html
</IfModule>
On the end add text:
AddType application/x-http-php .php
AddType application/x-http-php-source .phps

Copy configuration file php.ini:
#cd /usr/local/etc
#cp php.ini-recommended php.ini

Specificate session save.path in configuration of php:
#ee /usr/local/etc/php.ini
Remove comment and set path:
session.save_path = "/tmp"

Save and restart Apache
#/usr/local/etc/rc.d/apache22 restart

Testing php:
#ee /usr/local/www/apache22/data/phpinfo.php
Add this line:<?php phpinfo();?>

By: hackensolo

Hi,

thanks for this but missing ";" after rndc-key