DNS UDP Load Balancer using Nginx

The plan is to build a DNS- UDP load balancer DNS recursive server (actually forwarding service). The design logic is simple-

On client side a public recursive+forwarding DNS IP –> hits the Nginx Load Balancers  –> sends traffic to Google Public DNS/IBM Public DNS/Own recursive DNS/OpenDNS.

The configuration is quite simple on Nginx Load Balancer, the core configuration content is pretty straight forward:

# Load balance UDP-based DNS traffic across two servers
stream {
upstream dns_upstreams {
server 192.168.136.130:53;
server 192.168.136.131:53;
}

server {
listen 53 udp;
proxy_pass dns_upstreams;
proxy_timeout 1s;
proxy_responses 1;
error_log logs/dns.log;
}
}

However, the above configuration is pretty confusing, as where to put it? Should it be in nginx.conf or under /sites-available/default or /conf.d/default.conf… so many options.

But finally the riddle was over, as I had to put the syntax inside, nginx.conf file.

So, here goes my final/complete nginx.conf file-

# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/

user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /var/run/nginx.pid;

# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;

events {
worker_connections 1024;
}

http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

access_log /var/log/nginx/access.log main;

sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;

include /etc/nginx/mime.types;
default_type application/octet-stream;

# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.

#####################################
# Load balance UDP-based DNS traffic across two servers
#stream {
# upstream dns_upstreams {
# server 8.8.8.8:53;
# server 9.9.9.9:53;
# }

# server {
# listen 53 udp;
# proxy_pass dns_upstreams;
# proxy_timeout 1s;
# proxy_responses 1;
# error_log logs/dns.log;
# }
#}

##################################3##

include /etc/nginx/conf.d/*.conf;
}
stream {
upstream dns_upstreams {
server 8.8.8.8:53;
server 9.9.9.9:53;
}

server {
listen 53 udp;
proxy_pass dns_upstreams;
proxy_timeout 1s;
proxy_responses 1;
error_log /var/log/dns.log;
}
}

Src:
https://www.nginx.com/blog/announcing-udp-load-balancing/

Share

Leave a Reply