En mi sistema tengo eth0 (que puede estar conectado o no) y un módem en ppp0 (que siempre puede estar activo o inactivo). En el caso de que ambas interfaces estén activas y ppp0 sea la ruta predeterminada, me gustaría encontrar una manera de determinar la dirección IP real de la puerta de enlace de eth0. Probé «netstat -rn» pero en esta configuración el resultado es:
Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface xx.xx.xxx.xxx 0.0.0.0 255.255.255.255 UH 0 0 0 ppp0 192.168.98.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 127.0.0.0 0.0.0.0 255.0.0.0 U 0 0 0 lo 0.0.0.0 0.0.0.0 0.0.0.0 U 0 0 0 ppp0
Entonces, ¿cómo puedo determinar la dirección de la puerta de enlace de eth0? En el caso anterior, la dirección de la puerta de enlace real es 192.168.98.1.
Comentarios
- ¿Qué es » eth0 ‘ s dirección de puerta de enlace » ¿se supone que es?
- Interfaces don ‘ t tiene direcciones de puerta de enlace, los netblocks sí. Una dirección de puerta de enlace le dice al kernel dónde reenviar los paquetes destinados a algún host en alguna red. Si la dirección está asociada con una interfaz determinada, entonces se utilizará esa interfaz, pero la dirección es independiente de la interfaz.
- Entonces, en mi aplicación, se supone que debo hacer que eth0 sea la puerta de enlace predeterminada si tiene conectividad. Pero para verificar la conectividad, hago una ruta temporal a mi buen servidor conocido. Pero para hacer esto, necesito saber la dirección de la puerta de enlace de eth0 ‘. Entonces, ¿cómo puedo determinar esto?
- verifique esto: stackoverflow.com/a/15973156/1422630
Respuesta
Suponga que eth0
es la interfaz de cliente DHCP.
Una opción es verificar la Archivos de arrendamiento del cliente DHCP dhcpd.leases
El lugar y el nombre dependen del sistema; en algunos sistemas Fedora, los archivos bajo /var/lib/dhclient/
son archivos de arrendamiento, donde la cadena interesante es así:
option routers 192.168.1.1;
Otra opción, que funcionó para mí en una caja de funtoo: dhcpcd -U eth0
imprime una bonita tabla, lista para fuente en scripts
broadcast_address=192.168.1.255 dhcp_lease_time=86400 dhcp_message_type=5 dhcp_server_identifier=192.168.1.1 domain_name_servers="192.168.1.1 192.168.1.101" ip_address=192.168.1.101 network_number=192.168.1.0 routers=192.168.1.1 subnet_cidr=24 subnet_mask=255.255.255.0
Hay otras opciones como dhcping
, dhclient -n
, de acuerdo con google y páginas de manual, pero fallan en mis cajas, pero puede funcionar para usted.
Respuesta
Su error es que «está asociando la información en la salida netstat con la interfaz en lugar del destino. Las direcciones de destino pueden tener puertas de enlace asociadas. Cuando configura su red, «vuelve a asociar interfaces y puertas de enlace con conjuntos de direcciones de destino, por lo que la pregunta que debe hacerse es» cuál es la puerta de enlace para los destinos en 192.168.98 / 24? «Apuesto a que no se supone que haya uno, que los dispositivos en el en el rango están puenteadas o directamente conectadas a esa ethernet.
Observe que su ruta predeterminada es a través de ppp0
(la última línea es una ruta comodín, la máscara es todos cero, por lo que no se comparan los bits, por lo que los paquetes para esas direcciones se envían a través de ppp0
). Por lo tanto, los paquetes para cualquier destino que no esté en 127.xx.xx.xx
o 192.168.98.xx
eventualmente coincidirán con la máscara comodín y se enviarán a través de ppp0
. Ahora, debido a que es un protocolo punto a punto, cada paquete enviado en esa interfaz va al único dispositivo directamente direccionable en ese enlace, el que está en el otro extremo. No es necesario especificar una puerta de enlace para él. porque cada paquete que se envía a través de esa interfaz se envía a través de ese dispositivo, ya sea que su destino de Internet sea ese dispositivo o no.
Ahora: si tiene un enrutador accesible a través de eth0
que usa cuando puede, es casi seguro que ese enrutador tenga una dirección IP en el rango 192.168.98.xx, al menos tan probable como no 192.168.98.1, y cuando ese enrutador esté encendido y realmente conectado a Internet, desea que su ruta predeterminada, la de todo lo que no esté conectado directamente a una red local, sea default via 192.168.98.1
Puede tener la más nuevo (ese «es un término relativo, existe desde hace mucho tiempo») ip
comando en uso, pruebe ip route
y si eso le da algún resultado, intente . De lo contrario, intente route help
.
Entonces, su eth0
simplemente no «t tiene una dirección de puerta de enlace. Puede haber otro dispositivo o varios dispositivos conectados a esa red ethernet dispuestos a servir como puerta de enlace. Dice que su red «tiene una que responde en el (puramente convencional) .1
. Ninguna ley dice que debe tener esa dirección, y ninguna ley dice que debe anunciar su presencia. Hay algunas formas comunes, la más común de ellas es que las cajas que ejecutan software de enrutamiento también ejecuten servidores dhcp y le digan a cualquiera que hable dhcp sobre sí mismos de esa manera. La respuesta de MolbOrg da una idea bastante típica de la configuración, pero cualquier cosa que cualquiera pueda sugerir en este momento será más o menos probable que coincida con su red.
Comentarios
- en mi caso, la puerta de enlace termina con .129 que es bastante confuso .. se determina cuando el anclaje USB está habilitado pero después de eso, no veo forma de determinar eso (para las otras interfaces) después de un
route -n
(donde las puertas de enlace no están configuradas (0.0.0.0). EDITAR: ¡lo encontré! stackoverflow.com/a/15973156/1422630
Respuesta
Linux:
Deberá abrir una Terminal. Dependiendo de su distribución de Linux, puede ubicarse en los elementos del menú en la parte superior o en la parte inferior de la pantalla. En este ejemplo , usaremos Fedora. Haga clic en Aplicaciones > Herramientas del sistema > Terminal.
Cuando el terminal esté open, escriba el siguiente comando: ip route | grep default
El resultado de esto debería ser similar al siguiente:
joe$ ip route | grep default default via 192.168.1.1 dev eth0 proto static
En este ejemplo, nuevamente, 192.168.1.1 es la dirección IP de su puerta de enlace predeterminada (enrutador).
Para obtener más información sobre este tema, cómo encontrar la IP de su puerta de enlace (linux / win / osx) .
Comentarios
- A pesar de no hablar con » cuando es no es la puerta de enlace predeterminada » parte de la pregunta, esta respuesta contiene la pista que necesitaba (
route -n
) para obtener la dirección IP de la puerta de enlace para eth0 en un script bash:route -n | grep "^0\.0\.0\.0" | awk '{print $2}'
Respuesta
Para obtener el nombre de la NIC que es la puerta de enlace predeterminada, utilice este comando:
netstat -rn | grep -m 1 UG | awk "{print $8}"
Si tiene varias NIC activas en su máquina, este comando le ayuda a encontrar la NIC principal que tiene la puerta de enlace predeterminada principal.
Comentarios
-
grep XX | awk '{ action }'
generalmente se puede unir enawk '/XX/ { action }'
- Por favor, considere explicar qué y cómo funciona su comando
- @ mattia.b89 Actualicé mi respuesta.