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 / Local | Parâmetro | Valor recomendado | Objetivo |
|---|---|---|---|
/etc/sysctl.conf | net.core.rmem_max | 16777216 | Aumenta buffer de recepção geral da rede |
/etc/sysctl.conf | net.core.wmem_max | 16777216 | Aumenta buffer de envio geral da rede |
/etc/sysctl.conf | net.core.rmem_default | 262144 | Buffer de recepção padrão |
/etc/sysctl.conf | net.core.wmem_default | 262144 | Buffer de envio padrão |
/etc/sysctl.conf | net.ipv4.udp_rmem_min | 8192 | Buffer mínimo UDP de recepção |
/etc/sysctl.conf | net.ipv4.udp_wmem_min | 8192 | Buffer mínimo UDP de envio |
/etc/sysctl.conf | net.ipv4.tcp_rmem | 4096 87380 16777216 | Buffer TCP: min, default, max |
/etc/sysctl.conf | net.ipv4.tcp_wmem | 4096 65536 16777216 | Buffer TCP: min, default, max |
/etc/sysctl.conf | net.core.somaxconn | 4096 | Máximo de conexões pendentes por socket |
/etc/sysctl.conf | net.core.netdev_max_backlog | 8192 | Fila máxima de pacotes recebidos |
/etc/sysctl.conf | net.ipv4.ip_local_port_range | 1024 65535 | Portas efêmeras disponíveis para clientes |
/etc/sysctl.conf | fs.file-max | 2097152 | Limite máximo de arquivos abertos pelo kernel |
/etc/security/limits.conf | unbound soft nofile | 1048576 | Limite soft de file descriptors para Unbound |
/etc/security/limits.conf | unbound hard nofile | 1048576 | Limite hard de file descriptors para Unbound |
/etc/sysctl.conf | net.ipv4.tcp_syncookies | 1 | Proteção contra SYN flood |
/etc/sysctl.conf | net.ipv4.tcp_fin_timeout | 15 | Reduz tempo de conexões TCP em FIN-WAIT |
/etc/sysctl.conf | net.ipv4.tcp_tw_reuse | 1 | Reutiliza sockets em TIME-WAIT |
/etc/sysctl.conf | net.ipv4.ipfrag_high_thresh | 5242880 | Limite alto de memória para fragmentos UDP |
/etc/sysctl.conf | net.ipv4.ipfrag_low_thresh | 3932160 | Limite baixo de memória para fragmentos UDP |
/etc/sysctl.conf | net.ipv4.ipfrag_time | 60 | TTL de fragmentos UDP |
/etc/sysctl.conf | net.ipv4.conf.all.rp_filter | 1 | Evita spoofing de IP |
/etc/sysctl.conf | net.ipv4.conf.all.accept_redirects | 0 | Desabilita ICMP redirects |
/etc/sysctl.conf | net.ipv4.conf.all.accept_source_route | 0 | Desabilita source routing |
/etc/sysctl.conf | net.ipv4.icmp_echo_ignore_broadcasts | 1 | Ignora pings broadcast |
/etc/sysctl.conf | net.ipv4.icmp_ignore_bogus_error_responses | 1 | Ignora respostas ICMP inválidas |
