In meinem System habe ich eth0 (das verbunden sein kann oder nicht) und ein Modem auf ppp0 (das immer hoch oder runter sein kann). In dem Fall, in dem beide Schnittstellen aktiv sind und ppp0 die Standardroute ist, möchte ich einen Weg finden, um die tatsächliche Gateway-IP-Adresse von eth0 zu bestimmen. Ich habe „netstat -rn“ versucht, aber in dieser Konfiguration lautet die Ausgabe:
Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface xx.xx.xxx.xxx 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0 192.168.98.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo 0.0.0.0 0.0.0.0 0.0.0.0 U 0 0 0 ppp0
Wie bestimme ich die Gateway-Adresse von eth0? Im obigen Fall lautet die tatsächliche Gateway-Adresse 192.168.98.1.
Kommentare
- Was ist “ Die Gateway-Adresse von eth0 ‚ “ soll sein?
- Schnittstellen don ‚ habe keine Gateway-Adressen, Netblocks schon. Eine Gateway-Adresse teilt dem Kernel mit, wohin Pakete weitergeleitet werden sollen, die für einen Host in einem Netzwerk bestimmt sind. Wenn die Adresse einer bestimmten Schnittstelle zugeordnet ist, wird diese Schnittstelle verwendet, die Adresse ist jedoch unabhängig von der Schnittstelle.
- In meiner Anwendung soll ich eth0 zum Standard-Gateway machen, wenn es über Konnektivität verfügt. Um die Konnektivität zu überprüfen, mache ich eine temporäre Route zu meinem bekanntermaßen guten Server. Dazu muss ich jedoch die Gateway-Adresse von eth0 ‚ kennen. Wie kann ich das feststellen?
- Überprüfen Sie Folgendes: stackoverflow.com/a/15973156/1422630
Antwort
Angenommen, eth0
ist die DHCP-Client-Schnittstelle.
Eine Option besteht darin, die zu überprüfen DHCP-Client-Lease-Dateien dhcpd.leases
Ort und Name hängen vom System ab. Auf einigen Fedora-Systemen sind die Dateien unter /var/lib/dhclient/
Lease-Dateien, wobei die interessante Zeichenfolge wie folgt lautet:
option routers 192.168.1.1;
Eine weitere Option, die bei einer Funtoo-Box für mich funktioniert hat: dhcpcd -U eth0
druckt eine schöne Tabelle, die zur Eingabe in Skripten bereit ist
broadcast_address=192.168.1.255 dhcp_lease_time=86400 dhcp_message_type=5 dhcp_server_identifier=192.168.1.1 domain_name_servers="192.168.1.1 192.168.1.101" ip_address=192.168.1.101 network_number=192.168.1.0 routers=192.168.1.1 subnet_cidr=24 subnet_mask=255.255.255.0
Es gibt andere Optionen wie dhcping
, dhclient -n
, laut Google und Manpages, aber sie schlagen auf meinen Boxen fehl. Möglicherweise funktioniert dies jedoch für Sie.
Antwort
Ihr Fehler besteht darin, dass Sie die Informationen in der Netstat-Ausgabe der Schnittstelle zuordnen Zieladressen können Gateways zugeordnet sein. Wenn Sie Ihr Netzwerk konfigurieren, ordnen Sie Schnittstellen und Gateways Zielgruppenadressen zu. Die Frage, die Sie sich stellen müssen, lautet also „Was ist das Gateway für Ziele in“ 192.168.98 / 24? „Ich wette, es soll nicht eines geben, das Geräte in th at range sind entweder überbrückt oder direkt mit diesem Ethernet verbunden.
Beachten Sie, dass Ihre Standardroute über ppp0
erfolgt (die letzte Zeile ist eine Platzhalterroute, die Maske ist Alle Nullen, damit tatsächlich keine Bits verglichen werden, werden Pakete für diese Adressen über ppp0
) gesendet. Pakete für jedes Ziel, das nicht in 127.xx.xx.xx
oder 192.168.98.xx
enthalten ist, stimmen schließlich mit der Platzhaltermaske überein und werden über ppp0
. Da es sich um ein Punkt-zu-Punkt-Protokoll handelt, wird jedes auf dieser Schnittstelle gesendete Paket an das einzige Gerät gesendet, das direkt über diese Verbindung adressierbar ist, das am anderen Ende. Es muss kein Gateway dafür angegeben werden Da jedes Paket über diese Schnittstelle gesendet wird, wird es über dieses Gerät gesendet, unabhängig davon, ob sein Internetziel dieses Gerät ist oder nicht.
Jetzt: Wenn Sie einen Router haben, auf den über eth0
Wenn Sie verwenden, wenn Sie können, hat dieser Router mit ziemlicher Sicherheit eine IP-Adresse im Bereich 192.168.98.xx, mindestens so wahrscheinlich wie nicht 192.168.98.1, und wenn dieser Router mit Strom versorgt wird Nach oben und tatsächlich mit dem Internet verbunden möchten Sie, dass Ihre Standardroute, die für alles, was nicht direkt mit einem lokalen Netzwerk verbunden ist, default via 192.168.98.1
lautet neuerer (dieser „relative Begriff“ gibt es schon sehr lange) ip
Befehl, versuchen Sie ip route
und Wenn dies zu einer Ausgabe führt, versuchen Sie . Andernfalls versuchen Sie es mit route help
.
Ihre eth0
-Schnittstelle verfügt also einfach nicht über „t “ eine Gateway-Adresse. Möglicherweise sind ein anderes Gerät oder mehrere Geräte mit diesem Ethernet verbunden, die als Gateway dienen möchten. Sie sagen, Ihr Netzwerk hat eine, die auf die (rein konventionelle) . Kein Gesetz sagt, dass es diese Adresse haben muss, und kein Gesetz sagt, dass es für seine Anwesenheit werben muss. Es gibt einige gängige Methoden, von denen die häufigste darin besteht, dass Boxen, auf denen Routing-Software ausgeführt wird, auch DHCP-Server ausführen und jedem, der DHCP spricht, auf diese Weise davon erzählen. Die Antwort von MolbOrg gibt einen ziemlich typischen Eindruck vom Setup, aber alles, was irgendjemand an dieser Stelle vorschlagen kann, wird nur mehr oder weniger wahrscheinlich zu Ihrer speziellen passen Netzwerk.
Kommentare
- In meinem Fall endet das Gateway mit .129, was ziemlich verwirrend ist. Es wird bestimmt, wann das USB-Tethering aktiviert ist, aber Danach sehe ich keine Möglichkeit, dies (für die anderen Schnittstellen) nach einem
route -n
(wo die Gateways nicht konfiguriert sind (0.0.0.0) zu bestimmen. BEARBEITEN: gefunden! stackoverflow.com/a/15973156/1422630
Antwort
Linux:
Sie müssen ein Terminal öffnen. Abhängig von Ihrer Linux-Distribution befindet es sich in den Menüelementen oben oder unten auf dem Bildschirm. In diesem Beispiel Klicken Sie auf Anwendungen > Systemprogramme > Terminal.
Wenn Terminal ist Geben Sie zum Öffnen den folgenden Befehl ein: ip route | grep default
Die Ausgabe sollte ungefähr so aussehen:
joe$ ip route | grep default default via 192.168.1.1 dev eth0 proto static
In diesem Beispiel ist 192.168.1.1 wiederum Ihre Standard-IP-Adresse für das Gateway (Router).
Weitere Informationen zu diesem Thema So finden Sie Ihre Gateway-IP (linux / win / osx) .
Kommentare
- Obwohl nicht mit der “ gesprochen wird, wenn dies der Fall ist Diese Antwort ist nicht der Standard-Gateway-Teil “ der Frage. Sie enthält den Hinweis, den ich zum Abrufen der Gateway-IP-Adresse benötigte (
route -n
) für eth0 in einem Bash-Skript:route -n | grep "^0\.0\.0\.0" | awk '{print $2}'
Antwort
Verwenden Sie diesen Befehl, um den NIC-Namen zu erhalten, der das Standard-Gateway ist:
netstat -rn | grep -m 1 UG | awk "{print $8}"
Wenn auf Ihrem Computer mehrere aktive Netzwerkkarten vorhanden sind, können Sie mit diesem Befehl die Haupt-Netzwerkkarte finden, auf der sich das Standard-Hauptgateway befindet.
Kommentare
-
grep XX | awk '{ action }'
kann normalerweise zuawk '/XX/ { action }'
- Bitte erläutern Sie, was und wie Ihr Befehl ausführt.
- @ mattia.b89 Ich habe meine Antwort aktualisiert.