Unbound DNS Hardcore – Tuning Avançado de Kernel e Rede para Provedores

Até aqui vimos como configurar o cache do Unbound DNS proporcional à RAM. Agora vamos além: para rodar Unbound em provedores de internet, com milhares de clientes e tráfego intenso, é necessário ajustar também kernel e rede.

Abaixo detalhamos os ajustes, com referência de arquivo ou local de configuração.


1. Buffers de Rede (UDP/TCP)

Arquivo: /etc/sysctl.conf

O DNS usa principalmente UDP, mas também TCP para fallback ou consultas grandes. Buffers pequenos podem gerar perda de pacotes.

net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
net.core.rmem_default = 262144
net.core.wmem_default = 262144

net.ipv4.udp_rmem_min = 8192
net.ipv4.udp_wmem_min = 8192

net.ipv4.tcp_rmem = 4096 87380 16777216
net.ipv4.tcp_wmem = 4096 65536 16777216

2. Conexões Simultâneas e File Descriptors

Arquivos: /etc/sysctl.conf e /etc/security/limits.conf

O Unbound abre milhares de sockets. Sem ajuste, o Linux limita conexões.

sysctl.conf:

net.core.somaxconn = 4096
net.core.netdev_max_backlog = 8192
net.ipv4.ip_local_port_range = 1024 65535
fs.file-max = 2097152

limits.conf (ou systemd override para Unbound):

unbound soft nofile 1048576
unbound hard nofile 1048576

3. Proteções e Performance em DNS Público

Arquivo: /etc/sysctl.conf

Evita ataques básicos e melhora o manejo de conexões TCP:

net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_fin_timeout = 15
net.ipv4.tcp_tw_reuse = 1

4. Ajustes para DNSSEC e EDNS0

Arquivo: /etc/sysctl.conf

Pacotes grandes exigem ajustes de fragmentação UDP:

net.ipv4.ipfrag_high_thresh = 5242880
net.ipv4.ipfrag_low_thresh = 3932160
net.ipv4.ipfrag_time = 60

5. Proteção Anti-DDoS Básica

Arquivo: /etc/sysctl.conf

Protege a pilha TCP/IP de abusos simples:

net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.icmp_ignore_bogus_error_responses = 1

6. Aplicando as Configurações

Comandos:

sysctl -p                     # Aplica as mudanças de sysctl.conf
ulimit -n 1048576              # Aplica os limites de file descriptors, se configurado no limits.conf
systemctl restart unbound      # Reinicia o Unbound para aplicar configs

Conclusão

Para provedores de internet, caches grandes no Unbound só funcionam bem se o kernel e a rede estiverem tunados. Com os arquivos e parâmetros indicados acima, o Unbound:

  • Suporta alto volume de UDP/TCP
  • Permite milhares de conexões simultâneas
  • Lida com respostas grandes (DNSSEC/EDNS0) sem perder pacotes
  • Mantém proteções básicas contra abuso

Aqui vai uma tabela resumida completa, com arquivo de referência, parâmetro, valor recomendado e objetivo:

Arquivo / LocalParâmetroValor recomendadoObjetivo
/etc/sysctl.confnet.core.rmem_max16777216Aumenta buffer de recepção geral da rede
/etc/sysctl.confnet.core.wmem_max16777216Aumenta buffer de envio geral da rede
/etc/sysctl.confnet.core.rmem_default262144Buffer de recepção padrão
/etc/sysctl.confnet.core.wmem_default262144Buffer de envio padrão
/etc/sysctl.confnet.ipv4.udp_rmem_min8192Buffer mínimo UDP de recepção
/etc/sysctl.confnet.ipv4.udp_wmem_min8192Buffer mínimo UDP de envio
/etc/sysctl.confnet.ipv4.tcp_rmem4096 87380 16777216Buffer TCP: min, default, max
/etc/sysctl.confnet.ipv4.tcp_wmem4096 65536 16777216Buffer TCP: min, default, max
/etc/sysctl.confnet.core.somaxconn4096Máximo de conexões pendentes por socket
/etc/sysctl.confnet.core.netdev_max_backlog8192Fila máxima de pacotes recebidos
/etc/sysctl.confnet.ipv4.ip_local_port_range1024 65535Portas efêmeras disponíveis para clientes
/etc/sysctl.conffs.file-max2097152Limite máximo de arquivos abertos pelo kernel
/etc/security/limits.confunbound soft nofile1048576Limite soft de file descriptors para Unbound
/etc/security/limits.confunbound hard nofile1048576Limite hard de file descriptors para Unbound
/etc/sysctl.confnet.ipv4.tcp_syncookies1Proteção contra SYN flood
/etc/sysctl.confnet.ipv4.tcp_fin_timeout15Reduz tempo de conexões TCP em FIN-WAIT
/etc/sysctl.confnet.ipv4.tcp_tw_reuse1Reutiliza sockets em TIME-WAIT
/etc/sysctl.confnet.ipv4.ipfrag_high_thresh5242880Limite alto de memória para fragmentos UDP
/etc/sysctl.confnet.ipv4.ipfrag_low_thresh3932160Limite baixo de memória para fragmentos UDP
/etc/sysctl.confnet.ipv4.ipfrag_time60TTL de fragmentos UDP
/etc/sysctl.confnet.ipv4.conf.all.rp_filter1Evita spoofing de IP
/etc/sysctl.confnet.ipv4.conf.all.accept_redirects0Desabilita ICMP redirects
/etc/sysctl.confnet.ipv4.conf.all.accept_source_route0Desabilita source routing
/etc/sysctl.confnet.ipv4.icmp_echo_ignore_broadcasts1Ignora pings broadcast
/etc/sysctl.confnet.ipv4.icmp_ignore_bogus_error_responses1Ignora respostas ICMP inválidas

Rolar para cima