Para a grande maioria dos usuários comuns, sendo realista, simplesmente não faz diferença. Vejo muita gente reclamando de NAT, mas o efeito prático do NAT é praticamente nulo. Só faz diferença se você precisar expor algum serviço na Internet. IP fixo é a mesma coisa. Não faz diferença para o usuário comum. E como regras de firewall são simplificadas?
Mas faz muita diferença: todos os serviços que dependem de conexão entrante (jogos, por exemplo), ou precisam que você configure um port forward para eles, ou dependem de um servidor externo para acertar as coisas. E depender de um servidor externo introduz uma montanha de complicações, além de depender de diversas condições - que nem sempre são verdadeiras.
Funciona assim:
1) Seu desktop abre uma conexão UDP com o servidor. Tem que ser UDP, não dá para fazer isso com TCP.
2) O servidor "anota" qual IP e qual porta UDP você usou para falar com ele.
3) A outra pessoa faz a mesma coisa, e o servidor "anota" qual IP e porta ela usou também.
4) Aí o servidor avisa para você qual IP e porta UDP a pessoa usou, e avisa para a pessoa qual IP e porta UDP você usou.
5) Agora, para você falar com a outra pessoa, o seu programa abre uma conexão UDP, para o endereço e porta informados pelo servidor. E vice-versa.
Aí você fala "viu? problema resolvido!".
Em termos. Porque:
a) Isso admite que a pilha IP de ambos os lados tenha o mesmo comportamento: o de reusar portas UDP de saída, para economizar recursos. Apesar de isso ser comum, não é nem regra nem obrigatório.
b) A negociação é complexa, o que torna mais complexo o código do aplicativo, exige mais recursos do servidor e introduz fragilidade no processo - porque depende de algo que não é garantido.
c) Basicamente impede você de hospedar alguma coisa - já que precisa de toda uma estrutura para que a negociação ocorra, e de um endereço para o contato inicial. Esse endereço PRECISA aceitar conexões de fora, então voltamos à estaca zero. Você não vai hospedar servidor? Basta querer hospedar um jogo - nem que seja para a sua partida - que você está rodando um servidor.
Como o firewall se torna mais simples:
1) Com NAT nós precisamos de, no mínimo, 3 regras:
-> Uma que permita que tudo que se origine em sua intranet saia para a internet
-> Uma que permita o retorno de qualquer tráfego já estabelecido, na regra acima
-> Uma para fazer o NAT. É ela que traduz o seu endereço interno para o endereço externo de seu roteador.
Agora, imagine que você e seu irmão queiram jogar um dado jogo, e que ele precisa de port forward para funcionar. Essa situação é para lá de comum.
Além das três regras acima, você precisa de:
-> Uma regra que permita tráfego de entrada nas portas escolhidas para o SEU jogo
-> Uma regra que faça o port forward destas portas, para o IP interno do SEU computador
-> Uma regra que faça a tradução de endereço reversa, para que quando o seu computador tente falar com as suas portas, no IP externo (é o que o servidor vai dizer para ele), os pacotes cheguem no endereço certo e com a origem certa.
E, além das três regras acima (já estamos com seis), precisamos das regras para o seu irmão. Elas são iguais às três logo acima - mas precisamos usar portas diferentes.
Um total de 9 regras, para um jogo usando uma porta e duas pessoas. Com o requinte de que as duas pessoas não podem usar a mesma porta, então é preciso configurar o jogo, para usar portas diferentes. E lembrar disso.
Mais um jogo? Mais três regras por pessoa dentro da rede. Isso se o jogo usar uma porta.
2) Sem NAT, e com diversos endereços válidos - que é o que o IPv6 nos dá. Um firewall mínimo seria:
-> Uma regra permitindo que saia tráfego, de sua intranet para a internet
-> Uma regra que permita o retorno de qualquer tráfego já estabelecido, na regra acima
Agora, imagine que você e seu irmão queiram jogar um dado jogo, e que ele precisa de port forward para funcionar. Essa situação é para lá de comum.
Além das duas regras acima, você precisa de:
-> Uma regra que permita tráfego de entrada nas portas escolhidas para o SEU jogo (se quiser fazer direto. Se não quiser, pode liberar qualquer tráfego entrante para essas portas, para qualquer endereço na intranet).
Além da regra acima, se você optou por fazer a coisa direito, precisamos de outra igual para seu irmão. Se decidiu que ia relaxar a coisa, e usou a regra geral, não precisa de mais uma.
Um total de 4 regras, para um jogo usando uma porta e duas pessoas. Cada jogo extra acrescenta uma (se fizer no relaxo) ou duas regras (se quiser fazer direito). Como cada máquina tem um endereço real, não existe complicação de NAT.
Tudo o que eu descrevi para o jogo vale para qualquer coisa que deseje aceitar uma conexão vinda de fora. Isso representa uma carga maior de processamento em seu roteador (mais CPU e memória para realizar o mesmo trabalho) e mais complexidade - que várias vezes causa problemas difíceis de debugar e impossíveis de resolver.