У меня есть сеть с двумя DNS-серверами (главный и подчиненный), но я не хочу, чтобы клиенты обращались к ним напрямую. Итак, в той же сети у меня есть машина debian с установленным haproxy 1.7.5. Я хочу, чтобы у клиентов были /etc/resolv.conf записать IP-адрес прокси. Я хочу, чтобы прокси-сервер балансировал нагрузку между двумя серверами.
IP DNS master = 10.10.24.2
IP DNS slave = 10.10.24.4
IP PROXY = 10.10.24.5
В файле /etc/haproxy/haproxy.cfg в конце я добавил:
resolvers mydns
nameservers dns1 10.10.24.2:53
nameservers dns2 10.10.24.4:53
Затем запускаю haproxy:
haproxy -f /etc/haproxy/haproxy.cfg
Если я выполню в прокси:
netstat -tuna
Я получаю две новые строчки:
udp 0 0 10.10.24.5:35000 10.10.24.2:53 ESTABLISHED
udp 0 0 10.10.24.5:35000 10.10.24.4:53 ESTABLISHED
Но я ожидал получить что-то вроде этого:
udp 0 0 10.10.24.5:53 10.10.24.2:53 ESTABLISHED
udp 0 0 10.10.24.5:53 10.10.24.4:53 ESTABLISHED
Очевидно, что DNS-запросы от клиентов к прокси не работают ...
Можно ли этого добиться с помощью haproxy?
Вам не нужно балансировать нагрузку на DNS-серверы. Достаточно настроить на стороне клиента два DNS-сервера и все.
Если у вас нет другого компьютера, выполняющего функции балансировщика нагрузки, вы создадите единую точку отказа для службы DNS.
Это похожий пост на serverfault.
Смотрится прекрасно. Исходящая часть IP-соединения (от 10.10.24.5
к 10.10.24.2
) обычно использует случайный порт (или полуслучайный), у него не обязательно должен быть тот же номер порта, что и у целевой машины.
Что еще более важно, у вас также есть такая строка:
udp 0 0 10.10.24.5:53 0.0.0.0:* LISTEN
что указывает на то, что HAProxy действительно прослушивает UDP-порт 53 для DNS-запросов и готов перенаправить их на последующие серверы.