Si je définis un IP aliasing, je devrais pourvoir faire
tourner deux serveurs sur le même port, mais chacun sur
une IP différente, non ?
En effet, il suffit que le serveur fasse un bind sur l'IP spécifique.
Petite explication théorique sur le sujet pour expliquer un truc important
à savoir.
Quand un serveur se met à l'écoute sur un port précis, il fait un bind().
Jusque là c'est simple. En général, il fait un bind sur l'adresse IP
0.0.0.0 (IN_ADDR_ANY) parfois noté *.
Dans le cas comme ici pour les interfaces multiples, on peut faire un bind
sur une IP précise. Par exemple, chez moi, le routeur vers internet a tous
ses services en bind sur 127.0.0.1 et 10.x.x.x. Ainsi, personne ne voit de
service à l'écoute sur internet.
Jusque là, c'est bien.
La différence maintenant entre Linux, Windows et certains Unix, c'est quand
tu fais un bind spécifique sur port qui a déjà un bind général.
Genre, mon programme "bofklet" écoute le port 1234 et fait naturellement un
bind *.1234.
Un utilisateur mal intentionné lance netcat -l -p1234 -s10.11.12.13 pour se
mettre à l'écoute sur 10.11.12.13.1234.
Sur Linux, il se fait jeter avec "address already in use".
Sur Windows NT (j'ai pas essayé 2000), AIX et plein d'autres, le netcat est
à l'écoute ET PRIORITAIRE ! La prochaine connexion sur le port 1234 de
cette machine sera sur le netcat !! Alors, imaginez un programme qui relaye
la connexion au port localhost.1234 mais sauve au passage les données...
Bien sûr, un utilisateur ne peut "rebinder" que les ports au-delà de 1024
sans les droits root mais bon, c'est quand même bon à savoir... Pensez
aussi aux risques pour un firewall qui laisse passer un protocole
applicatif qui peut se faire rediriger innocemment sur le port telnet...
(nc -l ne prendra que la 1e connexion, les autres iront normalement.
Pratique...)