La IP secundaria (eth0:0) actúa como la IP del servidor principal.

La IP secundaria (eth0:0) actúa como la IP del servidor principal.

Tengo un servidor CentOS, configurado con 4 IP consecutivas:
eth0 5.xx251
eth0:0 5.xx252
eth0:1 5.xx253
eth0:2 5.xx254

El problema es que todo el tráfico sale a Internet con eth0:0 (5.xx252) como IP de origen, en lugar de eth0.
# curl ifconfig.me
5.x.x.252

¿Cómo puedo solucionar este problema para que todo el tráfico salga a través de eth0, es decir, mi IP principal?

PD: Mi servidor es VPS y se ejecuta en un Xen dom0, este último configurado en red en modo enrutado.

¡Gracias de antemano!

Configuración del servidor

# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:x:x:x:x:AE  
          inet addr:5.x.x.251  Bcast:5.x.x.255  Mask:255.255.255.255
          inet6 addr: fe80::x:x:x:x/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:14675569 errors:0 dropped:0 overruns:0 frame:0
          TX packets:9463227 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:4122016502 (3.8 GiB)  TX bytes:25959110751 (24.1 GiB)
          Interrupt:23 

eth0:0    Link encap:Ethernet  HWaddr 00:x:x:x:x:AE   
          inet addr:5.x.x.252  Bcast:5.x.x.255  Mask:255.255.255.224
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:23 

eth0:1    Link encap:Ethernet  HWaddr 00:x:x:x:x:AE  
          inet addr:5.x.x.253  Bcast:5.x.x.255  Mask:255.255.255.224
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:23 

eth0:2    Link encap:Ethernet  HWaddr 00:x:x:x:x:AE  
          inet addr:5.x.x.254  Bcast:5.x.x.255  Mask:255.255.255.224
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:23  

# cat /etc/hosts
127.0.0.1       localhost.localdomain localhost
5.x.x.251       [fqdn] [hostname]

# cat ifcfg-eth0
DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
IPADDR=5.x.x.251
NETMASK=255.255.255.224
SCOPE="peer 5.x.y.82"

# cat ifcfg-eth0:0
DEVICE=eth0:0
BOOTPROTO=static
ONBOOT=yes
IPADDR=5.x.x.252
NETMASK=255.255.255.224

# cat route-eth0 
ADDRESS0=0.0.0.0
NETMASK0=0.0.0.0
GATEWAY0=5.x.y.82

# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
5.x.y.82        0.0.0.0         255.255.255.255 UH        0 0          0 eth0
5.x.x.224       0.0.0.0         255.255.255.224 U         0 0          0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth0
0.0.0.0         5.x.y.82        0.0.0.0         UG        0 0          0 eth0

Actualización 29 de agosto de 2012
Cuando ejecuto /etc/init.d/network restartme sale un RTNETLINK answers: File existserror, lo que me lleva a creer que hay otra ruta a otra red usando la puerta de enlace predeterminada, como se veaquí.

# /etc/init.d/network restart
Shutting down interface eth0:                              [  OK  ]
Shutting down loopback interface:                          [  OK  ]
Bringing up loopback interface:                            [  OK  ]
Bringing up interface eth0:  RTNETLINK answers: File exists
                                                           [  OK  ]

Lo seguro es que cuando lo borro por primera vez ip route del default via 5.x.y.82 dev eth0y luego lo vuelvo a agregar con la IP .251, todo funciona como se esperaba.
¿Hay alguna forma de agregar un route delcomando a los archivos ifcfg-eth0o a los route-eth0? Puedo ver que esto se puede hacer en pre-up ip addr del ...Debian (más información), pero ¿qué pasa con CentOS?

Respuesta1

Deeste documentoParece que al menos en CentOS 5 y sospecho que arriba puedes especificar tus rutas simplemente dando los argumentos correctos del comando iproute2. (ver la sección sobre IP Command Arguments Format)

Entonces, en lugar de escribir algo como:

# route-eth0 
ADDRESS0=0.0.0.0
NETMASK0=0.0.0.0
GATEWAY0=5.x.y.82

Podrías tener un archivo como este:

default via 5.x.y.82 dev eth0  src 5.x.x.251

Sin embargo, no tengo un cuadro derivado de Redhat/Redhat a mano para probar.

Respuesta2

Si las direcciones IP con alias no se van a utilizar como direcciones de origen para destinos no locales, no deben estar en la misma subred que el destino de su ruta predeterminada. Así que cambie sus máscaras de red 255.255.255.255y elimine sus direcciones de transmisión.

Respuesta3

Primero borre su puerta de enlace predeterminada 0.0.0.0

route del -net default

Luego declare eth0 predeterminado como dispositivo de puerta de enlace predeterminado

route add -net default gw 5.x.y.82 dev eth0

Deberia de funcionar. Verificar con

ip ro li

Para guardar eso, como regla, prueba esta cosa complicada:

Abra /etc/sysconfig/network-scripts/network-functions, ubique la función add_default_route ()y en esa función, después de la llamada para find_gateway_devagregar una línea con GATEWAYDEV="eth0".

Lo que sucede es que el network-functionsscript decide qué dispositivo será la puerta de enlace predeterminada. Examina la ruta a la IP de la puerta de enlace ip get route to GATEWAYy, usando sed, coincide con el dispositivo. Parece que eth0:0 llega a ser el indicado cada vez, por lo que al codificar GATEWAYDEV="eth0"se asegura de que eth0 siempre esté seleccionado como dispositivo de puerta de enlace.

En versiones anteriores de RH, simplemente podías editar /etc/sysconfig/static-routesy agregardefault via 5.x.y.82 dev eth0

¡Como último recurso /etc/rc.localsiempre es tu amigo!

Respuesta4

Como todos están en la misma subred, el kernel elegirá uno para usar. Puede verificar esto ejecutando

 ip addr list dev eth0

Tienes que hacer algo de magia con iptables para que funcione correctamente. Ver lo siguiente

Cuando se utiliza el alias de IP, ¿cómo determina el sistema operativo qué dirección IP se utilizará como fuente para las conexiones TCP/IP salientes?

información relacionada