Eu sugeriria começar tirando o host B do firewall, ou apenas fazendo um para um NAT para hospedar B (todos os protocolos incluindo TCP e UDP) para expô-lo completamente. Ou, pelo menos, expor a porta 12345 / UDP no host B. Deixe o host A dentro do firewall, sem necessidade de abrir portas. Envie pacotes de A para B, depois de B para A. Se A receber pacotes UDP de B, você terá experimentado com sucesso a perfuração no firewall do host A.
Então, meu conselho é tentar perfurar um firewall primeiro.
Eu não acho possível perfurar entre dois hosts completamente cobertos pelo NAT, a menos que haja um terceiro host C que possa ser acessado pelas duas máquinas e enganar os firewalls para encaminhar os pacotes UDP dentro da rede.
Espero que isso ajude