Tengo un problema bastante extraño. Tengo un servidor con dos interfaces de red eth0
y eth1
. Cada uno está conectado a una red diferente. Cada red tiene un portal de internet. El servidor tiene varias conexiones salientes : http (algunos scripts en los sitios web de raspado del servidor), cliente nfs, cliente samba, cliente dns y un buscador de correo electrónico para nombrar solo algunos.
Por razones por las que no voy a entrar, necesito dividir estos clientes salientes para que el tráfico saliente http, nfs, samba y dns solo se solicite eth0
mientras todo lo demás pasa eth1
.
He leído algunas búsquedas en Google y parece que iptables
es lo que necesitaré, pero realmente no tengo ni idea. Solo estoy acostumbrado a administrar las reglas de firewall entrantes ufw
.
¿Alguien podría comenzar con algunas reglas de ejemplo y decirme cómo hacer que el sistema adopte estas reglas en el arranque? Idealmente sin bloquear mi conexión SSH ( puedo obtener acceso físico, pero prefiero no hacerlo).
Editar Puedo dividir los clientes en dos usuarios si es posible limitar todo el tráfico saliente de una cuenta a una interfaz. en papel que parece que podría ser más fácil.
fuente
iftop
y cada una muestra el tipo correcto de tráfico. Muchas gracias.iptables-save
yiptables-restore
. Si está utilizando NetworkManager, puede configurar scripts de despachador para automatizar el proceso. Desafortunadamente, la página oficial de NM no tiene documentación sobre la característica, pero la documentación de Ubuntu y Arch Linux la menciona.Bueno, la forma " más fácil " debería ser instruir a los programas individuales para que usen una interfaz específica (o la ip de la interfaz. Por ejemplo:
indica a ping que use eth1 como interfaz de origen, mientras que
indica a wget que pase por la interfaz que tiene
10.0.0.1
como dirección IP.Honestamente, no sé si es posible con todos los programas que necesita, pero es un comienzo para recortar las reglas para las que necesita escribir
iptables
y losiproute
programas.Para empezar, debería leer este tutorial sobre múltiples conexiones a Internet . Una buena lectura es también uno de los miles de tutoriales de iptables, EXPECIALLY en
outbound filtering
,process
/pid filtering
yport filtering
.fuente
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
yip rule
para controlar cómo se enrutan los paquetes en función de su interfaz de salida. Para mi ejemplo, asumiré la siguiente red: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
yip 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
: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í: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.Normalmente querrá que la
alternate
tabla se vea similar a lamain
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: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 lamain
tabla normal . El último paso es asegurarse de que todos los clientes que deben usareth0
estén vinculados. Conwget
, 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.fuente