Настройка dnsmasq для Docker Swarm

У докер сварм кластера есть один важный момент. Если сервиса сервиса не существует, то DNS запрос будет отправлен во внешний интернет. Чтобы это исправить нужно выполнить следующую инструкцию.

Установка dnsmasq

apt install dnsmasq

Скопируйте конфиг dnsmasq:

cp /etc/dnsmasq.conf /etc/dnsmasq.conf.example
echo "" > /etc/dnsmasq.conf

Создайте файл /etc/resolv.dnsmasq

nameserver 8.8.8.8
nameserver 8.8.4.4
nameserver 1.1.1.1

В /etc/dnsmasq.conf пропишите:

port=53
listen-address=0.0.0.0
no-dhcp-interface=
bind-interfaces
expand-hosts
local-ttl=1
no-negcache
resolv-file=/etc/resolv.dnsmasq
conf-dir=/etc/dnsmasq.d
cache-size=150
max-cache-ttl=60
min-cache-ttl=60

# Одновременный запрос ко всем DNS серверам
# all-servers

# Запрещаем резолвить домены без точки (нужно для Docker Swarm)
domain-needed

# Для отладки
#log-queries

Пропишите ip адреса для домена .local в файле /etc/dnsmasq.d/local

address=/.local/127.0.0.1

Выключите резолвер из внешней сети интернет. Создайте файл /etc/dnsmasq.d/disable-external-network

bind-interfaces
except-interface=enp*
except-interface=wlp*
except-interface=wlan*
except-interface=eth*

Удалите файл /etc/resolv.conf и заново его создайте, потому что остается симлинк от днс резолвера systemd, который не дает создать новый файл.

rm -f /etc/resolv.conf
touch /etc/resolv.conf

В /etc/resolv.conf укажите локальный IP адрес

nameserver 127.0.0.1

Отключите резолвер systemd

systemctl stop systemd-resolved
systemctl disable systemd-resolved

Перезапустите dnsmasq

systemctl restart dnsmasq

В настройках в файле /etc/docker/daemon.json Docker пропишите:

{
  "dns": ["172.17.0.1"]
}

В yaml файле сервиса нужно прописать:

dns:
   - 172.18.0.1

В iptables укажите:

# Разрешаем входящие соединения DNS
-A ALLOW-INPUT -i docker0 -p udp -m udp --dport 53 -j ACCEPT
-A ALLOW-INPUT -i docker0 -p tcp -m tcp --dport 53 -j ACCEPT
-A ALLOW-INPUT -i docker_gwbridge -p udp -m udp --dport 53 -j ACCEPT
-A ALLOW-INPUT -i docker_gwbridge -p tcp -m tcp --dport 53 -j ACCEPT

 

Остались вопросы?

Если вы хотите получить консультацию или оставить комментарий, заполните форму ниже:
Укажите ваше имя:
Укажите вашу почту, чтобы я смог вам ответить:
Напишите ваш вопрос или комментарий: