Re-
Perso j'ai toujours installé serveur web et de données sur la même machine.
Ca évite ce genre d'incommunicabilité, mais c'est peut être une impératif d'organisation dans ta boite, alors pas le choix peut-être

alors...
"Lorsque l'application roule sur le même serveur application + MS SQL tout fonctionne très bien."
Si j'ai bien lu le problème survient quand tu teste avec un serveur web sur une machine et un serveur de base de données sur une autre machine, non ?
Donc à travers le routeur, tu as bien une seule adresse distante commune aux PC routés, mais chacun d'eux n'est accessible qu'à travers des ports différents connus du routeur) mais bien 2 adresses locales distinctes sur ton réseau local. Et ton serveur web (sur la machine d'adresse IP A) doit savoir localiser le serveur de BDD ( sur la machine d'adresse IP B).
Ex:
Si tu as 1 serveur apache sur ton réseau sur une machine A et un serveur IIS sur une machine B lorsque l'utilisateur distant tape dans son navigateur l'adresse de ton domaine "trucchouette.com" il pourra par exemple accéder directement au serveur A (si port 80 par défaut sur ce serveur), par contre
il devra indiquer "trucchouette.com:82" pour accéder au serveur B (si B est paramétré pour utiliser le port 82 pour communiquer)...
Alors que pour un accès local l'adresse IP locale d'un des serveurs suffit,
Le port devient nécessaire (si différent de 80) pour les accès extérieurs...