No Linux, a seleção de endereços de origem para conexões de saída pode ser controlada pela tabela de roteamento:
ip route add 10.11.12.0/24 via 10.7.4.1 src 10.7.4.200
Isso é suficiente se você precisar usar endereços de origem diferentes para alguns intervalos IP fixos. No entanto, combinando o poder do netfilter do Linux ( iptables
) com o roteamento de políticas ( ip rule
), você pode obter uma seleção dinâmica do endereço de origem.
O procedimento básico é o seguinte:
- Defina as marcas apropriadas nos pacotes na cadeia
PREROUTING
da tabelamangle
. - Use tabelas de roteamento IP diferentes para pacotes com marcas diferentes (
ip rule add fwmark X table Y
). - Em cada tabela de roteamento, use o endereço
src
necessário para os pacotes.
A configuração do netfilter para marcar os pacotes de acordo com o IP de destino para a configuração "mod 4" pode ser assim:
iptables -A PREROUTING -t mangle -j CONNMARK --restore-mark
iptables -A PREROUTING -t mangle -m mark --mark 0x0 -d 0.0.0.0/0.0.0.3 \
-j MARK --set-mark 1
iptables -A PREROUTING -t mangle -m mark --mark 0x0 -d 0.0.0.1/0.0.0.3 \
-j MARK --set-mark 2
iptables -A PREROUTING -t mangle -m mark --mark 0x0 -d 0.0.0.2/0.0.0.3 \
-j MARK --set-mark 3
iptables -A PREROUTING -t mangle -m mark --mark 0x0 -d 0.0.0.3/0.0.0.3 \
-j MARK --set-mark 4
iptables -A POSTROUTING -t mangle -j CONNMARK --save-mark
(Neste caso em particular, você pode omitir dois comandos CONNMARK
, porque os outros comandos de marcação fornecerão o mesmo resultado para todos os pacotes na mesma conexão; no entanto, para casos mais complexos, como o uso round-robin da origem endereços, esses comandos são necessários para garantir que todos os pacotes na conexão usem a mesma rota.)
A configuração do roteamento IP pode ficar assim:
ip route add default via 10.7.4.1 src 10.7.4.200 table 1
ip route add default via 10.7.4.1 src 10.7.4.201 table 2
ip route add default via 10.7.4.1 src 10.7.4.202 table 3
ip route add default via 10.7.4.1 src 10.7.4.203 table 4
ip rule add fwmark 1 pref 1 table 1
ip rule add fwmark 2 pref 2 table 2
ip rule add fwmark 3 pref 3 table 3
ip rule add fwmark 4 pref 4 table 4