%20act%C3%BAa%20como%20la%20IP%20del%20servidor%20principal..png)
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 restart
me sale un RTNETLINK answers: File exists
error, 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 eth0
y luego lo vuelvo a agregar con la IP .251, todo funciona como se esperaba.
¿Hay alguna forma de agregar un route del
comando a los archivos ifcfg-eth0
o 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.255
y 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_dev
agregar una línea con GATEWAYDEV="eth0"
.
Lo que sucede es que el network-functions
script decide qué dispositivo será la puerta de enlace predeterminada. Examina la ruta a la IP de la puerta de enlace ip get route to GATEWAY
y, 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-routes
y agregardefault via 5.x.y.82 dev eth0
¡Como último recurso /etc/rc.local
siempre 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