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
ohai
verwendet 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 route
sich nicht um die Aliase auf Schnittstellen kümmert ( venet0:0
und venet0:1
Aliase der venet0
Schnittstelle sind), sondern davon ausgeht, dass alles, was über die Aliase gesendet wird, dasselbe Gerät verlässt, sodass es venet0
als 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.rb
inKlar) 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 iproute
Paket) 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?