Lösung 1:
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 die Kommunikation über diese Route gestartet wird. Das ist src ist für.
Ein kurzes Beispiel:Sie haben einen Host mit zwei Interfaces und den IP-Adressen 192.168.1.123/24 und 10.45.22.12/24. Sie fügen eine Route zu 78.22.45.0/24 über 10.45.22.1 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 an 192.168.1.0/24 oder weil Sie aus dem einen oder anderen Grund nicht möchten, dass Ihr Datenverkehr diese Route nimmt):
ip route add 78.22.45.0/24 via 10.45.22.1 src 10.45.22.12
Beachten Sie, dass die src Sie geben, würde nur den Verkehr beeinflussen, der von Ihrem Host ausgeht. Wenn ein fremdes Paket geroutet wird, hat es offensichtlich bereits eine Quell-IP-Adresse, sodass es unverändert weitergegeben wird (es sei denn, Sie verwenden natürlich NAT, aber das ist eine ganz andere Sache). Außerdem kann diese Einstellung von einem Prozess außer Kraft gesetzt werden, der sich ausdrücklich dafür entscheidet, sich an eine bestimmte Adresse zu binden, anstatt die Standardeinstellungen zu verwenden, wenn Verbindungen initiiert werden (eher selten).
Lösung 2:
Der src
Das Attribut ist ein Hinweis, der vom Adressauswahlalgorithmus verwendet wird . Es 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, kann eine Netzwerkanwendung den Auswahlalgorithmus auch überschreiben, indem sie Systemaufrufe wie bind()
verwendet , die src
-Attribut ist eine Möglichkeit, eine Routing-Tabellensuche zu verwenden, um die Frage zu beantworten:"Wenn ich eine Verbindung zu Host X initiieren möchte, welche meiner Adressen soll ich verwenden?"
Hier ist ein Beispiel, um die Verwendung und Wirkung des src
zu veranschaulichen Attribut. Um deutlich zu machen, dass dies mit Adressen und Routen zusammenhängt und nicht ausschließlich mit Schnittstellen, hat dieser Beispielhost nur eine Netzwerkschnittstelle, aber zwei Adressen. Darüber hinaus befinden sich beide Adressen im selben Subnetz, um die Tatsache zu betonen, dass es keine andere offensichtliche Möglichkeit gibt, die zu verwendende auszuwä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, aber standardmäßig es wird 10.1.0.16 verwenden, wenn eine Verbindung mit 10.1.0.32 bis 10.1.0.63 hergestellt wird, und 10.1.0.2 für den Rest verwenden.
Wenn der Host antwortet, anstatt zu initiieren, antwortet er von der Zieladresse der Anfrage. Wenn sich beispielsweise ein anderer Host unter 10.1.0.32 mit diesem Host unter 10.1.0.2 verbindet, kommt die Antwort von 10.1.0.2, obwohl dies nicht mit src
übereinstimmt Attribut der Rückroute.