Ich muss die IP-Adresse abrufen, die als Quelle für Pakete verwendet wird, die über default
gesendet werden Strecke . (BEARBEITEN) Bitte beachten Sie, dass ich mich auf den default
beziehe Route, die als default
markiert ist in ip r
(Siehe am Ende für die tatsächliche Route, die die Pakete unter meinem VPN-Setup nehmen).
Meine erste Idee war, ip r
zu verwenden und daraus ableiten:
# ip r
0.0.0.0/1 via 10.0.2.1 dev tun0
default via 10.237.76.1 dev enxb827eb4297a4 src 10.237.77.206 metric 202
10.0.2.0/24 dev tun0 proto kernel scope link src 10.0.2.100
10.81.102.133 via 10.237.76.1 dev enxb827eb4297a4
10.237.76.0/22 dev enxb827eb4297a4 proto kernel scope link src 10.237.77.206 metric 202
128.0.0.0/1 via 10.0.2.1 dev tun0
Es sah gut aus, ein ip r | grep default | cut -d" " -f7
gab mir den erwarteten 10.237.77.206
.
Dann bekam ich auf einem anderen System (beide sind Debian-Derivate)
# ip r
0.0.0.0/1 via 10.0.2.1 dev tun0
default via 10.237.76.1 dev eth0 metric 202
10.0.2.0/24 dev tun0 proto kernel scope link src 10.0.2.5
10.81.102.133 via 10.237.76.1 dev eth0
10.237.76.0/22 dev eth0 proto kernel scope link src 10.237.76.56 metric 202
128.0.0.0/1 via 10.0.2.1 dev tun0
Hier ist die Lösung nicht so einfach:Ich muss die IP der Standardroute extrahieren (10.237.76.1
), gleichen Sie es mit der entsprechenden Route ab (10.237.76.0/22 dev eth0 proto kernel scope link src 10.237.76.56 metric 202
). ), die hoffentlich den src
enthält .
Letztlich Schnitt aus der Ausgabe von ip
wird auf lange Sicht nicht haltbar sein (Änderungen in der Ausgabe, Variationen in der Ausgabe zwischen Distributionen oder Versionen, …)
Gibt es einen tragbareren Weg, um diese IP zu erhalten?
Mit „tragbar“ meine ich:
- idealerweise „funktioniert auf jedem Linux“
- weniger ideal, aber immer noch gut „funktioniert auf Debian und seinen Derivaten“
Bitte beachten Sie, dass sich das Gerät in einem exklusiven VPN befindet, sodass ich die tatsächliche Route, die das Paket nehmen wird, wenn das VPN aktiv ist (d. h. die meiste Zeit), nicht direkt analysieren kann:den default
Route wird von zwei anderen Routen maskiert, die effektiv den gesamten IP-Bereich abdecken. Bitte korrigieren Sie mich, wenn ich mich hier irre.
Akzeptierte Antwort:
Sie könnten eine beliebige Adresse auswählen, von der Sie glauben, dass sie immer über die Standardroute zugegriffen wird, zum Beispiel Google DNS, und dann die Quelladresse für das drucken Strecke:
ip route get 8.8.8.8 | awk '{ for (nn=1;nn<=NF;nn++) if ($nn~"src") print $(nn+1) }'