Tengo un servidor que ejecuta Ubuntu Server con cuatro direcciones IP alias en una sola NIC.
eth0 192.168.1.100
eth0:0 192.168.1.101
eth0:1 192.168.1.102
eth0:2 192.168.1.103
(Usando 192.168.xx por ejemplo, suponga que estos tienen NAT-ed en un rango de direcciones IP públicas)
Uno de nuestros clientes publica su inventario a través de FTP, por lo que iniciamos sesión todas las noches para descargar un archivo grande de su servidor. Su firewall espera que nuestra conexión FTP (pasiva) se realice desde 192.168.1.100.
Dado que mi servidor lógicamente tiene cuatro direcciones IP en un solo adaptador, ¿cómo determina el sistema operativo qué dirección IP se utiliza como fuente para las conexiones TCP / IP salientes?
Digamos que ssh en mi servidor en 192.168.1.101 y ejecuto FTP de forma interactiva. ¿La conexión TCP / IP saliente usará 192.168.1.101 porque el sistema operativo sabe que esa es la interfaz a través de la cual está conectado mi shell?
¿Qué sucede si la tarea FTP se ejecuta de forma no interactiva a través de un trabajo cron donde no hay shell?
Como probablemente pueda notar, esto me tiene bastante confundido, así que espero que mis preguntas al menos tengan sentido.
Editar
Para aclarar por qué pregunto, no he realizado ningún cambio en la tabla de enrutamiento y en realidad enumera 'eth0' como IFace para las rutas 0.0.0.0. Sin embargo, todo indica que en realidad está usando eth0: 0 como fuente.
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
Puedo jugar con la tabla de enrutamiento o hacer que nuestro cliente cambie sus reglas de firewall para obtener el comportamiento que necesito, pero estoy tratando de obtener una pequeña idea de cómo funciona esto para saber si hay un error en el sistema operativo o solo mi comprensión ingenua de cómo encajan todas las piezas.
Gracias
Veo en su ejemplo que todos los ips están demasiado cerca para no estar en la misma red
¿estás seguro de que en realidad eres multihoming y no solo tienes 4 alias de IP?
si este es el caso, puede configurar la fuente ip en una ruta con algo similar a esto
vea las interfaces de hombre sobre cómo hacerlo persistente entre reinicios
fuente
Utiliza cualquier puerta de enlace predeterminada en la tabla de enrutamiento, a menos que haya una ruta específica que le indique que use otra:
route -n
EDITAR: leí tu pregunta demasiado rápido, parece ...
Dado que está utilizando el modo pasivo y el cliente siempre iniciará la conexión, creo que el campo src ip en el encabezado de IP siempre aparecerá como la IP a la que se conectó el cliente. Si estuviera en modo activo, el servidor estaba iniciando la conexión, creo que siempre sería la IP 'primaria'. Si sus direcciones están en la misma subred, Linux hará que la primera dirección que agregue sea 'Primaria' y las demás secundarias.
Sin embargo, no estoy completamente seguro, ejecutaría tcpdump -n y vería lo que ve como la IP src.
EDIT2: De acuerdo, escribí lo anterior desde el punto de vista de que estaba ejecutando el servidor, por lo que dado que usted es el cliente e inicia la conexión, creo que siempre parecerá provenir de la dirección IP principal, pero nuevamente, pruébelo y vea con tcpdump.
fuente
A menos que su trabajo de FTP tenga una forma de especificar la interfaz que se utilizará para las conexiones, creo que por defecto es la primera interfaz física en la subred relevante (eth0 en este caso). Si tuviera un servidor con dos NIC en subredes diferentes, averiguaría qué interfaz utilizar según la tabla de enrutamiento.
Como solo hay una única interfaz física en el sistema (eth0) y cuatro virtuales / alias (eth0: 0 a eth0: 2) en la misma subred, el tráfico saliente usará la dirección IP eth0 como fuente a menos que la aplicación sea lo suficientemente inteligente para declarar una interfaz de salida.
fuente
nc -s <ip of eth0:2>
o lo que sea que siempre muestre que la dirección de origen es en realidad la ip de eth0: 0, aunque netcat lo hizobind(2)
antesconnect(2)
. Por lo tanto, parece que los alias no funcionan para dar a una máquina la capacidad de hacer conexiones desde múltiples direcciones de origen.Puede ver qué dispositivo y dirección IP src serán utilizados por el comando ip route get como se muestra a continuación:
No he probado esto en un entorno con alias, pero espero que esto ayude.
fuente
Al establecer una conexión saliente, su servidor buscará en su tabla de enrutamiento para determinar cuál de sus cuatro interfaces usar; sus conexiones TCP tendrán una fuente IP de su interfaz de salida.
Le dará el resultado de su tabla de enrutamiento; busque cualquier entrada específica que coincida con la IP del cliente al que está intentando conectarse. Si no existe ninguno, utilizará una ruta predeterminada (0.0.0.0, máscara 0.0.0.0). Si tiene varias rutas predeterminadas, la que tenga el costo más bajo será la utilizada.
fuente