Obrigado pelas sugestões. Acabou por estar relacionado com o funcionamento do IPSEC VPN em dispositivos iOS (Apple).
Em dispositivos iOS, ao ativar a VPN ipsec, a regra é adicionada automaticamente na tabela de rotas para enviar o tráfego IPSEC server / peer diretamente ao gateway para evitar loop (o pacote é criptografado novamente) e o restante do tráfego é enviado para ipsec primeiro túnel para obter criptografado e depois para o servidor ipsec.
E no meu caso, o servidor IPSEC e o servidor de destino (onde o tráfego é direcionado) são da mesma máquina (resolvidos para o mesmo endereço IP), portanto, quando o tráfego é enviado ao servidor de destino (porta XXXX), em vez de ficando criptografado no túnel IPSEC, ele foi enviado diretamente para o servidor devido à regra especial sem ser encapsulado no pacote ipsec. Então, quando esses pacotes chegaram no servidor, eles não foram reconhecidos como pacotes ipsec e esse foi o problema.
Como não consegui evitar que o cliente iOS enviasse o tráfego para a porta XXXX (embora sem o encapsulamento ipsec), tive que encontrar uma maneira de permitir que apenas esse dispositivo tivesse acesso à porta XXXX e não ao mundo inteiro. Então, o que acabei fazendo foi ter meu próprio script updesc ipsec no servidor ipsec que adiciona uma regra de cadeia INPUT dinamicamente para permitir o tráfego do endereço IP do cliente estabelecido para a porta XXXX na conexão vpn e remover a regra na desconexão da VPN. Desta forma, apenas os clientes conectados VPN terão acesso à porta XXXX.