Tabla de Contenidos
109.3 Basic network troubleshooting
Pertenece a Topic 109: Networking Fundamentals
- Weight: 4
- Description: Candidates should be able to troubleshoot networking issues on client hosts.
- Key Knowledge Areas:
- Manually configure network interfaces, including viewing and changing the configuration of network interfaces using iproute2.
- Manually configure routing, including viewing and changing routing tables and setting the default route using iproute2.
- Debug problems associated with the network configuration.
- Awareness of legacy net-tools commands.
- The following is a partial list of the used files, terms and utilities:
iphostnamesspingping6traceroutetraceroute6tracepathtracepath6netcatifconfignetstatroute
Herramientas net-tools
net-tools es el conjunto de herramientas tradicionales para la gestión de la red en el sistema. Está en desaparición.
Si no tuviésemos estas herramientas, en Debian podemos instalarlas con apt install net-tools
ifconfig
Este comando es la herramienta clásica para gestionar los dispositivos de red.
Si lo ejecutamos sin argumentos, nos muestra las tarjetas de red activas y sus direcciones ip asociadas.
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.26.194.246 netmask 255.255.240.0 broadcast 172.26.207.255
inet6 fe80::215:5dff:feb4:4528 prefixlen 64 scopeid 0x20<link>
ether 00:15:5d:b4:45:28 txqueuelen 1000 (Ethernet)
RX packets 585 bytes 259133 (259.1 KB)
RX errors 0 dropped 2 overruns 0 frame 0
TX packets 109 bytes 7506 (7.5 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
- Asignar manualmente dirección IP:
ifconfig <dispositivo> <IP nueva> netmask <máscara> - Deshabilitar tarjeta:
ifconfig <dispositivo> down - Habilitar Tarjeta:
ifconfig <dispositivo> up - Mostrar todos los dispositivos (incluidos los deshabilitados):
ifconfig -a
Ejemplo asignando una dirección IP manualmente:
ifconfig enp0s3 192.168.1.123 netmask 255.255.255.0
ifup e ifdown sirven también para habilitar o deshabilitar dispositivos:
ifup <dispositivo>ifdown <dispositivo>
Con la opción -a podemos afectar a todos los dispositivos:
ifup -a
Si hemos hecho cambios en la configuración de red y queremos aplicar los cambios debemos reiniciar los servicios de red.
En sistemas con SysV:
- Debian:
/etc/init.d/networking restart - CentOS:
/etc/init.d/network restart
En sistemas con Systemd:
systemctl restart networking.service
route
Este comando nos muestra la tabla de enrutamiento de nuestro sistema local. Estas tablas es donde se indica lo que tiene que hacer el sistema con los paquetes que le llegan.
# route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface default 192.168.0.1 0.0.0.0 UG 0 0 0 enp0s3 192.168.0.1 0.0.0.0 255.255.255.0 U 0 0 0 enp0s3
Según la tabla de arriba, en la primera línea se especifica una puerta de enlace por defecto. Todos los paquetes que tengan que salirse de la red, irán por dicho gateway. Puede haber diferentes gateways para diferentes redes, pero solo uno será por defecto.
Otro ejemplo:
Tabla de rutas IP del núcleo Destino Pasarela Genmask Indic Métric Ref Uso Interfaz default 192.168.1.1 0.0.0.0 UG 600 0 0 wlp3s0 link-local 0.0.0.0 255.255.0.0 U 1000 0 0 wlp3s0 192.168.1.0 0.0.0.0 255.255.255.0 U 600 0 0 wlp3s0
Si en lugar de nombre queremos que nos muestre direcciones IP:
route -n
También podemos obtener las rutas con el comando netstat lanzándolo de la siguiente manera: netstat -r.
Para ver la importancia de nuestra puerta de enlace (Gateway) en nuestra red, vamos a cambiarla, también con el comando route, y veremos como reacciona nuestra máquina.
Eliminamos el gateway por defecto:
route del default gw 192.168.1.1
Para cambiar/añadir la puerta de enlace, utilizaremos el comando route de la siguiente forma:
route add default gw <ip nuevo gw> dev <dispositivo>
Ejemplo:
route add default gw 192.168.1.230
Añadir una ruta:
route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.1 dev eth0
Eliminar una ruta:
route del -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.1 dev eth0
Añadir gateway por defecto:
route add default gw 192.168.0.254 dev eth0
Netstat
Es un comando muy potente para conocer las conexiones de nuestra red.
- Mostrar las rutas del sistema:
netstat -nr(comoroute) - Mostrar información sobre los interfaces de red:
netstat -i. Útil para determinar una posible avería o un problema de cable. - Mostrar información de los programas que usan los diferentes sockets de red:
netstat -p
Poner ejemplos de las salidas de los comandos anteriores.
Una forma de llamar netstat muy habitual es:
netstat -putan
O
netstat -putona
Porque vemos el puerto y qué servicio lo está usando.
Los servicios que funcionen por UDP no aparecerán en estado LISTEN en netstat.
iproute2
Conjunto de herramientas que pretende sustituir a net-tools.
ip
El comando ifconfig se está intentando retirar, y en su lugar usar el comando ip, que incluye las funciones de ifconfig y route
ip: comando para los dispositivos de redip addr: equivalente aifconfig. También se puede acortar comoip a.ip addr add <ip>/<mask> dev <device>: añadir dirección IPip addr del <ip>/<mask> dev <device>: eliminar dirección IPip a show: muestra información de los interfaces de redip a show eth0: muestra información de la interfaz de redeth0.
ip link: muestra dispositivos. También se puede acortar comoip l.ip link set <device> up/down: activar / desactivar dispositivo
ip route show: comorouteip route add default via <ip> dev <device>: añadir gateway por defecto.
Poner ejemplos de las salidas de los comandos anteriores.
ss
Pretende sustituir a netstat.
ss -putan
Telnet
Se utiliza para comunicarnos con un servidor remoto a través del protocolo telnet.
Tiene la desventaja de que toda la información que se transmite a través de telnet son en texto plano, incluidas las contraseñas.
- Instalar el cliente:
apt-get install telnet - Instalar el servidor:
apt-get install telnetd
Aunque es un protocolo inseguro, se puede usar para comprobar si los puertos de una máquina están abiertos:
telnet direccion_ip puerto
Ejemplo:
$ telnet 192.168.0.1 21 Trying 192.168.0.1... telnet: Unable to connect to remote host: Connection refused
host
Los servidores DNS proporcionan la base de datos completa de nombres de dominio y direcciones IP.
El comando host hará uso de los datos de esas bases de datos para devolvernos la información. nos muestra todas las IPs conocidas para un dominio dado.
$ host google.es google.es has address 216.58.209.67 google.es has IPv6 address 2a00:1450:4003:80f::2003 google.es mail is handled by 0 smtp.google.com.
En sentido inverso también nos proporciona información. Si le indicamos la dirección IP, nos indica el servidor DNS que sirve a ese dominio.
nslookup
Realiza consultas simples a nuestro servidor DNS.
En Debian hay que instalar el paquete dnsutils.
Se utiliza para consultar servidores de nombre de dominio y obtener información relacionada con el dominio o el host.
$ nslookup www.google.es Server: 87.216.1.65 Address: 87.216.1.65#53 Non-authoriative answer: Name: google.es Address: 216.58.209.67 Name: google.es Address: 2a00:1450:4003:80f::2003
dig
El comando dig también es una utilidad de búsqueda DNS. Es similar a host, pero nos permite un acceso más completo a la base de datos del DNS.
Podemos hacer consultas por tipos de entradas DNS (MX, SRV, A, NS, …)
dig ANY google.es
Poner ejemplo del uso del comando anterior
Traceroute y tracepath
Estos comandos lo que hacen es rastrear los diferentes enrutadores que nos encontramos hasta llegar a nuestro destino.
traceroute rastrea la ruta que toman nuestros paquetes enviados a través de una red IP en el camino a un host determinado. Es útil para diagnosticar problemas de tráfico.
$ traceroute google.es traceroute to google.es (216.58.215.163), 30 hops max, 60 byte packets 1 192.168.0.1 (192.168.0.1) 4.915 ms 4.901 ms 4.890 ms 2 100.115.0.1 (100.115.0.1) 6.540 ms 6.135 ms 6.123 ms 3 142.17.26.77.dynamic.reverse-mundo-r.com (77.26.17.142) 6.538 ms 6.527 ms 5.895 ms 4 ix-ae-7-700.tcore1.dvs-bilbao.as6453.net (80.231.157.133) 18.543 ms 13.173 ms 13.135 ms 5 if-ae-10-4.tcore1.wv6-madrid.as6453.net (80.231.91.105) 22.798 ms 20.118 ms 20.052 ms 6 72.14.213.246 (72.14.213.246) 19.235 ms 16.648 ms 16.626 ms 7 142.250.232.10 (142.250.232.10) 18.454 ms 74.125.242.177 (74.125.242.177) 17.079 ms 142.250.214.40 (142.250.214.40) 19.264 ms 9 142.251.54.149 (142.251.54.149) 22.639 ms 74.125.242.164 (74.125.242.164) 15.224 ms 74.125.242.180 (74.125.242.180) 18.045 ms 10 mad41s07-in-f3.1e100.net (216.58.215.163) 15.187 ms 15.178 ms 108.170.235.178 (108.170.235.178) 15.153 ms
Este comando nos devolverá la cantidad de routers por los que pasará nuestra petición de host y, si es posible, sus direcciones IP. Si no puede mostrar las direcciones IP, aparecerán como *
El comando tracepath es básicamente igual que traceroute pero no necesita permisos de root
ping
El comando ping envía una solicitud de echo icmp a un host remoto, e informa cuanto tiempo se tarda en recibir ese echo e icmp.
Este comando envía un paquete de red para comprobar la disponibilidad de un nodo de red (si la máquina está “levantada” o no).
$ ping google.es PING google.es (216.58.215.163) 56(84) bytes of data. 64 bytes from mad41s07-in-f3.1e100.net (216.58.215.163): icmp_seq=1 ttl=115 time=15.9 ms 64 bytes from mad41s07-in-f3.1e100.net (216.58.215.163): icmp_seq=2 ttl=115 time=16.6 ms 64 bytes from mad41s07-in-f3.1e100.net (216.58.215.163): icmp_seq=3 ttl=115 time=16.5 ms 64 bytes from mad41s07-in-f3.1e100.net (216.58.215.163): icmp_seq=4 ttl=115 time=19.6 ms 64 bytes from mad41s07-in-f3.1e100.net (216.58.215.163): icmp_seq=5 ttl=115 time=16.7 ms
Por defecto, ping funciona continuamente, tendremos que ser nosotros quienes lo detengamos. Si queremos establecer un número determinado de paquetes, usaremos la opción -c: ping -c3 google.es
Ejemplo para comprobar si un servidor responde:
ping -c 1 10.0.10.13 > /dev/null 2>&1 && echo "El servidor contesta"
También es interesante la opción -b para emitir un echo en una dirección de broadcast. Por ejemplo:
ping -b 192.168.0.255
Todas las direcciones de la subred correspondientes a la dirección de broadcast anterior deben responder.
Un último ejemplo donde veremos el uso de la opción -I para especificar una interfaz de red:
ping -I eth0 192.168.0.10
Esta opción es muy útil para comprobar una resolución DNS o una ruta.
Reiniciar el servicio de red del sistema
Si tenemos algún problema con la red o hemos hecho cambios y queremos que se apliquen:
- En el caso de SysV:
- Debian:
/etc/init.d/networking restart - CentOS:
/etc/init.d/network restart
- En el caso de Systemd:
systemctl restart networking
