Containerized BIND DNS Server with Smart Management
This guide explains how to configure BindCaptain to run automatically at system startup using systemd.
BindCaptain can be configured as a systemd service to:
The script will offer to install the systemd service when run is executed and the service is not found:
sudo ./bindcaptain.sh run
You can also install the service manually:
sudo ./bindcaptain.sh install
This will:
/opt/bindcaptain/Edit your DNS configuration files in /opt/bindcaptain/config/:
sudo nano /opt/bindcaptain/config/named.conf
# Add your zone files and configuration
Enable the service to start at boot and start it immediately:
sudo systemctl enable bindcaptain
sudo systemctl start bindcaptain
Check the service status:
sudo systemctl status bindcaptain
# Start the service
sudo systemctl start bindcaptain
# Stop the service
sudo systemctl stop bindcaptain
# Restart the service
sudo systemctl restart bindcaptain
# Check service status
sudo systemctl status bindcaptain
# View service logs
sudo journalctl -u bindcaptain -f
# Enable service to start at boot
sudo systemctl enable bindcaptain
# Disable service from starting at boot
sudo systemctl disable bindcaptain
# Check if service is enabled
systemctl is-enabled bindcaptain
The BindCaptain script provides integrated service management commands:
# Install service (if not already installed)
sudo ./bindcaptain.sh install
# Uninstall service
sudo ./bindcaptain.sh uninstall
# Enable service
sudo ./bindcaptain.sh enable
# Disable service
sudo ./bindcaptain.sh disable
# Start service
sudo ./bindcaptain.sh start
# Stop service
sudo ./bindcaptain.sh stop-service
# Restart service
sudo ./bindcaptain.sh restart
# Show service status
sudo ./bindcaptain.sh service-status
The systemd service file is located at:
/etc/systemd/system/bindcaptain.service
The service uses the following environment variables:
BINDCAPTAIN_CONFIG_PATH=/opt/bindcaptain/config - DNS configuration directoryTZ=UTC - Timezone settingoneshot with RemainAfterExit=yeson-failure with 10-second delaysudo systemctl status bindcaptain
sudo journalctl -u bindcaptain -n 50
sudo /opt/bindcaptain/bindcaptain.sh validate
sudo podman ps -a | grep bindcaptain
sudo podman logs bindcaptain
dig @localhost example.com
If port 53 is already in use:
sudo netstat -tulpn | grep :53
sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved
If you prefer to install manually:
sudo mkdir -p /opt/bindcaptain
sudo cp bindcaptain.sh /opt/bindcaptain/
sudo cp bindcaptain.service /etc/systemd/system/
sudo chmod +x /opt/bindcaptain/bindcaptain.sh
sudo mkdir -p /opt/bindcaptain/config
sudo cp config-examples/* /opt/bindcaptain/config/
sudo systemctl daemon-reload
sudo systemctl enable bindcaptain
sudo systemctl start bindcaptain
To completely remove BindCaptain service:
# Stop and disable service
sudo systemctl stop bindcaptain
sudo systemctl disable bindcaptain
# Remove service file
sudo rm /etc/systemd/system/bindcaptain.service
# Reload systemd
sudo systemctl daemon-reload
# Remove installation directory (optional)
sudo rm -rf /opt/bindcaptain
Ensure port 53 is open in your firewall:
# For firewalld
sudo firewall-cmd --permanent --add-port=53/tcp
sudo firewall-cmd --permanent --add-port=53/udp
sudo firewall-cmd --reload
# For iptables
sudo iptables -A INPUT -p tcp --dport 53 -j ACCEPT
sudo iptables -A INPUT -p udp --dport 53 -j ACCEPT
Update your system’s DNS configuration to use BindCaptain:
# Edit /etc/resolv.conf
echo "nameserver 127.0.0.1" | sudo tee /etc/resolv.conf
For issues or questions:
sudo journalctl -u bindcaptainsudo /opt/bindcaptain/bindcaptain.sh validatesudo podman logs bindcaptaindig @localhost example.com