Table of Contents

Guía rápida del comando ip (iproute2), el sucesor de ifconfig (net-tools)

Mostrar los dispositivos de red y su configuración.

Configuración IP detallada.

ip addr show
 
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default 
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
 
2: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 44:8b:4b:24:c0:29 brd ff:ff:ff:ff:ff:ff
    inet 192.168.178.33/24 brd 192.168.178.255 scope global enp2s0
       valid_lft forever preferred_lft forever
    inet6 fe40::468a:5bff:fb24:c029/64 scope link 
       valid_lft forever preferred_lft forever

Configuración IP básica (se lee mejor al acceder a la información relevante directamente).

ip -br addres show 
lo               UNKNOWN        127.0.0.1/8 ::1/128 
enp2s0           UP             192.168.178.50/24 2001:16b8:2886:8400:468a:5bff:fb24:c029/64 fe80::468a:5bff:fe24:c029/64 
ppp0             UNKNOWN        172.27.0.2 peer 1.1.1.1/32 
vboxnet0         UP             192.168.1.1/24 fe80::800:27ff:fe00:0/64 
vboxnet1         DOWN           
vboxnet2         DOWN           
vboxnet3         DOWN           
vboxnet4         DOWN           

Activar / Desactivar el dispositivo de red.

ip link set enp2s0 up
ip link set enp2s0 down

Cambiar el nombre de una interfaz (enp2s0 > eth0).

ip link set enp2s0 down
ip link set enp2s0 name eth0
ip link set eth0 up

Asignar / Eliminar dirección IP.

ip address add 192.168.0.33 dev enp2s0
ip address del 192.168.0.33 dev enp2s0
ip addr flush dev enp2s0   # Elimina todas las IPs de una interfaz.

Crear una interfaz virtual.

ip addr add 10.0.0.1/8 dev enp2s0 label enp2s0:1

Motrar tabla ARP. Además de la tabla ARP, muestra el estado de esas IPs vecinas: accesible, permanente, obsoleto y retrasado..

ip neigh
192.168.178.1 dev enp2s1 lladdr 24:65:21:bc:e1:1e REACHABLE
fe80::2665:21ff:febc:e11e dev enp2s1 lladdr 24:65:21:bc:e1:1e router REACHABLE

Agregar entrada a la tabla ARP.

 ip neigh add 192.168.0.1 lladdr 00:AA:BB:CC:DD:EE nud permanent dev enp2s0

Borrar entradas de la tabla ARP.

ip -s -s n flush 192.168.1.5
ip -s -s n flush all # Todas.

Mostrar tabla ARP.

ip neighbour

Mostrar estadísticas de las interfaces de red.

ip -s link

Establecer / Borrar una ruta.

ip route add 10.10.20.0/24 via 192.168.0.2 dev eth0
ip route del 10.10.20.0/24

Establecer la ruta predeterminada.

ip route add default via 192.168.0.1

Mostrar rutas.

ip route show

Cambiar el txqueuelen (10000).

ip link set txqueuelen 10000 dev enp2s0

Cambiar el MTU (5000).

ip link set mtu 5000 dev enp2s0

NOTA: Se puede utilizar solo las primera/s letra/s a la hora de ejecutar los comandos ip (ip n = ip neighbour, ip a = ip addr,…).

Forzar a los procesos a utilizar una determinada interfaz de red / IP

Con el comando ip se pueden configurar también “espacios de nombres de red”. Una instalación de Linux comparte un solo conjunto de interfaces de red y tablas de rutas.Se pueden modificar las entradas de la tabla de enrutamiento, pero estas afectan de manera general a todas las aplicaciones del sistema. La posibilidad de crear y configurar múltiples espacios de nombres permite tener instancias diferentes y separadas de interfaces de red y tablas de enrutamiento, las cuales operan de manera independiente una de otras.

Esto nos permite por ejemplo indicar qué aplicación o aplicaciones debe usar qué interfaz / ruta. Para ello se utiliza el objeto netns como se ve en este ejemplo, donde se crea un espacio de nombres de red “XXX”.

# Se crea un nuevo espacio de direcciones XXX.
ip netns add XXX                                              
# Se asocia a ese espacio la interfaz eth1.
ip link set eth2 netns XXX                    
# Se le asigna una IP. 
ip netns exec XXX ip address add 192.168.178.23/24 dev eth2   
# Se le asigna una dirección de loopback.
ip netns exec XXX ip address add 127.0.0.1/8 dev lo           
# Se activa la interfaz
ip netns exec XXX ip link set eth2 up                         
# Se genera la ruta predeterminada para ese espacio de direcciones.
ip netns exec XXX ip route add default via 192.168.178.1      
 
# En el ejemplo se ejecuta una shell Bash que usará ese espacio de direcciones.
# Un Ping, servidor del tipo "python -m SimpleHTTPServer", un comando ssh y cualquier otra herramienta lanzada desde esa shell usará el espacio de direcciones XXX, usando únicamente eth2.
ip netns exec XXX bash
 
# Borrar un espacio de nombres de red.
ip netns delete XXX                                  

NOTA: Es posible que se deba configurar el archivo /etc/resolv.conf para agregar servicios DNS una vez asignadas las IPs al espacio de nombres de red.

Para visualizar puertos en uso, debe especificarse el espacio de direcciones, si no comandos como netstat, lsof y demás no verán dichas conexiones al usar de manera predeterminada el espacio de direcciones predeterminado.

ip netns exec XXX lsof -Pni 
ip netns exec XXX netstat -putan

Denegar tráfico a una IP / red mediante el comando ip

Sin necesidad de usar el firewall se puede denegar tráfico simplemente denegando ciertas rutas.

Ejemplo para denegar las IPs de coinhive, usadas para minería en navegadores.

ip route add blackhole 217.182.160.0/20  # Deniega el tráfico a la red de manera silenciosa.
ip route del prohibit 37.187.0.0/16      # Deniega el tráfico a la red enviando un mensaje ICMP "Communication administratively prohibited".
ip route add unreachable 35.193.89.147   # Deniega el tráfico a la IP enviando un mensaje ICMP "Host unreachable".

Consultar la cache de rutas

Kernels anteriores a 3.6

# Consulta la cache.
ip route show cache
 
# Elimina la cache.
ip route flush cache

Kernels posteriores a 3.6.

# Consultar la ruta guardada en caché por destino.
ip route get x.x.x.x
 
# Elimina la cache.
ip route flush cache

Salida del comando ip coloreada

Simplemente se debe agregar la opción “-c” como parámetro, se podría también el siguiente alias para tener siempre la salida coloreada.

alias ip='ip -c'

Enlace de interés: ejecutar_aplicaciones_sobre_conexiones_vpn-ssh