GNU/Linux >> Linux Esercitazione >  >> Linux

Linux:il modo portatile per ottenere l'indirizzo di origine del percorso predefinito?

Devo ottenere l'indirizzo IP utilizzato come origine per i pacchetti inviati tramite il default percorso . (EDIT) Si prega di notare che mi riferisco al default percorso, quello contrassegnato come default in ip r (vedi alla fine per il percorso effettivo che i pacchetti prenderanno con la mia configurazione VPN).

La mia prima idea è stata quella di usare ip r e deduci questo da lì:

# 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

Sembrava buono, un ip r | grep default | cut -d" " -f7 mi ha dato il 10.237.77.206 previsto .

Quindi, su un altro sistema (entrambi sono derivati ​​​​da Debian) ho ottenuto

# 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

Qui la soluzione non è così semplice:devo estrarre l'IP di percorso predefinito (10.237.76.1 ), abbinalo al percorso appropriato (10.237.76.0/22 dev eth0 proto kernel scope link src 10.237.76.56 metric 202 ) che si spera contenga src .

Infine tagliando dall'output di ip non reggerà l'acqua a lungo termine (cambiamenti nell'output, variazioni nell'output tra distribuzioni o versioni, ...)

C'è un modo più portatile per ottenere quell'IP?

Per “portatile” intendo:

  • idealmente "funziona su qualsiasi Linux"
  • Meno idealmente ma comunque buono "funziona su Debian e i suoi derivati"

Tieni presente che il dispositivo è in una VPN esclusiva, quindi non posso analizzare direttamente il percorso effettivo che il pacchetto seguirà quando la VPN è attiva (ovvero, la maggior parte delle volte):il default route è mascherato da altri due percorsi, che coprono effettivamente l'intero range IP. Per favore correggimi se sbaglio qui.

Risposta accettata:

Puoi scegliere un indirizzo arbitrario a cui ritieni sarà sempre accessibile tramite il percorso predefinito, ad esempio google DNS, e quindi stampare l'indirizzo di origine per quello percorso:

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

Linux
  1. Linux alimenta Internet, conferma il commissario Ue

  2. 4 sessioni video per l'amministratore di sistema Linux

  3. Il modo portatile (posix) per ottenere la sostituzione del processo?

  4. Il modo migliore per ottenere l'ID macchina su Linux?

  5. Come determinare l'indirizzo del gateway eth0 quando non è il gateway predefinito?

Come ottenere la dimensione di una directory in Linux

Come trovare/ottenere il tuo indirizzo IP in Linux

Come modificare la shell predefinita nel sistema Linux

Come ottenere il tuo indirizzo IP su Linux

Ottieni un indirizzo IP su Linux:scopri i molti modi

Linux:trova i risultati del percorso predefinito