Nomes são a API da sua infraestrutura: aparecem em DNS, logs, firewall, AD, hypervisor, monitoramento e em todos os scripts. Uma taxonomia bem definida permite localizar um recurso em segundos, filtrar logs por ambiente e automatizar inventário — uma mal definida vira dívida técnica permanente, porque renomear em produção sempre custa mais do que nomear certo na primeira vez.
Este guia estabelece padrões para hosts, VMs, VPNs, Unidades Organizacionais, usuários, grupos e arquivos/scripts em ambientes heterogêneos (Windows, Linux, RouterOS, FortiOS, VMware), reconciliando o ideal com as restrições reais de cada plataforma.
| Princípio | Na prática |
|---|---|
| Clareza | O nome deve dizer o que é sem consultar documentação: prd-nat-web01 informa ambiente, site e função |
| Consistência | Um único padrão por tipo de objeto, aplicado sem exceções — exceção destrói automação |
| Legibilidade | Se dá para ler em voz alta no telefone sem soletrar, está bom |
| Não ambiguidade | Dois objetos nunca compartilham nome, mesmo em sistemas diferentes (host, VM e DNS devem coincidir) |
| Ordenação | Campos do mais geral ao mais específico, números com padding (web01, não web1) — sort e listagens ficam naturais |
| Prefixos/sufixos fixos | Códigos curtos e controlados (vocabulário fechado), nunca abreviações improvisadas |
á→a, ç→c, õ→o (tabela na seção 6)01–99) — ordenação lexicográfica correta<ambiente>-<site>-<função><NN>
| Campo | Tamanho | Vocabulário controlado (exemplos) |
|---|---|---|
ambiente |
3 letras | prd (produção), hml (homologação), dev (desenvolvimento), lab (laboratório) |
site |
2–3 letras | Código da localidade: nat (Natal), sao (São Paulo), dfw (Dallas), azu (Azure) |
função |
2–8 letras | dc (controlador de domínio), web, db, fw (firewall), sw (switch), rt (roteador), kvm (hypervisor), fs (arquivos), bkp (backup), mon (monitoramento), adm (estação admin) |
NN |
2 dígitos | Sequencial por função+site: 01, 02... |
Exemplos: prd-nat-dc01, prd-nat-kvm02, hml-sao-web01, lab-nat-fw03.
Por que o ambiente primeiro? Ordenar qualquer lista (DNS, AD, hypervisor, Zabbix) agrupa automaticamente por ambiente — e filtros de log tipo
host:*prd*isolam produção em um segundo.
| Plataforma | Comprimento | Regras |
|---|---|---|
| DNS (RFC 952/1123) | 63 por rótulo, 255 no FQDN | Letras, dígitos e hífen (regra LDH); RFC 952 exigia começar com letra; a RFC 1123 passou a permitir dígito no início — mas hífen nunca no início ou fim; case-insensitive |
| Windows (computador) | 63 (DNS), mas use ≤ 15 | Acima de 15, o nome NetBIOS é truncado e pode colidir; não pode ser só números; recomendado LDH; case-insensitive |
| Linux | 63 utilizáveis (limite do kernel: 64 com o terminador) | LDH; hostnamectl aceita um pretty hostname livre, mas o static deve seguir LDH; não inicie com hífen |
Consequência prática: para ambientes mistos, o nome curto do host deve ter no máximo 15 caracteres — o elo mais fraco (NetBIOS) dita o limite. O padrão acima (prd-nat-web01 = 13) atende com folga.
db01 sobrevive à migração de MySQL para PostgreSQL; mysql01, nãotemplate-ubuntuO nome da VM no hypervisor deve ser idêntico ao hostname do guest. Ponto. Se o guest é prd-nat-web01, a VM no vCenter/ESXi, no virt-manager ou no Hyper-V se chama prd-nat-web01.
Quando o hypervisor hospeda mais de um domínio/tenant, prefixe o domínio DNS para evitar colisão: corp-prd-nat-web01 (o display name aceita, o guest continua só prd-nat-web01).
| Plataforma | Limite | Peculiaridades |
|---|---|---|
| VMware vSphere 7/8 | 80 caracteres (VM, datastore, cluster, pasta, datacenter) [1][1:1] | Nomes de VM não podem conter %, \, / [1:2]; KB da VMware recomenda evitar também & * $ # @ ! : ? " < > \| ; '; - e . são suportados |
| Microsoft Hyper-V | Limite prático alto (nome de exibição) | O limite relevante é o do guest: 15 para Windows (NetBIOS), 63 para Linux |
| KVM/libvirt | Permissivo | Aceita praticamente qualquer string, mas mantenha LDH para ferramentas de ecossistema (virsh, Prometheus, backup) |
| PNETLab/EVE-NG (labs) | Permissivo | Mesmo em laboratório, use o padrão — lab de hoje é documentação de amanhã |
ds-nat-ssd01, pasta prd/, pasta hml/ — espelhando a taxonomia de ambientetpl-debian12-min, tpl-win2022-gui — prefixo tpl- deixa claro que não se liga um templateSite-to-site: s2s-<siteA>-<siteB>
Acesso remoto: ra-<perfil>
Dial-up hub: du-<perfil>
| Código | Significado | Exemplo |
|---|---|---|
s2s |
Site-to-site (LAN a LAN) | s2s-nat-sao, s2s-nat-azu |
ra |
Remote access (usuário final) | ra-adm, ra-terceiros |
du |
Dial-up (gateway que recebe conexões dinâmicas) | du-filiais |
Ordenação dos sites: defina uma regra determinística — por exemplo, site principal (matriz/hub) primeiro, ou ordem alfabética. Assim s2s-nat-sao nunca aparece como s2s-sao-nat no outro firewall, e o nome do túnel é o mesmo nas duas pontas.
| Plataforma | Limite | Peculiaridades |
|---|---|---|
| FortiOS — nome do host | 35 caracteres; apenas letras, dígitos, - e _ [2] |
Sem espaços, sem ponto |
| FortiOS — IPsec phase1 (modo interface) | 15 caracteres [2:1] | O nome vira a interface virtual do túnel; VPN baseada em política permite 35 [2:2] |
| FortiOS — dial-up (acesso remoto) | 15 menos o sufixo _N [3] |
Cada túnel dinâmico cria <nome>_0, <nome>_1...; com net-device habilitado o sufixo conta no limite — nomes longos reduzem o número máximo de túneis simultâneos |
| RouterOS — identity | 64 caracteres [4] | Aceita underscore; mantenha LDH por convenção (SNMP, DHCP, vizinhança) |
| RouterOS — interfaces (WireGuard, IPsec, GRE) | Sem limite prático curto | Nomes viram identificadores de interface — mantenha ≤ 32 e sem espaços para scripts e /interface print |
Atenção (FortiOS): o limite de 15 caracteres da phase1 em modo interface é o gargalo da taxonomia de VPN.
s2s-nat-sao(11) era-adm(6) cabem; um nome descritivo demais comovpn-matriz-filial01(18) não cria o túnel. Em dial-up, cada caractere a mais no nome reduz a escala de túneis simultâneos [3:1][3:2].
s2s-nat-sao (P1) → s2s-nat-sao-p2 ou s2s-nat-sao-lan (P2 por seletor de tráfego)ra-adm, ra-financeiro, ra-terceiros — nunca ra-geanset comment no RouterOS, set comment no FortiOS)Estruture primeiro por função do objeto (o que determina aplicação de GPO) e depois por site/departamento (o que determina delegação administrativa):
OU=Empresa
├── OU=Usuarios
│ ├── OU=Administrativo
│ ├── OU=Financeiro
│ └── OU=TI
├── OU=Computadores
│ ├── OU=Servidores
│ │ ├── OU=NAT
│ │ └── OU=SAO
│ └── OU=Estacoes
│ ├── OU=NAT
│ └── OU=SAO
├── OU=Grupos
└── OU=Servicos # contas de serviço, gMSA
ou/cn no AD) [5]Domain Controllers padrão nem a Computers padrão como destino final — mova objetos para a sua estrutura; GPO não se aplica a containersServicos separada facilita aplicar políticas restritivas a contas de serviço (sem logon interativo, por exemplo)| Tipo de conta | Formato | Exemplo |
|---|---|---|
| Pessoa física | nome.sobrenome |
gean.souza |
| Homônimo | nome.inicial.sobrenome |
gean.s.souza |
| Conta de serviço | svc-<função> |
svc-backup, svc-zabbix |
| Conta admin separada | adm-<login> ou adm.<sobrenome> |
adm-gean.souza |
Nomes próprios carregam acentos; logins, não. Transliteração direta, caractere por caractere:
| De | Para | De | Para | |
|---|---|---|---|---|
| á à â ã | a | é ê | e | |
| í | i | ó ô õ | o | |
| ú ü | u | ç | c |
José Araújo → jose.araujo. Espaços viram ponto (entre nome e sobrenome) e nada mais — nunca underscore nem hífen no meio de nomes compostos simples (maria.silva, não maria_silva).
| Plataforma | Comprimento | Regras |
|---|---|---|
| AD — sAMAccountName | 20 caracteres [5:1][6] | Não pode conter " / \ [ ] : ; \| = , + * ? < > @ [6:1]; case-insensitive; é o login no formato DOMINIO\usuario |
AD — UPN (usuario@dominio) |
Limite prático bem maior | Formato de e-mail; contorna os 20 do sAMAccountName, mas mantenha curto por sanidade |
| AD — cn / displayName | 64 / 256 [5:2] | Podem levar o nome completo com acentos — é onde "José Araújo" vive bonito |
| Linux (useradd) | 31 utilizáveis (campo de 32 bytes do utmp) | Regra clássica: começar com letra minúscula ou _, seguir com [a-z0-9_-], podendo terminar em $ (contas de máquina); case-sensitive |
Consequência prática: logins de pessoas devem ter no máximo 20 caracteres e respeitar o alfabeto do sAMAccountName — o elo mais fraco (de novo ele) garante interoperabilidade total. gean.souza (10) passa em tudo; alexandrina.constantinopla (26) estoura o AD — a regra de homônimo/abreviação precisa prever esses casos desde o início.
Contas de serviço merecem o mesmo rigor:
svc-backupdocumenta dono e propósito;backup2,teste,admin123viram contas órfãs que ninguém desativa por medo. Registre cadasvc-*no inventário com responsável e justificativa.
<escopo>-<tipo>-<contexto>-<permissão>
| Campo | Valores | Observação |
|---|---|---|
escopo |
gg (global), gl (local de domínio), gu (universal) |
Segue o modelo AGDLP do AD |
tipo |
sec (segurança), dist (distribuição) |
Segurança dá permissão; distribuição é lista de e-mail |
contexto |
departamento, sistema ou recurso | fin, ti, erp, fs-nat |
permissão |
adm, leitura, escrita, op (operador) |
Só para grupos de segurança |
Exemplos: gg-sec-fin-leitura, gl-sec-fs-nat-adm, gu-sec-ti-adm, gg-dist-fin-todos.
tipo existe para forçar essa decisão na criação...-leitura vs ...-adm evita o clássico "achei que era só leitura" ao adicionar alguémgrupo-pai-do-grupo-ti[a-z0-9_-], minúsculas, ≤ 31) — ex.: docker, backup-ro, app-erp-admkebab-case minúsculo, sem acento, sem espaços
<ação>-<objeto>[-<qualificador>][.<extensão>]
| Situação | Padrão | Exemplo |
|---|---|---|
| Script utilitário | verbo-objeto.sh |
backup-diario.sh, checar-disco.sh |
Comando instalado (/usr/local/bin) |
sem extensão | gerar-senhas, multi-ssh-tmux |
| Configuração | nome do serviço | lab.conf, sshd_config.d-00-base.conf |
| Artefato datado | ISO 8601 no nome | backup-2026-08-06.tar.gz, relatorio-2026-08.csv |
| Documentação | espelha o slug da wiki | infra-nomenclatura.md |
backup-diario se agrupa com backup-semanal, e a intenção é óbvia no ls_v2, _final, _revisado, _agora_vai são o sintoma de ausência de versionamento — use Git (como já padronizado no guia de escrita da wiki).sh para bash, .ps1 para PowerShell, .py para Python; executável instalado perde a extensão (é assim que gerar-senhas vira comando — ver Criação de Senhas no Linux)AAAA-MM-DD) — ordena corretamente e não confunde 03/04 março ou abril| Sistema | Objeto | Comprimento máx. | Caracteres proibidos | Case-sensitive? | Outras limitações |
|---|---|---|---|---|---|
| DNS (RFC 952/1123) | Rótulo / FQDN | 63 / 255 | Tudo exceto letras, dígitos, hífen | Não | Não iniciar/terminar com hífen |
| Windows | Nome do computador | 63 | Especiais; não só dígitos | Não | Use ≤ 15 (NetBIOS) |
| Windows/AD | sAMAccountName (usuário) | 20 | " / \ [ ] : ; \| = , + * ? < > @ [6:2] |
Não | Login DOMINIO\usuario |
| Windows/AD | sAMAccountName (computador) | 16 (15 + $) |
Idem | Não | Sufixo $ automático |
| Windows/AD | OU / cn | 64 [5:3] | — | Não (preserva caixa) | displayName até 256 |
| Linux | hostname | 63 utilizáveis | Tudo exceto LDH | Não (na prática) | Não iniciar com hífen; pretty hostname é livre mas não use para rede |
| Linux | username / grupo | 31 utilizáveis | Maiúsculas e especiais fora de [a-z0-9_-] |
Sim | Iniciar com letra ou _ |
| RouterOS | identity | 64 [4:1] | Evitar especiais | Parcial | Aparece em DHCP/SNMP/vizinhança |
| RouterOS | interfaces/túneis | Sem limite prático curto | Evitar espaços | Sim | Manter ≤ 32 para scripts |
| FortiOS | hostname | 35 | Tudo exceto letras, dígitos, -, _ [2:3] |
Não | Sem espaços nem ponto |
| FortiOS | IPsec phase1 (interface) | 15 [2:4] | — | Não | Vira interface virtual; policy-based: 35 [2:5] |
| FortiOS | IPsec dial-up | 15 − sufixo _N [3:3] |
— | Não | Nome longo reduz túneis simultâneos |
| FortiOS | VDOM | 11 | — | Não | Planejar siglas curtas |
| vSphere 7/8 | VM, datastore, cluster, pasta | 80 [1:3][1:4] | VM: % \ / [1:5] |
Não (preserva caixa) | Namespace Tanzu: 63 [1:6] |
| Hyper-V | VM (display name) | Alto (sem limite prático) | — | Não | Limite real é o do guest |
Cenário: empresa TecnoNorte, com matriz em Natal (nat), filiais em Mossoró (mos) e São Paulo (sao), workloads em Azure (azu), domínio AD corp.tecnonorte.local e ambiente de homologação separado.
| Objeto | Nome | Por que funciona |
|---|---|---|
| DC Windows (matriz) | prd-nat-dc01 |
12 chars: cabe no NetBIOS (≤ 15) |
| Hypervisor KVM (matriz) | prd-nat-kvm01 |
Função clara, igual no guest e no DNS |
| VM de banco (homologação, SP) | hml-sao-db01 |
VM no vCenter com o mesmo nome |
| Firewall FortiGate (matriz) | prd-nat-fw01 |
12 chars: dentro dos 35 do FortiOS |
| Switch MikroTik (Mossoró) | prd-mos-sw01 |
Identity ≤ 64, LDH puro |
| VPN matriz ↔ SP | s2s-nat-sao |
11 chars: dentro dos 15 da phase1, idêntico nas duas pontas |
| VPN matriz ↔ Azure | s2s-nat-azu |
Phase 2: s2s-nat-azu-p2 |
| VPN acesso remoto TI | ra-ti |
Dial-up: sufixos _0..._f cabem com folga |
| Usuário (Gean Souza) | gean.souza |
Sem acento, 10 chars, AD + Linux |
| Conta de serviço backup | svc-backup |
10 chars: sAMAccountName ok, propósito óbvio |
| Grupo leitura ERP | gg-sec-erp-leitura |
Escopo, tipo, contexto e permissão explícitos |
| Lista de e-mail financeiro | gg-dist-fin-todos |
dist deixa claro: não dá permissão |
| Script de backup | backup-diario.sh → instalado como backup-diario |
Verbo-objeto, sem extensão em produção |
corp.tecnonorte.local
└── OU=Empresa
├── OU=Usuarios
│ ├── OU=Administrativo
│ └── OU=TI ← gean.souza
├── OU=Computadores
│ ├── OU=Servidores
│ │ └── OU=NAT ← PRD-NAT-DC01
│ └── OU=Estacoes
├── OU=Grupos ← gg-sec-erp-leitura, gg-dist-fin-todos
└── OU=Servicos ← svc-backup
Repare que o AD exibe o nome do computador em caixa alta (
PRD-NAT-DC01) — o Windows preserva a caixa digitada mas trata nomes como case-insensitive. Padronize minúsculas em DNS, Linux e scripts; no AD, aceite a convenção de caixa do seu time, mantendo os caracteres idênticos.
Antes de criar qualquer objeto, valide:
ambiente-site-função+NN?" / \ [ ] : ; | = , + * ? < > @?_N)?01, não 1)?Automação do checklist — valide antes de provisionar (ou plugue no pipeline de CI):
#!/bin/bash
# validar-nome - Valida nomes contra a taxonomia de infraestrutura
# Uso: validar-nome <tipo> <nome>
# Tipos: host | usuario | vpn-fortios | arquivo
set -euo pipefail
erro() { echo "FALHA: $*" >&2; exit 1; }
ok() { echo "OK: $*" ; }
tipo="${1:-}"; nome="${2:-}"
[ -n "$tipo" ] && [ -n "$nome" ] || erro "Uso: validar-nome <host|usuario|vpn-fortios|arquivo> <nome>"
# Regras universais (todos os tipos)
# Regex em variável: evita problemas de parsing do [[ ]] com ; e [ ]
re_charset='[^a-z0-9._-]'
re_ad_proibidos='["/\[\]:;|=,+*?<@]'
[[ "$nome" =~ [A-Z] ]] && erro "Use apenas minúsculas: $nome"
[[ "$nome" == *[[:space:]]* ]] && erro "Espaços não são permitidos: $nome"
[[ "$nome" =~ $re_charset ]] && erro "Caractere inválido (acento ou símbolo) em: $nome"
[[ "$nome" == -* || "$nome" == *- ]] && erro "Não pode começar nem terminar com hífen"
case "$tipo" in
host)
# Taxonomia: ambiente-site-funçãoNN | limite NetBIOS: 15
[ ${#nome} -le 15 ] || erro "Host com ${#nome} caracteres (máx. 15, regra NetBIOS)"
[[ "$nome" =~ ^(prd|hml|dev|lab)-[a-z]{2,3}-[a-z]{2,8}[0-9]{2}$ ]] \
|| erro "Fora do padrão <amb>-<site>-<função><NN> (ex.: prd-nat-web01)"
;;
usuario)
# Limite sAMAccountName: 20 | caracteres proibidos do AD
[ ${#nome} -le 20 ] || erro "Usuário com ${#nome} caracteres (máx. 20, regra sAMAccountName)"
[[ "$nome" =~ $re_ad_proibidos ]] \
&& erro "Contém caractere proibido no sAMAccountName"
[[ "$nome" =~ ^[a-z_][a-z0-9._-]*\$?$ ]] \
|| erro "Fora do padrão POSIX de login (ex.: nome.sobrenome ou svc-funcao)"
;;
vpn-fortios)
# Phase1 modo interface: 15 (reserve espaço para sufixo _N em dial-up)
[ ${#nome} -le 15 ] || erro "VPN com ${#nome} caracteres (máx. 15, phase1 FortiOS)"
[[ "$nome" =~ ^(s2s|ra|du)- ]] || erro "VPN deve começar com s2s-, ra- ou du-"
;;
arquivo)
# kebab-case, sem versão no nome
[[ "$nome" =~ _v[0-9]|_final|_revisado ]] \
&& erro "Sufixo de versão no nome — use Git para versionar"
;;
*) erro "Tipo desconhecido: $tipo" ;;
esac
ok "$tipo '$nome' válido pela taxonomia"
# Testes
validar-nome host prd-nat-web01 # OK
validar-nome host PRD-NAT-WEB01 # FALHA: maiúsculas
validar-nome host prd-nat-webserver01 # FALHA: 19 caracteres
validar-nome usuario gean.souza # OK
validar-nome vpn-fortios s2s-nat-sao # OK
validar-nome arquivo backup_v2.sh # FALHA: sufixo de versão
William Lam — Updated Character Limits for vSphere Objects — limites de 80 caracteres e caracteres proibidos em objetos do vSphere 7+. ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
Fortinet Document Library — FortiOS Administration Guide — limites de nome da phase1 (15 no modo interface, 35 em política) e conjunto de caracteres do hostname. ↩︎ ↩︎ ↩︎ ↩︎ ↩︎ ↩︎
Fortinet Community — IPsec VPN phase1 interface name characters limitation — sufixo _N em dial-up e impacto na escala de túneis. ↩︎ ↩︎ ↩︎ ↩︎
MikroTik Documentation — Identity — limite de 64 caracteres do RouterOS. ↩︎ ↩︎
Microsoft Learn — Active Directory Domain Services Maximum Limits — NetBIOS 15, sAMAccountName 20, OU/cn 64. ↩︎ ↩︎ ↩︎ ↩︎
Microsoft Learn — SAM-Account-Name attribute — limite de 20 caracteres e lista de caracteres proibidos. ↩︎ ↩︎ ↩︎