GNU/Linux >> Tutoriales Linux >  >> Linux

Linux:¿la forma portátil de obtener la dirección de origen de la ruta predeterminada?

Necesito obtener la dirección IP utilizada como fuente para los paquetes enviados a través del default ruta . (EDITAR) Tenga en cuenta que me refiero al default ruta, la marcada como default en ip r (vea al final la ruta real que tomarán los paquetes bajo la configuración de mi VPN).

Mi primera idea fue usar ip r y deducir esto de allí:

# 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

Se veía bien, un ip r | grep default | cut -d" " -f7 me dio el esperado 10.237.77.206 .

Luego, en otro sistema (ambos son derivados de Debian) obtuve

# 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

Aquí la solución no es tan simple:necesito extraer la ruta IP predeterminada (10.237.76.1 ), conéctelo con la ruta adecuada (10.237.76.0/22 dev eth0 proto kernel scope link src 10.237.76.56 metric 202 ) que con suerte incluirá el src .

Cortando en última instancia desde la salida de ip no retendrá el agua a largo plazo (cambios en la salida, variaciones en la salida entre distribuciones o versiones, …)

¿Existe una forma más portátil de obtener esa IP?

Por "portátil" quiero decir:

  • idealmente "funciona en cualquier Linux"
  • menos ideal pero todavía bueno "funciona en Debian y sus derivados"

Tenga en cuenta que el dispositivo está en una VPN exclusiva, por lo que no puedo analizar directamente la ruta real que tomará el paquete cuando la VPN esté activa (es decir, la mayor parte del tiempo):el default La ruta está enmascarada por otras dos rutas, que cubren efectivamente todo el rango de IP. Corríjame si me equivoco aquí.

Respuesta aceptada:

Puede elegir una dirección arbitraria a la que crea que siempre se accederá a través de la ruta predeterminada, por ejemplo, Google DNS, y luego imprimir la dirección de origen para esa ruta:

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

Linux
  1. ¿La forma portátil (posix) de lograr la sustitución de procesos?

  2. Cómo cambiar el shell predeterminado en Linux

  3. Obtener la dirección IP de una interfaz en Linux

  4. Python:obtenga la puerta de enlace predeterminada para una interfaz local/dirección IP en Linux

  5. ¿Cuál es el orden predeterminado de clasificación de Linux?

Cómo obtener el tamaño de un directorio en Linux

Cómo encontrar/obtener su dirección IP en Linux

Cómo cambiar el shell predeterminado en el sistema Linux

Cómo obtener su dirección IP en Linux

Obtenga una dirección IP en Linux:descubra las muchas formas

Cómo configurar la puerta de enlace predeterminada