Настройка DNS в Docker

Помогите пожалуйста разобраться с DNS сервером не разу не настраивал и как правильно это делать не очень понимаю. Единственный раз когда у меня DNS заработал это когда я установил Hestia Control Panel. Но настройка автоматом конечно хорошо но всё же хочется разобраться как работает и как надо правильно настраивать. В данный момент использую Docker и тут у меня вообще полный ступор как связать DNS сервер с Docker что бы домены можно было привязать по NS-записям и если к примеру я буду добавлять или удалять какой то домен то это можно было сделать через консоль.

Одолжив бубен у шамана что то получилось сделать а именно сделал следующее:

(Для примера буду использовать домен lab-net.lan)

  1. Создал сеть

    docker network create lan-lab-net --subnet 172.24.0.0/16

  2. Создал файлы с таким содержимым:

Dockerfile

FROM ubuntu

RUN apt-get -y update && apt-get install -y bind9

COPY named.conf.options /etc/bind/
COPY named.conf.local /etc/bind/
COPY db.lab-net.lan /etc/bind/zones/

CMD ["/usr/sbin/named", "-g", "-c", "/etc/bind/named.conf", "-u", "bind"]

EXPOSE 53/tcp
EXPOSE 53/udp
EXPOSE 953/tcp

named.conf.options

options {    
directory "/var/cache/bind";    
recursion yes;    
listen-on { any; };    
forwarders {            
8.8.8.8;            
8.8.4.4;    
};};

named.conf.local

zone "lab-net.lan" {    
type master;    
file "/etc/bind/zones/db.lab-net.lan";
};

db.lab-net.lan

$TTL    1d ; 
;default expiration time (in seconds) of all RRs without their own TTL value
@       IN      SOA   ns1.lab-net.lan. root.lab-net.lan.  (
        3      ; Serial
        1d     ; Refresh
        1h     ; Retry
        1w     ; Expire
        1h ); Negative Cache TTL;

;name servers - NS records
@         IN      NS      ns1.lab-net.lan.; 
    
;name servers - A records
ns1.lab-net.lan.          IN      A      172.24.0.2 
lab-net.lan.        IN      A      172.24.0.3
  1. Создал контейнер для DNS и присвоил ему IP 172.24.0.2

    docker run -d -p 53:53/tcp -p 53:53/udp -p 127.0.0.1:953:953/tcp --rm --name=dns-master --net=lan-lab-net --ip=172.24.0.2 b9-serv:b9

  2. Создал тестовый контейнер и присвоил ему IP 172.24.0.3

    docker run -d --rm --name=test-conteiner --net=lan-lab-net --ip=172.24.0.3 --dns=172.24.0.2 test1:t1

После всех манипуляций и незначительных исправлений при проверке через nslookup вроде что то заработало

user@user:~# nslookup
> server 172.24.0.2
Default server: 172.24.0.2
Address: 172.24.0.2#53
> lab-net.lan
Server:         172.24.0.2
Address:        172.24.0.2#53

Name:   lab-net.lan
Address: 172.24.0.3

Подскажите пожалуйста как мне теперь по домену lab-net.lan зайти на сайт из интернета что нужно ещё настроить?


Ответы (1 шт):

Автор решения: Talleyran

Для того, чтобы опубликовать сайт в интернете, вам нужно 5 вещей:

  1. домен, приобретенный у регистратора
  2. статический внешний IP адрес у той машины, на которой крутятся ваш докер либо nginx proxy который распределяет запросы между вашими докерами
  3. A-запись у регистратора о том, что ваш домен соответствует вашему внешнему статическому IP
  4. Проброс портов внутрь (80,443 и т.д.) на маршрутизаторе, через который ваша машина выходит в инет
  5. Правила iptables/ufw на машине о том, что с внешнего IP можно подключаться по этим портам

Когда вы регистрируете домен у регистратора (nic.ru, reg.ru и т.д.) он попадает в глобальную публичную таблицу DNS записей. И только после этого любой ПК в интернете сможет понять, что вашему домену соответствует ваш внешний статический ip и пойти по нему.

.lan это ваш локальный домен, который виден только из вашей локальной сети и его никак нельзя использовать снаружи.

→ Ссылка