Containerized BIND DNS Server with Smart Management
Complete installation and configuration guide for BindCaptain.
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
For unsupported distributions or custom installations:
See Manual Setup Guide for detailed instructions.
sudo ./tools/system-setup.sh
The script will:
# 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
sudo ./tools/config-setup.sh wizard
Follow the prompts to:
# 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
sudo ./bindcaptain.sh build
This creates a container image with:
sudo ./bindcaptain.sh run
The container will:
sudo ./bindcaptain.sh status
Expected output:
Container Status: Running
BIND Status: Active
Port 53: Listening
Configuration: Valid
# Test forward lookup
dig @localhost example.com
# Test reverse lookup
dig @localhost -x 192.168.1.100
# Test with nslookup
nslookup example.com localhost
# Container logs
sudo podman logs bindcaptain
# BIND logs
sudo tail -f /opt/bindcaptain/logs/named.log
# Timezone
export TZ="America/New_York"
# BIND debug level
export BIND_DEBUG_LEVEL="3"
# Container restart policy
export RESTART_POLICY="unless-stopped"
# BIND main configuration
/opt/bindcaptain/config/named.conf
# Zone files directory
/opt/bindcaptain/zones/
# Log files directory
/opt/bindcaptain/logs/
# Service file
/etc/systemd/system/bindcaptain.service
# Enable auto-start
sudo systemctl enable bindcaptain
Load management functions:
source ./tools/bindcaptain_manager.sh
Create your first DNS record:
bind.create_record webserver example.com 192.168.1.100
# 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; };
};
# Check BIND status
sudo ./bindcaptain.sh status
# Validate configuration
sudo ./bindcaptain.sh validate
# Test DNS resolution
./tools/bindcaptain_manager.sh test
# Check Podman status
sudo systemctl status podman
# Check container logs
sudo podman logs bindcaptain
# Check port conflicts
sudo netstat -tlnp | grep :53
# 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
# 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
# Container logs
sudo podman logs bindcaptain
# BIND logs
sudo tail -f /opt/bindcaptain/logs/named.log
# System logs
sudo journalctl -u 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
# Remove firewall rules
sudo firewall-cmd --remove-service=dns --permanent
sudo firewall-cmd --reload
# Remove SELinux policies
sudo setsebool -P container_manage_cgroup off
After successful installation:
Need help? Check the Troubleshooting Guide or Manual Setup for unsupported distributions.