La forma correcta de hacerlo es vincular () a la interfaz que desea utilizar para los paquetes salientes. Desde entonces, puede configurar rutas con los comandos ip route
y ip rule
para controlar cómo se enrutan los paquetes en función de su interfaz de salida. Para mi ejemplo, asumiré la siguiente red:
- eth0:
- Dirección: 192.168.0.2/24
- Gateway predeterminado: 192.168.0.1
- eth1:
- Dirección: 192.168.1.2/24
- Gateway predeterminado: 192.168.1.1
Crearé dos tablas de enrutamiento, una para el tráfico saliente para eth0 llamado alternativo y una tabla para eth1 llamada main. La tabla principal de enrutamiento siempre existe y es la tabla normal que utilizan los comandos route
y ip route
. La mayoría de la gente nunca trata con otras mesas. Para crear la tabla llamada alternativa, agregaremos la siguiente línea a /etc/iproute2/rt_tables
:
10 alternate
La tabla main tiene una prioridad predeterminada de 254. El ip rule
comando controla las reglas para las cuales la tabla de enrutamiento está vigente . De manera predeterminada, ese comando imprimirá una lista de reglas existentes que deberían verse así:
0: from all lookup local
32766: from all lookup main
32767: from all lookup default
Básicamente, esto dice que buscará una ruta en la tabla, local
que es una tabla especial mantenida por el núcleo para rutas locales, como mi propia dirección IP. Luego intentará la tabla principal y la tabla predeterminada. La tabla predeterminada normalmente está en blanco, por lo que si no hay coincidencia en main, no hay ruta al host. Primero, vamos a llenar la tabla alternativamente con las reglas para eth0.
sudo ip route add table alternate 192.168.0.0/24 dev eth0
sudo ip route add table alternate 192.168.1.0/24 dev eth1
sudo ip route add table alternate default via 192.168.0.1
Normalmente querrá que la alternate
tabla se vea similar a la main
tabla. Las únicas diferencias son cuando el enrutamiento debe ser diferente. Es posible que no desee incluir la segunda línea anterior si literalmente desea que todo el tráfico NFS, HTTP, etc. vaya a través de la puerta de enlace predeterminada en eth0, incluso si está destinado a la red en eth1. El siguiente paso es agregar una regla sobre cuándo usar esta tabla de enrutamiento alternativa:
sudo ip rule add from 192.168.0.0/24 pref 10 table alternate
Esta regla dice que cualquier tráfico proveniente de una dirección en la red 192.168.0 usará la alternate
tabla de enrutamiento en lugar de la main
tabla normal . El último paso es asegurarse de que todos los clientes que deben usar eth0
estén vinculados. Con wget
, por ejemplo, establecer --bind-address=192.168.0.2
, para NFS establecer elclientaddr=192.168.0.2
Opción de montaje. Si usa LibWWW con Perl, puede configurar la opción localaddr en LWP :: UserAgent para controlar la interfaz local a la que se une. Si tiene un cliente que no puede controlar, la fuente de enlace y compilación no es una opción, es posible que pueda usar una regla de iptables para modificar su dirección, pero esto es más un truco y puede no funcionar. Necesitaría una regla SNAT establecida en la cadena PREROUTING de la tabla nat o de la tabla mangle. Aún necesitará las tablas de enrutamiento modificadas dadas anteriormente para que esto funcione.
iftop
y cada una muestra el tipo correcto de tráfico. Muchas gracias.