# Explicador de diferenças de configuração do FortiOS

> Duas configurações entram, um diff estrutural sai. Um bloco que mudou de lugar não é uma mudança, exceto nas seções em que a ordem é o comportamento.

- Tool: https://ronutz.com/pt-BR/tools/fortios-config-diff-explainer
- Family: Redes

---

## O que faz

Cole duas configurações do FortiOS separadas por uma linha com `---` e obtenha um diff **estrutural**: o que mudou por seção, objeto e configuração. Roda inteiramente no seu navegador.

## Por que um diff por linha é a ferramenta errada aqui

Um diff textual encontra um **roteiro mínimo de edição**, que não é a mesma coisa que a mudança feita por uma pessoa. Aplicado à saída do FortiOS, isso produz três incômodos específicos:

- Um bloco que **mudou de lugar** é informado como remoção mais inserção, então revisar um objeto inalterado custa a mesma atenção que uma edição real.
- Um objeto parece alterado porque um vizinho ganhou uma linha e o alinhamento se deslocou.
- Três edições genuínas ficam enterradas em quatrocentas linhas de contexto inalterado.

Esta ferramenta analisa os dois lados em seção, objeto e configuração, e então compara as estruturas. Um bloco que mudou de lugar não é uma mudança. Uma configuração alterada é uma linha nomeando o valor antigo e o novo.

## O único lugar em que a ordem não é ruído

Na maioria das seções a ordem dos objetos é irrelevante: objetos de endereço, de serviço, interfaces. Informar um reordenamento ali seria ruído, então é ignorado.

Para **firewall policy** e suas parentes, a ordem **é** o comportamento. A primeira correspondência vence, então mover uma política acima de outra muda o que o equipamento faz sem alterar uma única configuração. Essa é a edição que um diff por linha enterra com mais eficácia, porque nada dos dois lados do movimento difere textualmente, exceto a posição.

Essas seções são tratadas como sensíveis à ordem pelo nome, e um reordenamento nelas é informado como achado real:

`firewall policy` · `firewall policy6` · `firewall proxy-policy` · `firewall local-in-policy` · `firewall shaping-policy` · `firewall security-policy` · `router policy` · `router policy6` · `system sdwan`

Tratar os dois casos do mesmo jeito, em qualquer direção, tornaria a ferramenta errada, então os dois comportamentos são fixados por vetores de ouro.

## Entrada

Duas configurações, separadas por uma linha contendo apenas `---`, ou rotuladas com `BEFORE:` e `AFTER:` em linhas próprias. Cada lado é a saída comum de `show` ou `show full-configuration`.

Blocos `config` aninhados dentro de um objeto são analisados, e suas configurações recebem prefixo com o caminho aninhado para que não colidam com uma configuração de mesmo nome no objeto pai.

## O que ela não faz

**Ela compara, não julga.** Vai dizer que uma política mudou de lugar ou que um endereço mudou; não vai dizer se isso foi uma boa ideia, porque isso depende de uma intenção que ela não enxerga.

Também não modela o peso semântico de uma configuração. Mudar um comentário e mudar uma ação aparecem ambos como uma configuração alterada, e cabe a quem lê saber qual importa.

Entrada idêntica produz silêncio, e não um aviso tranquilizador. Uma ferramenta de diff que encontra mudanças fantasma é pouco confiável nas que contam, então um vetor fixa isso também.

## Onde ela se encaixa

Forme par com o artigo de políticas de firewall e NAT do FortiGate, que explica por que a ordem determina comportamento nas seções que esta ferramenta trata como sensíveis à ordem.

## Standards and references

- [Fortinet FortiOS CLI Reference: configuration structure (config / edit / set / next / end and nested blocks)](https://docs.fortinet.com/document/fortigate/latest/cli-reference)
- [Fortinet FortiGate Administration Guide: firewall policy ordering (first match wins, so object order is behaviour)](https://docs.fortinet.com/document/fortigate/latest/administration-guide/954635/policy-views-and-policy-lookup)

## Related reading

- [Pacotes de políticas, instalações e modo workspace no FortiManager](https://ronutz.com/pt-BR/learn/fortimanager-policy-packages-and-installs.md): Um pacote de políticas é um conjunto de políticas que é instalado em um ou mais equipamentos. Entre editá-lo e o equipamento mudar, há uma prévia de instalação que vale ler, um modelo de travamento que vale entender, e um conjunto de modos de falha que parecem todos com a instalação simplesmente não ter funcionado.
- [Políticas de firewall e NAT no FortiGate: ordem de correspondência, SNAT e DNAT](https://ronutz.com/pt-BR/learn/fortigate-firewall-policy-and-nat.md): Um FortiGate avalia as políticas de firewall de cima para baixo e para na primeira que corresponde, o que faz da ordem uma propriedade funcional, e não cosmética. Este artigo cobre como uma política é correspondida, a diferença entre NAT por política e NAT central, como o NAT de origem escolhe o endereço por meio de pools, e por que o NAT de destino via VIP muda contra o que a política precisa ser escrita.
- [Scripts, histórico de revisões e investigação de instalações no FortiManager](https://ronutz.com/pt-BR/learn/fortimanager-scripts-revisions-and-troubleshooting.md): Quando uma mudança no FortiManager não chega, a resposta está quase sempre num de três lugares: o log de instalação, o histórico de revisões, ou o estado de sincronia. Scripts acrescentam uma quarta forma de mudar coisas e uma quarta forma de ser surpreendido. Este artigo cobre para que serve cada um e em que ordem verificar.
