Alterar endereço de origem com base no IP de destino

2

Temos várias máquinas "roteadoras" que reúnem muitos endereços IP externos no mesmo host e redirecionam, NAT ou enviam proxy ao tráfego para a rede interna. Eles também atuam como roteadores para as máquinas na rede interna. Isso funciona bem, mas não consigo criar a tabela de roteamento, portanto, posso alterar o endereço de origem, com base no destino que uma máquina da rede interna deseja acessar.

Digamos que eu tenha um roteador com endereços públicos P1 (5.5.5.1/24) e P2 (5.5.5.2/24) . Todo o tráfego passa por P1 , mas, se necessário, o host também pode ser acessado em P2 . Isso parece com isso e funciona bem:

> ip addr
...
1: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether aa:bb:cc:dd:ee:11 brd ff:ff:ff:ff:ff:ff
    inet 5.5.5.1/24 brd 5.5.5.255 scope global eth1
    inet 5.5.5.2/24 brd 5.5.5.255 scope global secondary eth1:p2
...

Agora, quero usar P2 como o endereço de origem, se eu quiser acessar o serviço DNS do Google, por exemplo ( 8.8.8.8 ). Então eu adiciono uma linha na tabela de roteamento como:

> ip route add 8.8.8.8 via 5.5.5.254 dev eth1 src 5.5.5.2
> ip route
...
default via 5.5.5.254 dev eth1
5.5.5.0/24 dev eth1  proto kernel  scope link  src 5.5.5.1
8.8.8.8 via 5.5.5.254 dev eth1  src 5.5.5.2 
...

Mas isso não funciona. Se eu pingar 8.8.8.8 , o host ainda usa P1 como endereço de origem e não usa P2 para conexões de saída.

Estou fazendo certo? Eu acho que não ...

    
por hgj 04.11.2013 / 10:58

2 respostas

2

O fato de você poder fazer ping no destino com o endereço IP correto do host, mas não da rede interna (se eu ler seu comentário corretamente), sugere que você tenha o NAT ativado para a rede interna.

Nesse caso, você deve verificar as regras do iptables e editar as regras SNAT ou MASQUERADE. Por exemplo:

iptables -A POSTROUTING -s <your-internal-network> -d 8.8.8.8 -o eth1 \
-j SNAT --to-source 5.5.5.2

Por favor, note que isto só fará com que o tráfego de rede interna enviado venha do IP desejado (5.5.5.2 no exemplo), você ainda precisa de regras / tabelas iproute para fazer as mesmas regras se aplicarem ao roteador. (Conexões vindas do próprio roteador.)

    
por 04.11.2013 / 15:57
0

Você precisa configurar tabelas de roteamento específicas para cada conexão, o que é conhecido como roteamento baseado em política. Cada tabela tem uma política, em que você pode definir o endereço de origem e outras opções, se precisar.

No seu caso, você adicionaria novas tabelas:

echo 200 P1 >> /etc/iproute2/rt_tables
echo 200 P2 >> /etc/iproute2/rt_tables

Adicionar nas rotas:

ip route add 5.5.5.0/24 dev eth1 src 5.5.5.1 table P1
ip route add default via 5.5.5.254 table P1
ip route add 5.5.5.0/24 dev eth1 src 5.5.5.2 table P2
ip route add default via 5.5.5.254 table P2
ip route add 8.8.8.8 via 5.5.5.254 table P2

Este é o bit importante, onde você diz para responder com o mesmo IP que recebeu a conexão.

ip rule add from 5.5.5.1 table P1
ip rule add from 5.5.5.2 table P2

Você pode adicionar quantas tabelas quiser, mas lembre-se de que todas elas precisarão de uma rota padrão, uma interface de origem e um endereço de origem. Assim, quando um pacote for roteado pela tabela, o endereço de origem será definido corretamente. usará a interface correta.

Dê uma olhada nessas páginas, ele fornece muitas informações adicionais sobre como configurar esse tipo de tabela:

link

    
por 04.11.2013 / 12:32