El enrutamiento es la forma en que las computadoras se comunican en una red local o por Internet. Para comunicarse a través de una red, las computadoras necesitan saber a qué puerta de enlace deben enviar tráfico. Una puerta de enlace podría ser un enrutador en su red.
El comando de ruta se usa en Linux para mostrar y cambiar la tabla de enrutamiento IP.
En este tutorial, explicaré cómo usar el comando de ruta para agregar rutas estáticas a través de la puerta de enlace para enviar tráfico.
1) Mostrar la tabla de enrutamiento
Antes de editar la tabla de enrutamiento, es bueno ver la tabla predeterminada con las rutas existentes en su Kernel de Linux.
Use el comando de ruta con el -n
opción para mostrar la tabla de enrutamiento de IP del kernel actual. Este comando ayuda a identificar las redes conectadas localmente con su ruta.
El siguiente comando muestra la tabla de enrutamiento:
$ route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 600 0 0 eno1
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eno1
172.16.20.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet8
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-707c8e2f7441
192.168.1.0 0.0.0.0 255.255.255.0 U 600 0 0 eno1
192.168.161.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet1
También puede usar netstat -nr
Comando para imprimir conexiones de red, tablas de enrutamiento, estadísticas de interfaz, conexiones enmascaradas y membresías de multidifusión.
Muestre la tabla de enrutamiento con el comando netstat:
$ netstat -nr
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eno1
169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eno1
172.16.20.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet8
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-707c8e2f7441
192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eno1
192.168.161.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet1
Ahora tenemos el comando ip para mostrar rutas
$ ip route show
2) Añadir una nueva ruta
Como dijimos anteriormente, para manipular la tabla de enrutamiento, usamos route add
comando (agregar es la opción) para indicar manualmente una ruta estática que los paquetes usarán a través de la red. Se utiliza para asignar una ruta estática temporal que cambiará solo si el administrador modifica manualmente los valores de la nueva ruta.
Hay muchas posibilidades para usar el añadir ruta comando.
Debemos indicar la red de destino, la máscara de subred de la red y la puerta de enlace a utilizar.
route add -net <network_address> gw <gateway> <interface_name>
Alternativamente, ahora puede usar ip route
comando, la sintaxis es la siguiente:
ip route add <network_address> via <gateway> dev <interface_name>
Por ejemplo, agreguemos una nueva red de ruta 10.0.0.0/8 y a través de la dirección IP de la puerta de enlace 192.168.1.1:
# route add -net 10.0.0.0/8 gw 192.168.1.1 eno1
Ahora podemos mostrar la tabla de enrutamiento usando route -n
:
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 600 0 0 eno1
10.0.0.0 192.168.1.1 255.0.0.0 UG 0 0 0 eno1
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eno1
172.16.20.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet8
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-707c8e2f7441
192.168.1.0 0.0.0.0 255.255.255.0 U 600 0 0 eno1
192.168.161.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet1
Puede agregar netmask
opción si desea agregar valor de máscara de red. Si no se proporciona, el comando de ruta encuentra automáticamente el valor de la máscara de red.
# route add -net 192.168.1.0 netmask 255.255.255.0 gw 192.168.1.100 eth0
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
192.168.1.0 192.168.1.100 255.255.255.0 UG 0 0 0 eth0
192.168.1.0 * 255.255.255.0 U 0 0 0 eth0
169.254.0.0 * 255.255.0.0 U 0 0 0 eth0
10.0.0.0 192.168.1.254 255.0.0.0 UG 0 0 0 eth0
default 192.168.1.1 0.0.0.0 UG 0 0 0 eth0
Para agregar una ruta a un host específico, use -host
opción. Solo debemos indicar la puerta de enlace a utilizar.
route add -host <host_IP_address> gw <gateway>
Por ejemplo, agreguemos un host específico '10.0.0.10' y luego mostremos la tabla de enrutamiento
# route add -host 10.0.0.10 gw 192.168.1.1 eno1
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 600 0 0 eno1
10.0.0.0 192.168.1.1 255.0.0.0 UG 0 0 0 eno1
10.0.0.10 192.168.1.1 255.255.255.255 UGH 0 0 0 eno1
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eno1
172.16.20.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet8
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-707c8e2f7441
192.168.1.0 0.0.0.0 255.255.255.0 U 600 0 0 eno1
192.168.161.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet1
En los ejemplos anteriores, la columna de la bandera tiene valores diferentes y eso puede ser incomprensible.
Las posibles banderas y su definición:
U
- la ruta está arriba
H
- el objetivo es un host
G
- usar puerta de enlace
R
- restablecer la ruta para el enrutamiento dinámico
D
- instalado dinámicamente por daemon o redirección
M
- modificado desde demonio de enrutamiento o redirección
A
- instalado por addrconf
C
- entrada de caché
!
- rechazar ruta
3) Rechazar y Eliminar una ruta
Podemos manipular la tabla de enrutamiento no solo para agregar rutas estáticas sino también para eliminar o rechazar una ruta que insertamos antes.
Para eliminar una red de destino de la tabla de enrutamiento, use route del
comando:
route del -net <network_address> gw <gateway> <interface_name>
Por ejemplo, para eliminar la ruta a nuestra red 10.0.0.0/8:
# route del -net 10.0.0.0/8 gw 192.168.1.1 eno1
Salida
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 600 0 0 eno1
10.0.0.10 192.168.1.1 255.255.255.255 UGH 0 0 0 eno1
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eno1
172.16.20.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet8
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-707c8e2f7441
192.168.1.0 0.0.0.0 255.255.255.0 U 600 0 0 eno1
192.168.161.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet1
Para prohibir una dirección IP pero todavía está en la tabla de enrutamiento. Tenga en cuenta que todavía usamos el parámetro de opción de agregar, pero al final del comando, tenemos que usar reject
opción. Podemos conservar nuestra puerta de enlace o no, pero no mencionamos la interfaz de salida.
route add -host <host_IP_address> reject
En el siguiente comando rechazaremos nuestro host '10.0.0.10':
# route add -host 10.0.0.10 reject
Mostrar la tabla de enrutamiento después de los cambios:
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 192.168.1.1 0.0.0.0 UG 600 0 0 eno1
10.0.0.10 - 255.255.255.255 !H 0 - 0 -
10.0.0.10 192.168.1.1 255.255.255.255 UGH 0 0 0 eno1
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eno1
172.16.20.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet8
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-707c8e2f7441
192.168.1.0 0.0.0.0 255.255.255.0 U 600 0 0 eno1
192.168.161.0 0.0.0.0 255.255.255.0 U 0 0 0 vmnet1
Las rutas agregadas usando los comandos anteriores no son persistentes durante un reinicio, por lo que agregamos rutas estáticas al archivo de configuración para mantenerlo permanente.
Para agregar rutas estáticas persistentes para cualquier distribución de Linux, puede usar el archivo genérico /etc/rc.local.
Para Ubuntu y Debian use el archivo llamado '/etc/network/interfaces' y en RHEL/CentOS use '/etc/sysconfig/network-scripts/route-ethX'.
Conclusión
En este tutorial, aprendimos cómo agregar rutas estáticas en Linux usando el comando route add. Debemos tener en cuenta que con ese método, la ruta no cambiará a menos que la modifique. Es importante eliminar rutas que no necesitemos.
Related Read: How to Permanently add Static Route in Linux