Linux como roteador: Eu tenho 3 provedores de Internet, cada um com seu próprio modem.
Provedor1 , que é o endereço de gateway 192.168.1.1
Conectado ao roteador linux eth1 /192.168.1.2
Provider2 , endereço de gateway 192.168.2.1
Conectado ao roteador linux eth2 /192.168.2.2
Provider3 , endereço de gateway 192.168.3.1
Conectado ao roteador 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 | |
+------------+ \________
Gostaria de rotear os clientes na rede 10.0.0.0/24 por IP de origem para diferentes gateways.
A interface para a rede do cliente é eth0 /10.0.0.1, que é o gateway padrão para todos os clientes.
Por exemplo:
10.0.0.11 deve ser roteado para Provider1 @ eth1
10.0.0.12 deve ser roteado para Provider2 @ eth2
... e assim por diante ...
Eu acho que preciso usar ip route
e iptables
para o SNAT, mas ainda não descobri exatamente como.
Aqui está o script que eu tenho até agora.
o encaminhamento de ipv4 está ativado.
#!/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
Respostas:
Aqui está uma configuração semelhante de um de nossos roteadores (com algumas coisas irrelevantes cortadas). Observe que isso também lida com conexões de entrada .
Observe o uso de variáveis em vez de números de marca codificados. Muito mais fácil de manter! Eles são armazenados em um script separado e originados. Os nomes das tabelas são configurados
/etc/iproute2/rt_tables
. Os nomes da interface estão definidos/etc/udev/rules.d/70-persistent-net.rules
.E as regras:
As tabelas de roteamento são configuradas
/etc/network/interfaces
para que a desativação de uma interface mude para o uso de uma interface diferente:Nota: Se você estiver fazendo filtragem também (o que provavelmente é), também precisará adicionar as regras apropriadas
FORWARD
aoACCEPT
tráfego. Especialmente para qualquer tráfego de entrada.fonte
ip rule add from 10.0.0.0/24 pref 1400 lookup eth2
e criando as exceções posteriormente.