devilbox/docs/configuration-global/auto-dns.rst
2018-04-14 10:17:25 +02:00

163 lines
4.9 KiB
ReStructuredText

.. _global_configuration_auto_dns:
********
Auto-DNS
********
If you don't want to add DNS records manually for every project, you can also use the bundled
DNS server and use it's DNS catch-all feature to have all DNS records automatically available.
.. important::
By default, the DNS server is set to listen on ``1053`` to avoid port collisions during startup.
You need to change it to ``53`` in ``.env`` via :ref:`env_host_port_bind`.
**Table of Contents**
.. contents:: :local:
Native Docker
=============
The webserver as well as the DNS server must be available on ``127.0.0.1`` or on all interfaces
on ``0.0.0.0``. Additionally the DNS server port must be set to ``53`` (it is not by default).
* Ensure :ref:`env_local_listen_addr` is set accordingly
* Ensure :ref:`env_host_port_bind` is set accordingly
* No other DNS resolver should listen on ``127.0.0.1:53``
Prerequisites
-------------
First ensure that :ref:`env_local_listen_addr` is either empty or listening on ``127.0.0.1``.
.. code-block:: bash
:caption: .env
:name: .env
:emphasize-lines: 3
host> cd path/to/devilbox
host> vi .env
LOCAL_LISTEN_ADDR=
Then you need to ensure that :ref:`env_host_port_bind` is set to ``53``.
.. code-block:: bash
:caption: .env
:name: .env
:emphasize-lines: 3
host> cd path/to/devilbox
host> vi .env
HOST_PORT_BIND=53
Before starting up the Devilbox, ensure that port ``53`` is not already used on ``127.0.0.1``.
.. code-block:: bash
:emphasize-lines: 2
host> netstat -an | grep -E 'LISTEN\s*$'
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:43477 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:50267 0.0.0.0:* LISTEN
If you see port ``53`` already being used as in the above example, ensure to stop any
DNS resolver, otherwise it does not work.
The output should look like this (It is only important that there is no ``:53``.
.. code-block:: bash
host> netstat -an | grep -E 'LISTEN\s*$'
tcp 0 0 127.0.0.1:43477 0.0.0.0:* LISTEN
tcp 0 0 127.0.0.1:50267 0.0.0.0:* LISTEN
Linux
-----
If the prerequisites are met, you can edit ``/etc/resolv.conf`` with root or sudo privileges
and add the Devilbox DNS server line by adding a ``nameserver`` directive
which points to ``127.0.0.1``:
.. code-block:: bash
:caption: /etc/resolv.conf
:name: /etc/resolv.conf
:emphasize-lines: 4
host> sudi vi /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN
nameserver 127.0.0.1
nameserver 192.168.0.10
search local
.. important::
Keep all other ``nameserver`` entries intact. The Devilbox DNS nameserver will only work
once the Devilbox is running. If you remove all others and don't run the Devilbox,
you won't be able to resolve any DNS names anymore.
.. important::
The Devilbox ``nameserver`` entry should be the very first one.
If you now start the Devilbox you don't need to take care about manually adding DNS records
anymore. Auto-DNS is now setup working.
MacOS
-----
Modifying ``/etc/resolv.conf`` does not work on MacOS, you need to make changes in your
System Preferences:
1. Open System Preferences
2. Go to Network
3. Select your connected interface
4. Click on ``DNS`` tab
5. Add new DNS server by clicking the ``+`` sign
6. Add ``127.0.0.1``
.. image:: /_static/img/auto-dns-macos-dns.png
Windows
-------
On Windows, you need to change your active network adapter. See the following screenshots
for how to do it.
.. image:: /_static/img/auto-dns-windows-dns-01.jpg
.. image:: /_static/img/auto-dns-windows-dns-02.jpg
.. image:: /_static/img/auto-dns-windows-dns-03.jpg
In the last screenshot, you will have to add ``127.0.0.1`` as your ``Preferred DNS server``.
Docker Toolbox
==============
.. seealso:: :ref:`docker_toolbox`
MacOS
-----
* :ref:`env_local_listen_addr` must be empty in order to listen on all interfaces
* :ref:`env_host_port_bind` must be set to ``53``
* Port ``80`` from the Docker Toolbox virtual machine must be port-forwarded to ``127.0.0.1:80`` on your host os
* Port ``53`` from the Docker Toolbox virtual machine must be port-forwarded to ``127.0.0.1:53`` on your host os
.. todo:: This section needs further proof and information.
Windows
--------
* :ref:`env_local_listen_addr` must be empty in order to listen on all interfaces
* :ref:`env_host_port_bind` must be set to ``53``
* Port ``80`` from the Docker Toolbox virtual machine must be port-forwarded to ``127.0.0.1:80`` on your host os
* Port ``53`` from the Docker Toolbox virtual machine must be port-forwarded to ``127.0.0.1:53`` on your host os
.. todo:: This section needs further proof and information.