The problem we will troubleshoot in this example is MaraDNS not responding to DNS queries. As we will see in this guide, a number of different issues can cause this problem, and resolving the problem depends on what issue is causing the problem.
As just some of the possible issues, it is possible that the MaraDNS process is not running at all. It's possible that MaraDNS is running, but can't bind to the assigned IP (because of a Linux bug, MaraDNS can not accurately report this problem when run in Linux).
Here are some hints:
ipv4_bind_addresses = "127.0.0.1" chroot_dir = "/etc/maradns" csv2 = {} csv2["example.com."] = "db.example.com"
OK, so let's look at some problems, as they appear on a CentOS 3.8 box with the above mararc file.
This is how things look when we don't have a loopback interface to bind to. Like in all examples in this guide, the '$' character indicates a line that we type data on; all other lines, including lines that start with '#', are lines created by the programs we are running in these examples.
$ askmara Awww.example.com. # Querying the server with the IP 127.0.0.1 # Hard Error: Unable to send UDP packet!Basically, the askmara client is unable to send a query because there is no way for it to contact a server on 127.0.0.1. Probably because there is no 127.0.0.1 to send the packet on. So, let's start troubleshooting.
$ export PATH=$PATH:/sbin:/usr/sbin:/usr/local/sbinThis gives us access to commands like ifconfig and what not.
$ su
Password: type in your root password here
$ ifconfig lo 127.0.0.1 $ askmara Awww.example.com. # Querying the server with the IP 127.0.0.1 # Hard Error: TimeoutOK, so let's restart MaraDNS:
$ /etc/rc.d/init.d/maradns restart Sending all MaraDNS processes the TERM signal waiting 1 second Sending all MaraDNS processes the KILL signal MaraDNS should have been stopped Starting all maradns processes Starting maradns process which uses Mararc file /etc/mararcIf /etc/rc.d/init.d/maradns restart doesn't generate the above output, this indicates that either MaraDNS was not correctly installed, or that you are using MaraDNS on another Linux/*NIX distribution. If you're not using CentOS or Red Hat Enterprise Linux, replace this command with the appropriate command for restarting a daemon/service for your operating system.
Now, the dhclient that CentOS 3.8 comes with is buggy, and breaks lo (the loopback interface which gives CentOS the 127.0.0.1 IP address). So, we have to fix lo again:
$ ifconfig lo 127.0.0.1In addition, losing 127.0.0.1 breaks any service bound to 127.0.0.1, such as MaraDNS, so we have to rebind MaraDNS to 127.0.0.1:
$ /etc/rc.d/init.d/maradns restart Sending all MaraDNS processes the TERM signal waiting 1 second Sending all MaraDNS processes the KILL signal MaraDNS should have been stopped Starting all maradns processes Starting maradns process which uses Mararc file /etc/mararcKeep in mind that MaraDNS binds to high-numbered ports when sending outgoing DNS requests. The "Firewall Configuration" section of the MaraDNS man page gives details.
The problem with UNIX firewalls is that there is no standard interface for configuring them, so I can't help you as well as I would like here. CentOS 3.8, by default, has a firewall that allows MaraDNS to act as a recursive nameserver on the loopback (127.0.0.1) interface, but the firewall needs to be changed to work on other interfaces:
$ redhat-config-securitylevel-tuiAnd select "personalize", and add "53:udp" as a hole in the firewall. Yes, the interface for this program is somewhat primitive; hopefully CentOS 4 has a more complete interface.
You will have to do a similar configuration change to any firewalls between your server and the internet.
$ askmara Awww.google.com. # Querying the server with the IP 127.0.0.1At this point, there is a 30 second delay. After the delay, askmara outputs this message:
# Hard Error: TimeoutThis is usually caused by one of two problems:
$ ps auxw | grep maradnsIf MaraDNS is running, the output will look like this:
root 2023 0.0 0.0 1516 304 pts/1 S 11:46 0:00 /usr/bin/duende /usr/sbin/maradns -f /etc/mararc nobody 2024 0.3 0.1 1748 596 pts/1 S 11:46 0:00 /usr/sbin/maradns -f /etc/mararc #66 2025 0.0 0.0 1520 440 pts/1 S 11:46 0:00 /usr/bin/duende /usr/sbin/maradns -f /etc/mararc user 2027 0.0 0.1 3720 700 pts/1 S 11:46 0:00 grep maradnsIf MaraDNS is not running, the output will look like this:
user 1983 0.0 0.1 3728 696 pts/1 S 11:45 0:00 grep maradns
If MaraDNS is not running, there may be a message in the log files indicating why MaraDNS failed when you tried to start MaraDNS. Look at the log:
$ su Password: $ grep maradns /var/log/messages | moreThe messages will give you a hint as to what is preventing MaraDNS from starting up. If there are no MaraDNS messages in your log, there is something wrong with your MaraDNS installation.