/docker-webmin-bind

Multiarch BIND DNS with Webmin Docker image for DNS administration

Primary LanguageShellMIT LicenseMIT

GitHub repo

A fork of elmerfds/docker-bind, which is a fork of sameersbn/bind. This fork simply updates the ubuntu, webmin, and bind versions used for the container. It also adds cron so that you can configure automatic zone resigning.

NOTE This fork has NOT been tested extensively, or really even much at all. I'm using it, but that's pretty much it.
I make no claims that it is compatible with the elmerfds fork, or that it is stable in any capacity.
Backup your configuration before switching to this image.
Use at your own peril.

Tag Description Build Status
latest main/stable Docker Build Main

Versions

Program Version
bind9 9.18.24
Webmin 2.111

You can build the dockerfile locally to select different versions if you'd like:

$ docker build --build-arg BIND_VERSION=<some other version> --build-arg WEBMIN_VERSION=<yet another version> .

Switching from elmerfs/bind

You should back up your data dir before making this switch in case something goes wrong

After backing up your config, simply switch the image key in compose.yml to use rickyelopez/webmin-bind, and bring up the service as you normally do (e.g. with docker compose up -d). After starting up, webmin automatically detects a new version of the base OS, and presents a button on the dashboard to update its internal configuration.

From the minimal testing I have done, switching to this image from elmerfds/bind only required modifying named.conf to remove some configuration parameters which had been deprecated in the newer version of bind used in this container. If you end up in this position, the log (which you can access using docker compose logs bind --tail=20 -f, for example) will tell you which parts of your named.conf need to be corrected.

Alternatively, you could start the container and check the configuration from within it using the following commands:

# start a container and get a shell in it
$ docker compose run --rm -it webmin_bind /bin/bash
# check the `named` config
$ named-checkconf /etc/bind/named.conf

which should tell you exactly what you need to change. For example:

$ docker compose run --rm webmin_bind /bin/bash
$ root@webmin-bind:/# named-checkconf /etc/bind/named.conf
> /etc/bind/named.conf:12: unknown option 'dnssec-enable'

Notes from elmerfds' fork:

A fork of sameersbn/bind repo, what's different?

  • Multiarch Support:
    • amd64
    • armv7, arm64 i.e. supports RPi 3/4
  • Running on Ubuntu Hirsute
  • Bind: 9.16.8
  • Webmin: Always pulls latest (during image build)
  • Added Timezone (TZ) support
  • Image auto-builds on schedule (every Sat 00:00 BST)
  • Ubuntu updates will be applied during each scheduled build
  • Reverse Proxy friendly (utkuozdemir/docker-bind)
  • Fixes to utkuozdemir/docker-bind's 'Reverse Proxy friendly' update.
    • Cleanup of config & miniserv.conf when variables are used & then removed
    • Removing duplicate entries to config & miniserv.conf

Contents

Introduction

Docker container image for BIND DNS server bundled with the Webmin interface.

BIND is open source software that implements the Domain Name System (DNS) protocols for the Internet. It is a reference implementation of those protocols, but it is also production-grade software, suitable for use in high-volume and high-reliability applications.

Getting started

Installation

Automated builds of the image are available on Dockerhub and is the recommended method of installation.

docker pull rickyelopez/webmin-bind

Alternatively you can build the image yourself.

docker build -t rickyelopez/webmin-bind github.com/rickyelopez/docker-webmin-bind

Quickstart

Docker Run:

docker run --name bind -d --restart=unless-stopped \
  -p 53:53/tcp -p 53:53/udp -p 10000:10000/tcp \
  -v /path/to/persistent/data/dir:/data \
  rickyelopez/webmin-bind

OR

Docker Compose

    bind:
        container_name: bind
        hostname: bind
        network_mode: bridge
        image: rickyelopez/webmin-bind
        restart: unless-stopped
        ports:
            - "53:53/tcp"
            - "53:53/udp"
            - 10000:10000/tcp
        volumes:
            - /path/to/persistent/data/dir:/data
        environment:
            - WEBMIN_ENABLED=true
            - WEBMIN_INIT_SSL_ENABLED=false
            - WEBMIN_INIT_REFERERS=dns.domain.com
            - WEBMIN_INIT_REDIRECT_PORT=10000
            - ROOT_PASSWORD=password
            - TZ=Europe/London

When the container is started the Webmin service is also started and is accessible from the web browser at https://serverIP:10000. Login to Webmin with the username root and password password. Specify --env ROOT_PASSWORD=secretpassword on the docker run command to set a password of your choosing. The launch of Webmin can be disabled if not required.

- Parameters

Container images are configured using parameters passed at runtime (such as those above).

Parameter Function
-p 53:53/tcp -p 53:53/udp DNS TCP/UDP port
-p 10000/tcp Webmin port
-e WEBMIN_ENABLED=true Enable/Disable Webmin (true/false)
-e ROOT_PASSWORD=password Set an initial password for Webmin root. Has no effect after a password has been set on first startup. Has no effect when the launch of Webmin is disabled.
-e WEBMIN_INIT_SSL_ENABLED=false Enable/Disable Webmin SSL (true/false). If Webmin should be served via SSL or not. Defaults to true.
-e WEBMIN_INIT_REFERERS Enable/Disable Webmin SSL (true/false). Sets the allowed referrers to Webmin. Set this to your domain name of the reverse proxy. Example: mywebmin.example.com. Defaults to empty (no referrer)
-e WEBMIN_INIT_REDIRECT_PORT The port Webmin is served from. Set this to your reverse proxy port, such as 443. Defaults to 10000.
-e WEBMIN_INIT_REDIRECT_SSL Enable/Disable Webmin SSL redirection after login (true/false). Set this to true if behind a SSL terminator. Defaults to false
-e BIND_EXTRA_FLAGS Default set to -g
-v /data Mount data directory for persistent config
-e TZ=Europe/London Specify a timezone to use e.g. Europe/London