Reihenfolge der von ifconfig zurückgegebenen IP-Adressen ändern?

Reihenfolge der von ifconfig zurückgegebenen IP-Adressen ändern?

Ich habe einen Ubuntu-Server mit mehreren angeschlossenen IP-Adressen. 127.0.0.1 wird von ifconfig als venet0 aufgeführt. Ich verwendeKochum den Server zu konfigurieren. Das Problem besteht darin, dass Chef 127.0.0.1 als IP-Adresse für den Server auflistet, anstatt einer der „echten“ IPs des Servers. (offensichtlich verwendet „ohai ipaddress“ die erste von ifconfig aufgelistete IP, um die IP des Servers zu bestimmen).

Wie kann ich die Reihenfolge ändern, sodass die Haupt-IP des Servers statt 127.0.0.1 zuerst aufgeführt wird?

Kann venet0 gelöscht und venet0:0 an seine Stelle „hochgestuft“ werden, da 127.0.0.1 bereits in der „lo“-Schnittstelle aufgeführt ist?

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

Antwort1

ohaiverwendet route, um die „Standardschnittstelle“ zu finden, indem Sie Ihr Standard-Gateway suchen (Ziel 0.0.0.0):

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

(AusLinie 21 ab sofort)

Das Problem ist, dass routesich nicht um die Aliase auf Schnittstellen kümmert ( venet0:0und venet0:1Aliase der venet0Schnittstelle sind), sondern davon ausgeht, dass alles, was über die Aliase gesendet wird, dasselbe Gerät verlässt, sodass es venet0als ausgehende Schnittstelle aufgeführt wird. Das ist logisch, wenn es sich bei der Schnittstelle um eine physische Schnittstelle handelt, aber wenn es sich um eine virtuelle Schnittstelle handelt, könnte es falsch sein (undIstin diesem Fall falsch). Aufgrund dieses Verhaltens ist es für ohai auch technisch falsch, sich bei der Ermittlung der zu verwendenden „richtigen“ IP-Adresse darauf zu verlassen, selbst wenn die Basis-IP-Adresse nicht 127.0.0.1 war.

Die ideale Lösung wäre, Ihre Netzwerkeinstellungen so zu konfigurieren, dass die nicht-aliasierte venet0-Schnittstelle Ihre „primäre IP“ ist. Wenn Sie venet0 aus irgendeinem Grund WIRKLICH als 127.0.0.1 benötigen (ich kenne die venet*-Schnittstellen nicht, daher weiß ich nicht, warum Sie es so haben oder was passieren würde, wenn venet0 die primäre IP-Adresse wäre und nicht 127.0.0.1), dann könnten Sie versuchen, die Datei network.rb zu finden ( /usr/lib/ruby/1.8/ohai/plugins/linux/network.rbinKlar) und bearbeiten Sie es so, dass es

network[:default_interface] = "venet0:0"

(oder welche Schnittstelle auch immer Sie als korrekte Adresse melden möchten). Ich weiß nicht, ob from() die neue Zeile entfernt, die der Befehl am Ende drucken würde, also muss dies möglicherweise so sein, "venet0:0\n"damit ohai richtig funktioniert. Beachten Sie, dass dies ersetzt wird, wenn Sie das Paket aktualisieren, in dem es enthalten war.

Ich persönlich bin neugierig, ob ip route list(aus dem iproutePaket) Ihre „Standard“-Route mit der Schnittstelle venet0 oder venet0:0 anzeigt. Ebenso netstat -r. Wenn eine der beiden Schnittstellen venet0:0 anzeigt, können Sie in einem Fehlerbericht an ohai vorschlagen, diese Befehle zuerst auszuprobieren und es, wenn sie nicht funktionieren, erneut mit dem „normalen“ Routenbefehl zu versuchen.

Antwort2

Ich kenne keine Möglichkeit, dies zu tun, es sei denn, Sie entfernen einfach Ihr Loopback-Gerät. Ich will ja nicht neugierig sein, aber warum ist die Reihenfolge wichtig?

Antwort3

Möglicherweise können Sie die Dinge ändern, indem Sie die Einträge in neu anordnen /etc/udev/rules.d/70-persistent-net.rules.

Wenn Sie dort keine Einträge haben, können Sie versuchen, eigene hinzuzufügen. Hier ist ein Beispiel:

# 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"

Antwort4

Es ist vielleicht reiner Zufall, aber für mich sieht es so aus, als ob es alphanumerisch nach Schnittstellennamen sortiert wird. Dasselbe sehe ich auf meinen Linux-Rechnern.

Ich weiß nichts über Chef, aber können Sie die Ausgabe von ifconfig durch ein Skript leiten, das sie in die von Ihnen gewünschte Reihenfolge bringt?

verwandte Informationen