Solução potencial 1
O que eu tentaria fazer (deveria funcionar, mas não testei):
- Obtenha um segundo IP disponível no novo servidor. Configure-o usando outro namespace de rede (você pode usar algo como o Docker para ele).
- Crie um túnel (usando o GRE é provavelmente o mais fácil, mas você pode fazer qualquer coisa, incluindo IPSEC, OpenVPN, etc.) entre os dois atendimentos.
- Para o novo namespace de rede que você criou, use o encapsulamento como rota padrão.
- Configure o TPROXY na origem / máquina antiga e o NAT no segundo IP.
Agora, tudo é um pouco complicado, porque também é UDP. Você precisará mexer muito com o rastreamento de conexão.
Possível solução 2
Outra coisa que você pode fazer, muito mais fácil: escrever um aplicativo de tunelamento personalizado, aproveitando esse UDP. Deve fazer algo assim:
- A parte de origem do aplicativo ouviria no UDP no servidor antigo.
- A parte dest do aplicativo ouviria o TCP no novo servidor.
- A parte de origem do aplicativo envia cada pacote UDP, incluindo os cabeçalhos IP através da conexão TCP que ele possui para o servidor dest.
- A parte dest do aplicativo, enquanto recebe dados no fluxo TCP, reconstrói o pacote UDP, incluindo os cabeçalhos IP, e os envia para a porta UDP no host local. O spoofing de IP deve funcionar bem no host local.
Claro, isso causaria alguma latência nos pacotes UDP, mas faria o trabalho.