DNS поиск из докку контейнера

Я запускаю приложение узла внутри контейнера Dokku на сервере Ubuntu, который также запускается bind9 для DNS. В приложении узла я запускаю экспресс. В приложении узла я выполняю обратный поиск DNS по IP-адресу клиента следующим образом (упрощенно):

const dns = require('dns');
const app = require('express')();

app.get('/myhostname', (req, res) => {
  dns.reverse(req.headers['x-forwarded-for'], (err, hostnames) => {
    res.json({ hostname: hostnames[0] });
  });
});

Это прекрасно работает локально, но после развертывания в контейнере Dokku происходит сбой с ENOTFOUND ошибка. Предположительно, это связано с тем, что приложение не настроено на использование сервера Ubuntu в качестве DNS-сервера. Так что я попробовал это сразу после require('dns'):

dns.setServers([process.env.DNS_SERVERS])

где DNS_SERVERS устанавливается либо на локальный IP-адрес локальной сети сервера, либо на внутренний IP-адрес докера. Любой из этих адресов приводит к задержке и возможному таймауту при попытке получить адрес.

Как я должен идти об этом?

1 ответ

Решение было таким:

  • Задавать DNS_SERVERS=172.17.0.1

  • Разрешить запросы через брандмауэр на docker0 интерфейс

  • Удостовериться bind прослушивает 172.17.0.1 и что он разрешает запросы от 172.17.0.0/16 спектр

Второй пункт в списке - это то, что я не рассматривал...

Другие вопросы по тегам