La tabla de enrutamiento se usa en el orden de más específico a menos específico.
Sin embargo, en Linux es un poco más complicado de lo que cabría esperar. En primer lugar, hay más de una tabla de enrutamiento, y cuándo se utiliza dicha tabla de enrutamiento depende de una serie de reglas.
Para obtener la imagen completa:
$ ip rule show
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
$ ip route show table local
broadcast 127.0.0.0 dev lo proto kernel scope link src 127.0.0.1
local 127.0.0.0/8 dev lo proto kernel scope host src 127.0.0.1
local 127.0.0.1 dev lo proto kernel scope host src 127.0.0.1
broadcast 127.255.255.255 dev lo proto kernel scope link src 127.0.0.1
broadcast 192.168.0.0 dev eth0 proto kernel scope link src 192.168.1.27
local 192.168.1.27 dev eth0 proto kernel scope host src 192.168.1.27
broadcast 192.168.1.255 dev eth0 proto kernel scope link src 192.168.1.27
$ ip route show table main
default via 192.168.1.254 dev eth0
192.168.0.0/23 dev eth0 proto kernel scope link src 192.168.1.27
$ ip route show table default
$
La local
tabla es la tabla de enrutamiento especial que contiene rutas de control de alta prioridad para direcciones locales y de difusión.
La main
tabla es la tabla de enrutamiento normal que contiene todas las rutas no políticas. Esta es también la tabla que puede ver si simplemente ejecuta ip route show
(o ip ro
para abreviar). Recomiendo no usar el route
comando anterior, ya que solo muestra la main
tabla y su formato de salida es algo arcaico.
La tabla default
está vacía y reservada para el procesamiento posterior si las reglas predeterminadas anteriores no seleccionaron el paquete.
Puede agregar sus propias tablas y agregar reglas para usarlas en casos específicos. Un ejemplo es si tiene dos conexiones a Internet, pero un host o subred siempre debe enrutarse a través de una conexión a Internet en particular.
El libro Policy Routing with Linux explica todo esto con exquisito detalle.