ip route show src field

12

Ich habe die Manpage von gelesen ipund verstehe immer noch nicht, was srcist, und ich konnte nicht viel Dokumentation finden.

Bitte, wenn Sie es gründlich erklären oder auf einen Link verweisen können, ist dies eine gute Antwort.

Core-Dump
quelle
3
Sie wissen nicht, was "Quelle" im Kontext der IP-Kommunikation bedeutet? Sie brauchen keinen
Serverfehler

Antworten:

17

Wenn Sie einem Multihomed-Host eine Route hinzufügen, möchten Sie möglicherweise die Kontrolle über die Quell-IP-Adresse haben, von der Ihr Host sendet, wenn Sie die Kommunikation über diese Route starten. Dafür ist src da .

Ein kurzes Beispiel: Sie haben einen Host mit zwei Schnittstellen und den IP-Adressen 192.168.1.123/24 und 10.45.22.12/24. Sie fügen über 10.45.22.1 eine Route zu 78.22.45.0/24 hinzu und möchten sicherstellen, dass Sie nicht mit der Adresse 192.168.1.123 an 78.22.45.0/24 senden (möglicherweise, weil das Netzwerk 78.22.45.0/24 keine Route zurück hat bis 192.168.1.0/24 oder weil Sie nicht möchten, dass Ihr Verkehr diese Route aus dem einen oder anderen Grund nimmt):

ip route add 78.22.45.0/24 via 10.45.22.1 src 10.45.22.12

Beachten Sie, dass der von Ihnen angegebene src nur den Datenverkehr beeinflusst, der von Ihrem Host ausgeht. Wenn ein fremdes Paket weitergeleitet wird, hat es offensichtlich bereits eine Quell-IP-Adresse, sodass es unverändert weitergegeben wird (es sei denn, Sie verwenden natürlich NAT, aber dies ist eine ganz andere Sache). Diese Einstellung wird möglicherweise auch von einem Prozess überschrieben, der sich speziell dafür entscheidet, an eine bestimmte Adresse zu binden, anstatt die Standardeinstellungen beim Initiieren von Verbindungen zu verwenden (eher selten).

the-wabbit
quelle
9

Das srcAttribut ist ein Hinweis, der vom Adressauswahlalgorithmus verwendet wird . Dies ist wichtig, wenn ein Host mehrere IP-Adressen hat, was normalerweise, aber nicht immer der Fall ist, wenn er mehrere Schnittstellen hat. Während es andere Regeln gibt, die die Adressauswahl beeinflussen, und eine Netzwerkanwendung den Auswahlalgorithmus auch mithilfe von Systemaufrufen wie überschreiben kann bind(), ist das srcAttribut eine Möglichkeit, eine Routing-Tabellensuche zu verwenden, um die Frage zu beantworten: "Wenn ich eine initiieren möchte Verbindung zu Host X, welche meiner Adressen soll ich verwenden? "

Hier ist ein Beispiel, um die Verwendung und Wirkung des srcAttributs zu veranschaulichen . Um darauf hinzuweisen, dass dies mit Adressen und Routen zusammenhängt, nicht ausschließlich mit Schnittstellen, verfügt dieser Beispielhost nur über eine Netzwerkschnittstelle, sondern über zwei Adressen. Darüber hinaus befinden sich beide Adressen im selben Subnetz, um die Tatsache hervorzuheben, dass es keine andere offensichtliche Möglichkeit gibt, die zu verwendende zu wählen.

$ ip -4 addr show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    inet 10.1.0.2/24 brd 10.1.0.255 scope global eth0
    inet 10.1.0.16/24 scope global secondary eth0
$ ip route list dev eth0
10.1.0.32/27  scope link  src 10.1.0.16
10.1.0.0/24  proto kernel  scope link  src 10.1.0.2

Dieser Host kann mit jeder der anderen 252 Adressen in diesem / 24-Subnetz von beiden Adressen aus kommunizieren, verwendet jedoch standardmäßig 10.1.0.16, wenn eine Verbindung mit 10.1.0.32 bis 10.1.0.63 hergestellt wird, und verwendet 10.1.0.2 für alle sich ausruhen.

Wenn der Host antwortet und nicht initiiert, antwortet er von der Zieladresse der Anforderung. Wenn beispielsweise ein anderer Host unter 10.1.0.32 unter 10.1.0.2 eine Verbindung zu diesem Host herstellt, kommt die Antwort von 10.1.0.2, obwohl dies nicht mit dem srcAttribut der Rückroute übereinstimmt .

neirbowj
quelle