Tengo dos conexiones a Internet de dos ISP diferentes y necesito equilibrar el tráfico que se origina hacia y desde mi red entre los dos ISP. Estoy usando Debian GNU / Linux.
Mi configuración es así:
eth0
(192.168.0.0/24) - Red local
eth1
(192.168.1.0/24) - ISP # 1
eth2
(192.168.2.0/24) - ISP # 2
Mi red local está conectada a este servidor a través de eth0 y la caja es el servidor DHCP cum Gateway para todas las máquinas en la LAN.
El servidor necesita hacer un equilibrio de carga entre los dos ISP y también debe hacer NAT.
He seguido las instrucciones de enrutamiento en lartc.org pero todavía necesito instrucciones para hacer el NAT correctamente.
Cualquier ayuda será apreciada.
PD: sé sobre pFsense pero necesito usar Linux.
linux
networking
load-balancing
nat
local-area-network
Baishampayan Ghose
fuente
fuente
Respuestas:
He realizado el equilibrio de carga utilizando los métodos lartc.org e iptables , y encuentro que el método iptables es más fácil de entender e implementar. El único inconveniente es que necesita una versión de iptables bastante reciente para poder usar el módulo de estadística
Supongamos algunas cosas:
LAN: eth0: 192.168.0.1/24
ISP1: eth1: 192.168.1.1/24, gateway: 192.168.1.2/24
ISP2: eth2: 192.168.2.1/24, puerta de enlace: 192.168.2.2/24
Así que así es como lo haría usando el método iptables:
Tablas de ruta
Primero edite / etc / iproute2 / rt_tables para agregar un mapa entre los números de la tabla de ruta y los nombres de ISP
Entonces las tablas 10 y 20 son para ISP1 e ISP2, respectivamente. Necesito completar estas tablas con rutas desde la tabla principal con este fragmento de código (que he tomado de hxxp: //linux-ip.net/html/adv-multi-internet.html)
Y agregue la puerta de enlace predeterminada a ISP1 a través de la puerta de enlace de ese ISP1:
Haga lo mismo para ISP2
Entonces ahora tengo 2 tablas de rutas, 1 para cada ISP.
Iptables
OK, ahora uso iptables para distribuir paquetes de manera uniforme en cada tabla de rutas. Puede encontrar más información sobre cómo funciona este trabajo aquí ( http://www.diegolima.org/wordpress/?p=36 ) y aquí ( http://home.regit.org/?page_id=7 )
NAT
Bueno, NAT es fácil:
fuente
La respuesta de mefat me ayudó mucho, pero en lugar de una copia única de todas las reglas de la tabla principal en las dos tablas de ISP, un mejor enfoque podría ser usar el prio de regla para agregar las reglas predeterminadas después de la tabla principal.
Configure / etc / iproute2 / rt_tables como de costumbre:
Tenga en cuenta que
Muestra las reglas 0-> local, 32766-> main y 32767-> default. Ver
man ip
para más detalles.Crucialmente, el proceso de enrutamiento funcionará desde las reglas de prio bajo a las de prio alto ... pero 32767 no es la regla más alta #. Entonces, si la tabla de enrutamiento principal no tiene una ruta predeterminada (pero puede contener todo tipo de rutas que cambian dinámicamente para vpns, etc.), si no se realiza una coincidencia, se convierte en predeterminada (normalmente vacía) y luego busca reglas de prio más altas.
Vea la sección 'tirar' aquí: http://linux-ip.net/html/routing-tables.html
Así que ahora configura
y para asegurarse de que se vean después de la mesa principal:
Utilizar
nuevamente para verificar que estas reglas son más altas que las principales
Luego use CONNMARK destrozando como mefat dijo:
Cosas a tener en cuenta: pppd necesita lo
nodefaultroute
contrario, se configura en main; cuando un dispositivo se reinicia, las tablas ISP1 / ISP2 se limpian, por lo que deben restaurarse mediante un script.Yo uso un script en /etc/ppp/ip-{up,down}.d/dual-routing
Este es un equilibrio de carga basado en la conexión, así que voy a ver el uso de la carga para monitorear y reemplazar la regla de estadísticas:
iptables -t mangle -R PREROUTING <n>
desde el espacio del usuario. Entonces, si hay una descarga de larga duración en una conexión y la otra conexión está ligeramente cargada, deberíamos preferir la conexión con poca carga.fuente