Índice
El propósito de iproute2 es reemplazar el conjunto de herramientas que componen las net-tools y pasar a ser él quien se encargue de configurar las interfaces de red, la tabla de rutas y gestionar la tabla ARP.
Hace poco he escrito sobre el comando netstat. El artículo trataba de cómo es posible usar netstat para mostrar dintintos tipos de información sobre el estado de la red. Hoy voy a hablar de su sustituto ss, ya que netstat se dejó de desarrollar en 2001.
Para situarnos en contexto, netstat forma parte de las comúnmente llamadas net-tools o herramientas de red. Este conjunto de herramientas lo forman los comandos ifconfig, netstat y route. Dichas herramientas han quedado obsoletas en favor de iproute2 desde hace algunos años.
A día de hoy la mayoría de distribuciones traen iproute instalado por defecto.
Veamos algunos de los comandos más útiles que nos ofrece este relativamente “nuevo” conjunto de comandos:
Obtener información sobre TCP/UDP y Sockets
Aquí entra en acción el comando ss, sustituto de netstat. Este comando está incluido en el paquete iproute2.
La función de ss es mostrar estadísticas de los sockets, mostrar información similar a netstat. Además, revela más información sobre TCP que otras herramientas. Las opciones más usadas son:
-n, --numeric
Do now try to resolve service names.
-r, --resolve
Try to resolve numeric address/ports.
-a, --all
Display all sockets.
-l, --listening
Display listening sockets.
-o, --options
Show timer information.
-e, --extended
Show detailed socket information
-m, --memory
Show socket memory usage.
-p, --processes
Show process using socket.
-i, --info
Show internal TCP information.
-s, --summary
Print summary statistics. This option does not parse socket
lists obtaining summary from various sources. It is useful when
amount of sockets is so huge that parsing /proc/net/tcp is
painful.
Para ver la lista completa de opciones escribe ss --help
.
Algunos ejemplos prácticos:
Mostrar todos los sockects a la escucha
$ ss -l
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 :::sunrpc :::*
LISTEN 0 128 *:sunrpc *:*
LISTEN 0 20 ::1:smtp :::*
LISTEN 0 20 127.0.0.1:smtp *:*
LISTEN 0 128 *:17500 *:*
LISTEN 0 128 *:43076 *:*
LISTEN 0 128 :::50925 :::*
Para entender el significado de las columnas, puedes dirigirte al artículo de netstat.
Mostrar conexiones ssh establecidas
# ss -o state stablished '( dport = :ssh or sport = :ssh)'
Recv-Q Send-Q Local Address:Port Peer Address:Port
0 0 192.168.1.36:60240 207.97.227.239:ssh
El parámetro -o permite establecer qué opciones mostrar, varios ejemplos son:
Mostrar conexiones SMTP establecidas
# ss -o state established '( dport = :smtp or sport = :smtp )'
Mostrar conexiones HTTP establecidas
# ss -o state established '( dport = :http or sport = :http )'
En los casos anteriores se ha filtrado únicamente los paquetes TCP con estado established. Para mostrar otros estados puedes escribir:
# ss -4 state NOMBRE-DEL-FILTRO
Donde -4 indica paquetes TCP IPv4 y NOMBRE-DEL-FILTRO puede tomar los siguientes valores:
- established
- syn-sent
- syn-recv
- fin-wait-1
- fin-wait-2
- time-wait
- closed
- close-wait
- last-ack
- listen
- closing
- all : Todos los estados de arriba
- connected : Todos los estados salvo listen y closed
- synchronized
- bucket : Mostrar estados mantenidos como minisockets, como time-wait and syn-recv.
- big : Lo contrario al estado bucket.
Por ejemplo:
# ss -4 state time-wait
Encontrar procesos locales conectados al servidor X (Servidor Gráfico)
# ss -x src /tmp/.X11-unix/*
Hacer coincidir direcciones remotas y puertos
ss dst ADDRESS_PATTERN
## Mostrar todos los puertos conectados de forma remota desde 192.168.1.5##
ss dst 192.168.1.5
## Mostrar todos los puertos conectados de forma remota desde 192.168.1.5:http##
ss dst 192.168.1.5:http
ss dst 192.168.1.5:smtp
ss dst 192.168.1.5:443
Mostrar conexiones realizadas por una ip en el puerto http hacia nuestra máquina
ss dst 123.1.2.100:http
Es posible mostrar todas las conexiones realizadas por cualquier máquina, por el puerto http por ejemplo:
# ss dst *:http
Hacer coincidir direcciones locales y puertos
ss src ADDRESS_PATTERN
# Encontrar todas las ips conectadas a elbauldelprogramador.com (5.39.89.44) ###
## Mostrar todos los puertos conectados a la dirección local 5.39.89.44 ##
ss src 5.39.89.44
## http (80) port only ##
ss src 5.39.89.44:http
ss src 5.39.89.44:80
## smtp (25) port only ##
ss src 5.39.89.44:smtp
ss src 5.39.89.44:25
Mostrar el número y el tipo de conexiones activas
ss -ant | awk '{print $NF}' | grep -v '[a-z]' | sort | uniq -c
Mostrar un resumen del estado de los sockets
# ss -s
Listar todos los puertos a la escucha junto con el PID del programa
ss -tlnp
Configuración de la interfaz de red
Antiguamente se usaba el comando ifconfig:
# ifconfig eth0 up
# ifconfig eth0 192.168.1.1 netmask 255.255.255.0
En iproute2 la configuración de interfaces de red se lleva a cabo con el subcomando link:
Activar interfaz
# ip link set eth0 up
Donde eth0 debe ser la interfaz de red a activar.
Establecer dirección ip a la interfaz
# ip addr add 192.168.1.33/24 dev eth0
Para comprobar la correcta configuración de la interfaz, muestra la información de dicha interfaz:
# ip addr ls
# ip addr show
# ip addr ls eth0
Enrutamiento
La versión moderna del comando route -n
o netstat -r
es:
# ip ro
Para añádir o eliminar reglas de enrutamiento se usa ip ro add|del destino via gateway
. Para añadir una nueva ruta a 10.0.0.0/16:
# ip ro add 10.0.0.0/16 via 192.168.0.1
# ip ro del 10.0.0.0/16 via 192.168.0.1
Encontrar la ruta hacia una dirección IP
Para averiguar qué interfaz está usando tu pc, puedes usar el comando ip route get IP. Así:
# ip route get 5.39.89.44
5.39.89.44 via 10.61.29.89 dev eth1 src 192.168.1.36
está usando la interfaz eth1, gateway 10.61.29.89 y la interfaz tiene la ip privada 192.168.1.36
Conclusión
Aunque este artículo ha sido una remezcla de comandos, espero que haya quedado claro para qué sirve cada uno, y a partir de ahora podrás sacarle partido.
Referencias
- Socket Statistics on Linux »» linuxaria
- Some useful command with iproute2 »» linuxaria
- ss: Display Linux TCP / UDP Network and Socket Information »» cyberciti.biz
- SS Utility: Quick Intro »» cyberciti.biz
¿Has visto algún error?: Por favor, ayúdame a corregirlo contactando conmigo o comentando abajo.