J'ai un serveur exécutant Ubuntu Server avec quatre adresses IP aliasées sur une seule carte réseau.
eth0 192.168.1.100
eth0:0 192.168.1.101
eth0:1 192.168.1.102
eth0:2 192.168.1.103
(En utilisant 192.168.xx à titre d'exemple, supposez que ceux-ci sont NAT-ed pour une plage d'adresses IP publiques)
Un de nos clients publie leur inventaire via FTP, nous nous connectons donc tous les soirs pour télécharger un fichier volumineux depuis leur serveur. Leur pare-feu attend que notre connexion FTP (passive) soit établie à partir de 192.168.1.100.
Étant donné que mon serveur possède logiquement quatre adresses IP sur une seule carte, comment le système d'exploitation détermine-t-il quelle adresse IP est utilisée comme source pour les connexions TCP / IP sortantes?
Disons que je ssh sur mon serveur sur 192.168.1.101 et que j'exécute FTP de manière interactive. La connexion TCP / IP sortante utilisera-t-elle 192.168.1.101 car le système d'exploitation sait que c'est l'interface sur laquelle mon shell est connecté?
Que faire si la tâche FTP est exécutée de manière non interactive via un travail cron où il n'y a pas de shell?
Comme vous pouvez probablement le constater, cela me rend assez confus, alors j'espère que mes questions ont au moins un sens.
Éditer
Pour clarifier pourquoi je demande - je n'ai apporté aucune modification à la table de routage et elle répertorie en fait «eth0» comme IFace pour les routes 0.0.0.0. Cependant, toutes les indications indiquent qu'il utilise réellement eth0: 0 comme source.
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
0.0.0.0 192.168.1.1 0.0.0.0 UG 100 0 0 eth0
Je peux jouer avec la table de routage ou demander à notre client de modifier ses règles de pare-feu pour obtenir le comportement dont j'ai besoin, mais j'essaie de comprendre comment cela fonctionne pour savoir s'il y a un bogue dans le système d'exploitation ou tout simplement ma compréhension naïve de la façon dont toutes les pièces s'assemblent.
Merci
Je vois dans votre exemple que toutes les ips sont trop proches pour ne pas être dans le même réseau
êtes-vous sûr que vous êtes en fait multihébergement et que vous n'avez pas simplement 4 alias IP?
si ce dernier est le cas, vous pouvez définir l'IP source sur un itinéraire avec quelque chose de similaire à celui-ci
voir les interfaces homme sur la façon de le rendre persistant entre les redémarrages
la source
Il utilise ce que la passerelle par défaut est dans la table de routage, sauf s'il existe une route spécifique lui indiquant d'en utiliser une autre:
route -n
EDIT: J'ai lu votre question trop rapidement, il semble ...
Étant donné que vous utilisez le mode passif et que le client initiera toujours la connexion, je pense que le champ IP src dans l'en-tête IP apparaîtra toujours comme l'adresse IP à laquelle le client s'est connecté. Si c'était le mode actif, le serveur initiait la connexion, je pense que ce serait toujours l'adresse IP «principale». Si vos adresses se trouvent dans le même sous-réseau, Linux rendra la première adresse que vous avez ajoutée «principale» et les autres secondaires.
Je ne suis pas tout à fait sûr cependant, je lancerais tcpdump -n et verrais ce qu'il voit comme l'IP src.
EDIT2: D'accord, j'ai écrit ce qui précède du point de vue que vous exécutiez le serveur, donc puisque vous êtes le client et que vous établissez la connexion, je pense que cela semblera toujours provenir de l'adresse IP principale, mais encore une fois, essayez-le et voyez avec tcpdump.
la source
À moins que votre travail FTP n'ait un moyen de spécifier l'interface à utiliser pour les connexions, je crois qu'il s'agit par défaut de la première interface physique sur le sous-réseau pertinent (eth0 dans ce cas). Si vous aviez un serveur avec deux cartes réseau sur des sous-réseaux différents, cela déterminerait quelle interface utiliser en fonction de la table de routage.
Comme il n'y a qu'une seule interface physique sur le système (eth0) et quatre virtuels / alias (eth0: 0 à eth0: 2) sur le même sous-réseau, le trafic sortant utilisera l'adresse IP eth0 comme source sauf si l'application est suffisamment intelligente pour déclarer une interface sortante.
la source
nc -s <ip of eth0:2>
ou quoi que ce soit montre toujours l'adresse source est en fait l'ip de eth0: 0, même si netcat l'a faitbind(2)
auparavantconnect(2)
. Il semble donc que les alias ne fonctionnent pas pour donner à une machine la possibilité d'établir des connexions à partir de plusieurs adresses source.Vous pouvez voir quel périphérique et quelle adresse IP src seront utilisés par la commande ip route get comme ci-dessous:
Je n'ai pas essayé cela dans un environnement aliasé, mais j'espère que cela vous aidera.
la source
Lors de l'établissement d'une connexion sortante, votre serveur cherchera dans sa table de routage pour déterminer laquelle de vos quatre interfaces utiliser; vos connexions TCP auront une IP source de votre interface de sortie.
Vous donnera la sortie de votre table de routage; recherchez les entrées spécifiques correspondant à l'adresse IP du client auquel vous essayez de vous connecter. S'il n'en existe pas, vous utiliserez une route par défaut (0.0.0.0, masque 0.0.0.0). Si vous avez plusieurs itinéraires par défaut, celui qui a le coût le plus bas sera celui utilisé.
la source