¿Cambiar el orden de las direcciones IP devueltas por ifconfig?

¿Cambiar el orden de las direcciones IP devueltas por ifconfig?

Tengo un servidor Ubuntu con varias direcciones IP adjuntas. 127.0.0.1 aparece como venet0 en ifconfig. Estoy usandoCocineropara configurar el servidor. El problema es que chef incluye 127.0.0.1 como dirección IP para el servidor en lugar de una de las IP "reales" del servidor. (la aparente "ohai ipaddress" usa la primera IP enumerada por ifconfig para determinar la IP del servidor).

¿Cómo puedo cambiar el orden para que la IP principal del servidor aparezca primero en lugar de 127.0.0.1?

¿Se puede eliminar venet0 y "promocionar" venet0:0 para que ocupe su lugar ya que 127.0.0.1 ya aparece en la interfaz "lo"?

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:334 errors:0 dropped:0 overruns:0 frame:0
          TX packets:334 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:16700 (16.7 KB)  TX bytes:16700 (16.7 KB)

venet0    Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet addr:127.0.0.1  P-t-P:127.0.0.1  Bcast:0.0.0.0  Mask:255.255.255.255
          UP BROADCAST POINTOPOINT RUNNING NOARP  MTU:1500  Metric:1
          RX packets:7622207 errors:0 dropped:0 overruns:0 frame:0
          TX packets:8183436 errors:0 dropped:1 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:2102750761 (2.1 GB)  TX bytes:2795213667 (2.7 GB)

venet0:0  Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet addr:XXX.XXX.XXX.XX1  P-t-P:XXX.XXX.XXX.XX1  Bcast:0.0.0.0  Mask:255.255.255.255
          UP BROADCAST POINTOPOINT RUNNING NOARP  MTU:1500  Metric:1

venet0:1  Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet addr:XXX.XXX.XXX.XX2  P-t-P:XXX.XXX.XXX.XX2  Bcast:0.0.0.0  Mask:255.255.255.255
          UP BROADCAST POINTOPOINT RUNNING NOARP  MTU:1500  Metric:1

ruta -n

route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.0.2.1       0.0.0.0         255.255.255.255 UH    0      0        0 venet0
0.0.0.0         192.0.2.1       0.0.0.0         UG    0      0        0 venet0

Respuesta1

ohaiutiliza routepara encontrar la "interfaz predeterminada" buscando su puerta de enlace predeterminada (destino 0.0.0.0):

network[:default_interface] = from("route -n \| grep -m 1 ^0.0.0.0 \| awk \'{print \$8\}\'")

(Delínea 21 a partir de ahora)

El problema es que routeno le importan los alias en las interfaces ( venet0:0y venet0:1son alias de la venet0interfaz), se supone que todo lo enviado a través de los alias sale al mismo dispositivo, por lo que aparece venet0como la interfaz saliente. Esto es lógico cuando la interfaz es física, pero cuando es una interfaz virtual podría estar mal (yesincorrecto en este caso). Debido a este comportamiento, también es técnicamente incorrecto que ohai confíe en él para determinar la dirección IP "correcta" a usar, incluso si la dirección IP base no fuera 127.0.0.1.

La solución ideal será reconfigurar los ajustes de su red para que la interfaz venet0 sin alias sea su "IP principal". Si REALMENTE necesitas que venet0 sea 127.0.0.1 por alguna razón (no estoy familiarizado con las interfaces venet*, así que no sé por qué lo tienes de esta manera o qué pasaría si venet0 fuera la dirección IP principal en lugar de 127.0 .0.1), entonces podrías intentar encontrar ese archivo network.rb ( /usr/lib/ruby/1.8/ohai/plugins/linux/network.rbenLúcido) y editarlo para leer

network[:default_interface] = "venet0:0"

(o cualquier interfaz que desee que informe como la dirección correcta). No sé si from() elimina la nueva línea que el comando imprimiría al final, por lo que podría ser necesario "venet0:0\n"para que ohai funcione correctamente. Tenga en cuenta que esto será reemplazado cuando actualice el paquete en el que se encontraba.

Personalmente tengo curiosidad por saber si ip route list(desde el iproutepaquete) muestra su ruta "predeterminada" usando la interfaz venet0 o la interfaz venet0:0. Asimismo, netstat -r. Si alguno muestra venet0:0, entonces podría sugerir en un informe de error a ohai que prueben esos comandos primero y, si no funcionan, intenten nuevamente con el comando de ruta "normal".

Respuesta2

No conozco una manera de hacer esto, a menos que simplemente retires el dispositivo de bucle invertido. No quiero ser entrometido, pero ¿por qué importa en qué orden estén?

Respuesta3

Es posible que puedas cambiar las cosas reorganizando las entradas en /etc/udev/rules.d/70-persistent-net.rules.

Si no tiene ninguna entrada allí, puede intentar agregar la suya propia. Esto es un ejemplo:

# PCI device 0xXXXX:0xXXXX (XXXX)
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="00:00:00:00:00:00", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

Respuesta4

Puede que no sea más que una coincidencia, pero me parece que está ordenado alfanuméricamente por nombre de interfaz. Veo lo mismo en mis cajas de Linux.

No sé nada sobre Chef, pero ¿puedes canalizar la salida de ifconfig a través de un script que la reorganice en el orden que desees?

información relacionada