[GTER] Roteamento avançado em Linux
Amauri Tiago Marx
amauri at unoescsmo.edu.br
Tue May 13 15:15:25 -03 2008
Prezados colegas, estou com uma dúvida sobre roteamento avançado em Linux.
Segue minha dúvida (espero que a fonte do desenho abaixo seja mantida).
Possuo um roteador linux que é o responsável pela roteamento da rede
local para a Internet através de 2 links de internet.
+-----------+ /-------
| | |
+-------------+ WAN 1 +-------
__ | | | /
___/ \_ +------+--------+ +-----------+ |
_/ \__ | eth0 | /
/ \ | | |
| 192.168.1.0/24-----+ eth1 Linux 1 | | Internet
\_ __/ | | |
\__ __/ | eth2 | \
\___/ +------+--------+ +-----------+ |
| | | \
+-------------+ WAN 2 +-------
| | |
+-----------+ \-------
A rede local (eth1) é 192.168.1.0/24.
A rede Wan 1 (eth0) é 200.XXX.XXX.0/24
A rede Wan 2 (eth2) é 200.200.XX.248/29
No roteador Linux há 3 interfaces, eth0 com o endereço 200.XXX.XXX.13,
eth1 com o endereço 192.168.1.1 (gw da rede local), eth2 com o
endereço 200.200.XX.250.
O gateway default do roteador é o endereço da WAN 1, 200.XXX.XXX.254.
Imagine que eu tenha tenha meus servidores na rede 192.168.1.0/24.
Exemplo: servidor web em 192.168.1.24, fazendo NAT para a wan 1 com o
endereço 200.XXX.XXX.24.
Desta forma no meu Linux router eu tenho um endereço virtual na eth0
(eth0:24) com o endereço 200.XXX.XXX.24 e faço as seguintes regras:
iptables -t nat -A PREROUTING -d 200.XXX.XXX.24 -j DNAT --to 192.168.1.24
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -d 192.168.1.24 -j
SNAT --to 192.168.1.1
iptables -t nat -A POSTROUTING -s 192.168.1.24 -j SNAT --to 200.XXX.XXX.24
Até aqui tudo ok, qualquer host da rede local consegue acessar os
servidores, tanto pelo endereço interno (192.168.1.24), quanto pelo
endereço externo (200.XXX.XXX.24).
Até este ponto eu ainda não citei a WAN 2. Vamos lá!
Eu tenho outro roteador (Linux 2) na rede local com o endereço
192.168.1.4, criando outra rede interna 192.168.80.0/24.
Desta forma, eu gostaria que tudo que vier do endereço 192.168.1.4
saia pela WAN 2, com excessão do que for para o endereço interno, que
gostaria que fosse resolvido localmente, sem sair para a Internet.
Neste ponto eu me perdi!
Fiz o seguinte:
No roteador Linux 1, adicionei o endereço 200.200.XX.250 para a eth2 e
criei outra tabela de roteamento no arquivo /etc/iproute2/rt_tables,
conforme abaixo:
200 link_wan2
Após, acrescentei as seguintes regras no iptables:
iptables -A PREROUTING -t mangle -s 192.168.1.4 -j MARK --set-mark 1
iptables -A OUTPUT -t mangle -s 192.168.1.4 -j MARK --set-mark 1
ip rule add fwmark 1 table link_wan2
ip route add default via 200.200.XX.249 dev eth2 table link_wan2
ip route flush cache
Desta forma, consegui fazer com que todos os pacotes que vierem do
endereço 192.168.1.4 saiam pela WAN 2.
Entretanto, quando tento acessar os endereços dos servidores que fazem
NAT da WAN 1 não funciona, ou seja, os clientes atrás do roteador
192.168.1.4 não conseguem acessar os servidores pelo endereço válido
200.XXX.XXX.24.
Parece que ele resolve os endereços de NAT para os ips internos dos
servidores (192.168.1.x) e perde a comunicação ou a volta para o
endereço gw da WAN 2 (200.200.XX.x).
Alguma sugestão?
Muito obrigado,
Amauri
More information about the gter
mailing list