Solución 1:
Al agregar una ruta a un host multitarjeta, es posible que desee tener control sobre la dirección IP de origen desde la que envía su host al iniciar las comunicaciones mediante esta ruta. Esto es lo que src es para.
Un breve ejemplo:tiene un host con dos interfaces y las direcciones IP 192.168.1.123/24 y 10.45.22.12/24. Está agregando una ruta a 78.22.45.0/24 a través de 10.45.22.1 y quiere asegurarse de que no está enviando a 78.22.45.0/24 usando la dirección 192.168.1.123 (tal vez porque la red 78.22.45.0/24 no tiene ruta de regreso a 192.168.1.0/24 o porque no quiere que su tráfico tome esta ruta por una u otra razón):
ip route add 78.22.45.0/24 via 10.45.22.1 src 10.45.22.12
Tenga en cuenta que el src que está dando solo afectaría el tráfico que se origina en su propio host. Si se enruta un paquete externo, obviamente ya tendría una dirección IP de origen, por lo que se transmitiría sin cambios (a menos que esté usando NAT, por supuesto, pero esto es un asunto completamente diferente). Además, esta configuración puede ser anulada por un proceso que elige específicamente vincularse a una dirección específica en lugar de usar los valores predeterminados al iniciar las conexiones (bastante raro).
Solución 2:
El src
El atributo es una sugerencia que utiliza el algoritmo de selección de direcciones . Es importante cuando un host tiene varias direcciones IP, que suele ser, aunque no siempre, cuando tiene varias interfaces. Si bien existen otras reglas que influyen en la selección de direcciones, y una aplicación de red también puede anular el algoritmo de selección mediante el uso de llamadas al sistema como bind()
, el src
El atributo es una forma de usar una búsqueda en la tabla de enrutamiento para responder a la pregunta:"Si quiero iniciar una conexión con el host X, ¿cuál de mis direcciones debo usar?"
Aquí hay un ejemplo para ilustrar el uso y el efecto del src
atributo. Para aclarar que esto está relacionado con direcciones y rutas, no estrictamente con interfaces, este host de ejemplo tiene solo una interfaz de red pero dos direcciones. Además, ambas direcciones están en la misma subred para enfatizar el hecho de que no hay otra forma obvia de elegir cuál usar.
$ ip -4 addr show dev eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
inet 10.1.0.2/24 brd 10.1.0.255 scope global eth0
inet 10.1.0.16/24 scope global secondary eth0
$ ip route list dev eth0
10.1.0.32/27 scope link src 10.1.0.16
10.1.0.0/24 proto kernel scope link src 10.1.0.2
Este host puede comunicarse con cualquiera de las otras 252 direcciones en esta subred /24 desde cualquier dirección, pero de forma predeterminada utilizará 10.1.0.16 al iniciar una conexión con 10.1.0.32 a 10.1.0.63 y utilizará 10.1.0.2 para el resto.
Si el host responde, en lugar de iniciar, responderá desde la dirección de destino de la solicitud. Por ejemplo, si otro host en 10.1.0.32 se conecta a este host en 10.1.0.2, la respuesta provendrá de 10.1.0.2 aunque no coincida con el src
atributo de la ruta de regreso.