Linux como enrutador: tengo 3 proveedores de Internet, cada uno con su propio módem.
Proveedor1 , que es la dirección de la puerta de enlace 192.168.1.1
Conectado al enrutador Linux eth1 /192.168.1.2
Proveedor2 , dirección de puerta de enlace 192.168.2.1
Conectado al enrutador Linux eth2 /192.168.2.2
Proveedor3 , dirección de puerta de enlace 192.168.3.1
Conectado al enrutador Linux eth3 /192.168.3.2
________
+------------+ /
| | |
+----------------------+ Provider 1 +--------|
__ |192.168.1.2 |192.168.1.1 | /
___/ \_ +------+-------+ +------------+ |
_/ \__ | eth1 | +------------+ /
/ \ eth0| |192.168.2.2 | | |
|Client network -----+ ROUTER eth2|--------------+ Provider 2 +------| Internet
\10.0.0.0/24 __/ | | |192.168.2.1 | |
\__ __/ | eth3 | +------------+ \
\___/ +------+-------+ +------------+ |
|192.168.3.2 | | \
+----------------------+ Provider 3 +-------|
|192.168.3.1 | |
+------------+ \________
Me gustaría enrutar a los clientes en la red 10.0.0.0/24 por IP de origen a diferentes puertas de enlace.
La interfaz con la red del cliente es eth0 /10.0.0.1, que es la puerta de enlace predeterminada para todos los clientes.
Por ejemplo:
10.0.0.11 se debe enrutar al proveedor1 @ eth1
10.0.0.12 se debe enrutar al proveedor2 @ eth2
... y así sucesivamente ...
Creo que necesito usar ip route
y iptables
para SNAT, pero no he descubierto exactamente cómo.
Aquí está el guión que tengo hasta ahora.
El reenvío de ipv4 está habilitado.
#!/bin/bash
# flush tables
ip route flush table connection1
ip route flush table connection2
ip route flush table connection3
# add the default gateways for each table
ip route add table connection1 default via 192.168.1.1
ip route add table connection2 default via 192.168.2.1
ip route add table connection3 default via 192.168.3.1
# add some IP addresses for marking
iptables -t mangle -A PREROUTING -s 10.0.0.11 -j MARK --set-mark 1
iptables -t mangle -A PREROUTING -s 10.0.0.12 -j MARK --set-mark 2
iptables -t mangle -A PREROUTING -s 10.0.0.13 -j MARK --set-mark 3
# add the source nat rules for each outgoing interface
iptables -t nat -A POSTROUTING -o eth1 -j SNAT --to-source 192.168.1.2
iptables -t nat -A POSTROUTING -o eth2 -j SNAT --to-source 192.168.2.2
iptables -t nat -A POSTROUTING -o eth3 -j SNAT --to-source 192.168.3.2
# link routing tables to connections (?)
ip rule add fwmark 1 table connection1
ip rule add fwmark 2 table connection2
ip rule add fwmark 3 table connection3
#default route for anything not configured above should be eth2
Respuestas:
Aquí hay una configuración similar de uno de nuestros enrutadores (con algunas cosas irrelevantes recortadas). Tenga en cuenta que esto maneja entrantes conexiones .
Tenga en cuenta el uso de variables en lugar de números de marca codificados. ¡Mucho más fácil de mantener! Se almacenan en un script separado y se obtienen. Los nombres de las tablas se configuran en
/etc/iproute2/rt_tables
. Los nombres de interfaz están configurados/etc/udev/rules.d/70-persistent-net.rules
.Y las reglas:
Las tablas de enrutamiento se configuran
/etc/network/interfaces
, por lo que quitar una interfaz hace que cambie a usar una diferente:Nota: Si también está filtrando (lo que probablemente sea), también deberá agregar las reglas apropiadas
FORWARD
alACCEPT
tráfico. Especialmente para cualquier tráfico entrante.fuente
ip rule add from 10.0.0.0/24 pref 1400 lookup eth2
y creando las excepciones después.