Wählen Sie die Standardnetzwerkschnittstelle


11

Ich habe einen Server mit 2 Schnittstellen. eth0 ist 100 mal schneller als eth1. Obwohl aus irgendeinem Grund bei jedem Neustart die Standardschnittstelle zufällig ausgewählt wird. Um die Sache noch ärgerlicher zu machen, verwenden beide dasselbe Gateway, sodass die Auswahl des Standard-Gateways nicht funktioniert. Wie wählt Linux die Standardschnittstelle aus und wie wähle ich die Standardschnittstelle aus?

Hier ist meine route -nHilfe, um die Situation ein wenig zu erklären.

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
173.246.100.0   0.0.0.0         255.255.252.0   U     0      0        0 eth1
173.246.100.0   0.0.0.0         255.255.252.0   U     0      0        0 eth0
0.0.0.0         173.246.103.254 0.0.0.0         UG    0      0        0 eth1
0.0.0.0         173.246.103.254 0.0.0.0         UG    100    0        0 eth0

PS. Dies ist ein VPS, daher ist mein Provider möglicherweise auch irgendwo schuld. Grund für die zweite Schnittstelle ist eine andere IP für DNS, da nur DNS ausgeführt wird, was sehr langsam ist.

EDIT: Dies ist ein Ubuntu 10.04 Server


Interessant, da dies in der ifconfig-Manpage im Abschnitt über "Metrik" angegeben ist: Dieser Parameter legt die Schnittstellenmetrik fest. Es ist nicht unter GNU / Linux verfügbar.
wzzrd

1
Ich bin froh, dass du das herausgefunden hast. Wenn niemand anderes darauf geantwortet hat und Ihre Bearbeitung die Lösung darstellt, sollten Sie dies unten in einem eigenen Antwortabschnitt hinzufügen und dann als richtige Antwort akzeptieren (nach dem Timeout). Bitte geben Sie keine Antworten in den Fragenbereich ein.
Caleb

@Caleb: Ich war noch in der Auszeit, ich habe meine Antwort
user163365

Antworten:


15

Verwenden Sie ifmetricdiese Option , um den Metrikwert beider Schnittstellen zu ändern. Wenn Sie eth1 über eth0 erhöhen, wird eth0 für alle Verbindungen verwendet. Löst das Problem vollständig.


2
Ändert dies das Standard-Gateway sofort oder nach dem Neustart?
CMCDragonkai

2

Sie sollten die zweite, langsame Schnittstelle deaktivieren und dann die sekundäre IP zur primären hinzufügen. Bearbeiten Sie dazu Ihre Schnittstellendatei mit:

sudo vi /etc/network/interfaces

Sobald Sie auf die Netzwerkdatei zugegriffen haben, wird Ihnen wahrscheinlich Folgendes angezeigt:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
    address 173.246.100.1
    network 173.246.100.0
    netmask 255.255.252.0
    broadcast 173.246.100.255
    gateway 173.246.103.254

auto eth1
iface eth0 inet static
    address 173.246.100.2
    network 173.246.100.0
    netmask 255.255.252.0
    broadcast 173.246.100.255
    gateway 173.246.103.254

Konfigurieren Sie es so, dass es so aussieht:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
    address 173.246.100.1
    network 173.246.100.0
    netmask 255.255.252.0
    broadcast 173.246.100.255
    gateway 173.246.103.254

iface eth0:1 inet static
    address 173.246.100.2
    network 173.246.100.0
    netmask 255.255.252.0

Dadurch werden beide IPs der ersten Netzwerkkarte zugewiesen. Sobald Sie dies getan haben, speichern Sie die Datei und führen Sie Folgendes aus:

/etc/init.d/networking restart

Und die Änderungen werden übernommen.

<- EDIT ->

Nach meiner Erfahrung sollte es keine Rolle spielen, wenn es sich auf demselben virtuellen Switch befindet, obwohl gehostete Umgebungen ihn möglicherweise weiter sperren. Es kann jedoch einen Versuch wert sein. Wenn dies nicht funktioniert, können Sie Ihr Hosting-Unternehmen bitten, die virtuelle Schnittstelle auf eine leistungsfähigere zu ändern.

<- EDIT ->

Wenn Ihre primäre IP-Adresse derzeit kein DNS bereitstellt, können Sie sie dann auch für DNS verwenden. Sie können mehrere verschiedene Dienste auf einer IP hosten, da diese unterschiedliche Ports verwenden.


0

Sie scheinen zwei Schnittstellen im selben Subnetz zu haben, was etwas seltsam ist. Linux (vorausgesetzt, Sie verwenden ein Red Hat-Derivat) wählt das Standard-Gateway aus, indem es den GATEWAY-Wert von liest /etc/sysconfig/network. Diese Variable enthält jedoch eine IP-Adresse als Gateway-ID und keinen Schnittstellennamen. In Ihrem Fall kann die eine IP-Adresse das Gateway für beide Schnittstellen sein, was (glaube ich) zu einer Art Race-Bedingung führt.

Ich bin mir immer noch nicht sicher, warum Sie die zweite Schnittstelle benötigen. Was passiert, wenn Sie die langsame Oberfläche vollständig herunterfahren?


Zunächst verwende ich Ubuntu, aber da dies kein Gateway-Problem ist, sollte es keine Rolle spielen. Zweitens, wenn ich die zweite Schnittstelle herunterfahre, verwendet der Verkehr die erste Schnittstelle, aber ich verliere die zweite IP, was der Grund ist, warum ich die zweite Schnittstelle überhaupt habe.
user163365

1
Sie können problemlos zwei Adressen auf einer einzigen Schnittstelle mit einem Alias ​​konfigurieren. Der gesamte Datenverkehr über die schnelle Schnittstelle, zwei IPs konfiguriert, Problem gelöst, nein? Und wenn man bedenkt, wie Linux die Standardschnittstelle auswählt und wie ich die Standardschnittstelle auswähle, wie ist dies kein Gateway-Problem?
wzzrd

1
Funktioniert nicht, da es sich um virtuelle Schnittstellen handelt, die wahrscheinlich so konfiguriert sind, dass nur die Daten weitergeleitet werden, die auf der angegebenen IP-Adresse eingehen. Bei diesem Problem handelt es sich auch um die Schnittstelle und nicht um das Gateway, da das Gateway in beiden Schnittstellen gleich ist.
user163365

2
Eingehende Anfragen kommen möglicherweise auf einer Schnittstelle an, aber ausgehende Daten werden ohnehin bereits über eine zufällige Schnittstelle gesendet. Probieren Sie den Rat aus, löschen Sie eine der Schnittstellen, setzen Sie die andere IP mit einem Alias ​​auf die andere und prüfen Sie, ob sie funktioniert. Wenn sie, wie Sie sagen, virtuell sind, warum dann der Geschwindigkeitsunterschied und warum der Versuch der Trennung? Etwas geliert nicht.
EightBitTony
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.