BindCaptain

Containerized BIND DNS Server with Smart Management

View the Project on GitHub randyoyarzabal/bindcaptain

Installation Guide

Complete installation and configuration guide for BindCaptain.

Installation Methods

For supported distributions (RHEL, CentOS, Rocky, AlmaLinux, Fedora):

# 1. Clone repository
git clone https://github.com/yourusername/bindcaptain.git
cd bindcaptain

# 2. Run automated setup
sudo ./tools/system-setup.sh

# 3. Configure DNS zones
sudo ./tools/config-setup.sh wizard

# 4. Build and start container
sudo ./bindcaptain.sh build
sudo ./bindcaptain.sh run

Method 2: Manual Setup

For unsupported distributions or custom installations:

See Manual Setup Guide for detailed instructions.

Detailed Installation Steps

Step 1: System Preparation

Automated (Supported Distributions)

sudo ./tools/system-setup.sh

The script will:

Manual (Unsupported Distributions)

# Install Podman
sudo apt install podman  # Ubuntu/Debian
sudo pacman -S podman    # Arch Linux

# Install BIND
sudo apt install bind9 bind9utils  # Ubuntu/Debian
sudo pacman -S bind                 # Arch Linux

# Configure firewall
sudo ufw allow 53/tcp
sudo ufw allow 53/udp

# Install BindCaptain
sudo cp -r . /opt/bindcaptain
sudo chmod +x /opt/bindcaptain/tools/*.sh

Step 2: DNS Configuration

Interactive Configuration

sudo ./tools/config-setup.sh wizard

Follow the prompts to:

Manual Configuration

# Copy example configuration
sudo cp config-examples/named.conf.template /opt/bindcaptain/config/named.conf

# Edit configuration
sudo nano /opt/bindcaptain/config/named.conf

# Create zone files
sudo ./tools/config-setup.sh create-zone example.com

Step 3: Container Setup

Build Container Image

sudo ./bindcaptain.sh build

This creates a container image with:

Start DNS Service

sudo ./bindcaptain.sh run

The container will:

Step 4: Verification

Check Container Status

sudo ./bindcaptain.sh status

Expected output:

Container Status: Running
BIND Status: Active
Port 53: Listening
Configuration: Valid

Test DNS Resolution

# Test forward lookup
dig @localhost example.com

# Test reverse lookup
dig @localhost -x 192.168.1.100

# Test with nslookup
nslookup example.com localhost

Check Logs

# Container logs
sudo podman logs bindcaptain

# BIND logs
sudo tail -f /opt/bindcaptain/logs/named.log

Configuration Options

Environment Variables

# Timezone
export TZ="America/New_York"

# BIND debug level
export BIND_DEBUG_LEVEL="3"

# Container restart policy
export RESTART_POLICY="unless-stopped"

Configuration Files

Main Configuration

# BIND main configuration
/opt/bindcaptain/config/named.conf

# Zone files directory
/opt/bindcaptain/zones/

# Log files directory
/opt/bindcaptain/logs/

Systemd Service

# Service file
/etc/systemd/system/bindcaptain.service

# Enable auto-start
sudo systemctl enable bindcaptain

Post-Installation Setup

DNS Management

Load management functions:

source ./tools/bindcaptain_manager.sh

Create your first DNS record:

bind.create_record webserver example.com 192.168.1.100

Monitoring Setup

Enable Logging

# Configure BIND logging
sudo nano /opt/bindcaptain/config/named.conf

Add logging configuration:

logging {
    channel default_log {
        file "/var/log/named/named.log" versions 3 size 5m;
        severity info;
    };
    category default { default_log; };
};

Health Checks

# Check BIND status
sudo ./bindcaptain.sh status

# Validate configuration
sudo ./bindcaptain.sh validate

# Test DNS resolution
./tools/bindcaptain_manager.sh test

Troubleshooting Installation

Common Issues

Container Won’t Start

# Check Podman status
sudo systemctl status podman

# Check container logs
sudo podman logs bindcaptain

# Check port conflicts
sudo netstat -tlnp | grep :53

Permission Denied

# Fix ownership
sudo chown -R root:root /opt/bindcaptain
sudo chmod +x /opt/bindcaptain/tools/*.sh

# Check SELinux
sudo setsebool -P container_manage_cgroup on

DNS Not Resolving

# Check BIND status
sudo ./bindcaptain.sh status

# Validate configuration
sudo named-checkconf /opt/bindcaptain/config/named.conf

# Check zone files
sudo named-checkzone example.com /opt/bindcaptain/zones/example.com.db

Log Locations

# Container logs
sudo podman logs bindcaptain

# BIND logs
sudo tail -f /opt/bindcaptain/logs/named.log

# System logs
sudo journalctl -u bindcaptain

Uninstallation

Remove BindCaptain

# Stop and remove container
sudo ./bindcaptain.sh stop
sudo podman rm bindcaptain

# Remove container image
sudo podman rmi bindcaptain:latest

# Remove systemd service
sudo systemctl disable bindcaptain
sudo rm /etc/systemd/system/bindcaptain.service

# Remove configuration
sudo rm -rf /opt/bindcaptain

Clean Up System

# Remove firewall rules
sudo firewall-cmd --remove-service=dns --permanent
sudo firewall-cmd --reload

# Remove SELinux policies
sudo setsebool -P container_manage_cgroup off

Next Steps

After successful installation:

  1. DNS Operations - Learn to manage DNS records
  2. Configuration Management - Customize your setup
  3. Security - Harden your DNS server
  4. Monitoring - Set up logging and alerts

Need help? Check the Troubleshooting Guide or Manual Setup for unsupported distributions.