===== 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: 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: 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]]