Altera a ordem dos endereços IP retornados pelo ifconfig?

1

Eu tenho um servidor Ubuntu com vários endereços IP anexados a ele. 127.0.0.1 está listado como venet0 por ifconfig. Estou usando o Chef para configurar o servidor. O problema é que o chef está listando 127.0.0.1 como o endereço IP para o servidor, em vez de um dos IPs "reais" do servidor. (aparente "ohai ipaddress" usa o primeiro IP listado pelo ifconfig para determinar o IP do servidor).

Como posso alterar a ordem para que o IP principal dos servidores seja listado primeiro em vez de 127.0.0.1?

O venet0 pode ser deletado e o venet0: 0 ser "promovido" para ocupar o seu lugar, já que o 127.0.0.1 já está listado na interface "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

route -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
    
por erikcw 20.12.2010 / 23:23

5 respostas

3

ohai usa route para encontrar a "interface padrão" encontrando seu gateway padrão (destino 0.0.0.0):

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

(De linha 21 a partir de agora )

O problema é que route não se importa com os aliases nas interfaces ( venet0:0 e venet0:1 são aliases da interface venet0 ), assume que qualquer coisa enviada pelos aliases sai toda do mesmo dispositivo, por isso lista venet0 como a interface de saída. Isso é lógico quando a interface é uma interface física, mas quando é uma interface virtual pode estar errada (e está errada neste caso). Devido a esse comportamento, também é tecnicamente errado ohai confiar nele para determinar o endereço IP "correto" a ser usado, mesmo se o endereço IP de base não for 127.0.0.1.

A solução ideal será reconfigurar suas configurações de rede para que a interface venet0 sem serrilhado seja seu "IP primário". Se você REALMENTE precisar que o venet0 seja 127.0.0.1 por alguma razão (eu não estou familiarizado com as interfaces venet * então eu não sei porque você tem isso dessa forma ou o que aconteceria se venet0 fosse o endereço IP primário ao invés de 127.0 .0.1), então você pode tentar encontrar esse arquivo network.rb ( /usr/lib/ruby/1.8/ohai/plugins/linux/network.rb em Lucid ) e editá-lo para ler

network[:default_interface] = "venet0:0"

(ou qualquer interface que você queira denunciar como o endereço correto). Não sei se from () retira a nova linha que o comando imprimiria no final, por isso talvez seja necessário "venet0:0\n" para ohai funcionar corretamente. Observe que isso será substituído quando você atualizar o pacote em que estava.

Estou pessoalmente curioso para saber se ip route list (do pacote iproute ) mostra sua rota "padrão" usando a interface venet0 ou a interface venet0: 0. Da mesma forma, netstat -r . Se qualquer um mostrar venet0: 0, então você pode sugerir em um relatório de bug para ohai que eles experimentem esses comandos primeiro e, se não funcionarem, tente novamente com o comando de rota "normal".

    
por 21.12.2010 / 06:32
0

Não conheço uma maneira de fazer isso, a menos que você apenas remova seu dispositivo de loopback. Não ser intrometido, mas por que importa em que ordem eles estão?

    
por 20.12.2010 / 23:28
0

Você pode alterar as coisas reorganizando as entradas em /etc/udev/rules.d/70-persistent-net.rules .

Se você não tiver entradas, tente adicionar as suas próprias. Este é um exemplo:

# 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"
    
por 21.12.2010 / 00:11
0

O que eu acho bizarro e problemático é que você tem o mesmo endereço IP definido tanto no seu lo quanto na sua interface virtual venet0.

Meu único palpite a respeito de por que isso seria configurado desta forma é que você não conseguiu abrir a interface sem um endereço, embora isso possa ter sido feito com um IP de 0.0.0.0.

Remover o endereço 127. no venet0 provavelmente resolveria esse problema, assim como corrigiria um potencial buraco de segurança / desempenho (o chef certamente é inteligente o suficiente para não pegar o endereço de loopback).

    
por 21.12.2010 / 02:28
0

Pode não ser nada além de coincidência, mas parece que está sendo ordenada alfanumericamente pelo nome da interface. Eu vejo a mesma coisa nas minhas caixas de Linux.

Eu não sei nada sobre o Chef, mas você pode canalizar a saída do ifconfig através de um script que irá reorganizá-lo na ordem que você quiser?

    
por 21.12.2010 / 02:39