GNU/Linux >> Znalost Linux >  >> Linux

Linux – přenosný způsob, jak získat výchozí zdrojovou adresu trasy?

Potřebuji získat IP adresu používanou jako zdroj pro pakety odesílané přes default trasa . (EDIT) Vezměte prosím na vědomí, že mám na mysli default trasa, která je označena jako default v ip r (skutečnou cestu, kterou pakety budou mít v rámci mého nastavení VPN, najdete na konci).

Můj první nápad byl použít ip r a z toho odvodit toto:

# 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

Vypadalo to dobře, ip r | grep default | cut -d" " -f7 mi dal očekávaný 10.237.77.206 .

Pak jsem na jiném systému (oba jsou deriváty debianu) dostal

# 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

Zde řešení není tak jednoduché:Potřebuji extrahovat výchozí IP adresu trasy (10.237.76.1 ), přiřaďte jej k příslušné trase (10.237.76.0/22 dev eth0 proto kernel scope link src 10.237.76.56 metric 202 ), který doufejme bude obsahovat src .

V konečném důsledku stříháme z výstupu ip nebude dlouhodobě zadržovat vodu (změny výkonu, odchylky výkonu mezi distribucemi nebo verzemi, …)

Existuje přenosnější způsob, jak získat tuto IP adresu?

Termínem „přenosný“ myslím:

  • ideálně „funguje na jakémkoli Linuxu“
  • méně ideálně, ale stále dobře „funguje na Debianu a jeho derivátech“

Vezměte prosím na vědomí, že zařízení je ve výhradní síti VPN, takže nemohu přímo analyzovat skutečnou trasu, kterou paket projde, když je VPN aktivní (tedy většinou):default trasa je maskována dvěma dalšími trasami, které efektivně pokrývají celý rozsah IP. Prosím, opravte mě, pokud se zde mýlím.

Přijatá odpověď:

Můžete si vybrat libovolnou adresu, o které se domníváte, že bude vždy přístupná přes výchozí cestu, například google DNS, a poté vytisknout zdrojovou adresu to trasa:

ip route get 8.8.8.8 | awk '{ for (nn=1;nn<=NF;nn++) if ($nn~"src") print $(nn+1) }'

Linux
  1. Jak změnit výchozí prostředí v Linuxu

  2. Python:získejte výchozí bránu pro místní rozhraní/ip adresu v linuxu

  3. Získejte aktuální/výchozí hodnotu TCP initcwnd v Linuxu

  1. Jaké je výchozí pořadí řazení Linuxu?

  2. Jak nastavit výchozí bránu

  3. Linux - najít přístupy výchozí trasy

  1. Linux pohání internet, potvrzuje eurokomisař

  2. 4 video relace pro správce systému Linux

  3. Přenosný (posix) způsob, jak dosáhnout substituce procesu?