Roteamento de acesso externo com 2 links

Iniciado por wasen, 22 de Janeiro de 2010, 10:56

tópico anterior - próximo tópico

wasen

Saudações!

Tenho aqui na empresa um firewall Ubuntu 9.04 e preciso configurar acesso externo via VNC para uma máquina da rede.

Já criei as regras de NAT no IP tables e o acesso funciona perfeitamente quando ele é feito pelo link que é está configurado como o default gateway.

Mas quando ele é feito pelo outro link que não é o gateway o acesso não funciona. Preciso fazer ele funcionar pelo link que não é o gateway.

Tentei fazer roteamento com marcação de pacotes não consegui fazer funcionar.

Eu não tenho muita experiência com este tipo de configurações de roteamento e marcação de pacotes. Alguém pode me dar uma luz?

Os dados são os seguintes

Interface lan: eth2  Rede:10.0.0.0/255.255.255.0

Interface wan link 1: eth1  Rede:192.168.1.0/255.255.255.0  Modem: 192.168.1.254 (este é o default gateway)

Interface wan link 2: eth3  Rede:192.168.254.0/255.255.255.0  Modem: 192.168.254.254

Portas que utilizo para VNC de 5500 à 5510

fabio2paolini

Apenas para esclarecer um pouco a situação. Você tem um PC com 3 interfaces de rede, são elas eth1, eth2 e eth3. A interface eth2 está ligada na rede local enquato as eth1 e eth3 são ligadas a um modem que conecta a internet. É isso?

wasen

Citação de: fabio2paolini online 22 de Janeiro de 2010, 11:23
Apenas para esclarecer um pouco a situação. Você tem um PC com 3 interfaces de rede, são elas eth1, eth2 e eth3. A interface eth2 está ligada na rede local enquato as eth1 e eth3 são ligadas a um modem que conecta a internet. É isso?

Isso mesmo.

fabio2paolini

Certo, mas ainda há algumas dúvidas. Você tem problemas apenas para fazer a conexão via VNC?
As máquinas locais enxergam o gateway usando ping, por exemplo?
Você está tentando acessar o gateway de uma máquina local por VNC, para depois, por exemplo, acessar a net, correto?

Adiantando um pouco, nas informações que você postou não foi dito o número de IP da interface eth2, mas apenas a rede a que ela pertence.

wasen

Citação de: fabio2paolini online 22 de Janeiro de 2010, 11:51
Certo, mas ainda há algumas dúvidas. Você tem problemas apenas para fazer a conexão via VNC?
As máquinas locais enxergam o gateway usando ping, por exemplo?
Você está tentando acessar o gateway de uma máquina local por VNC, para depois, por exemplo, acessar a net, correto?

Adiantando um pouco, nas informações que você postou não foi dito o número de IP da interface eth2, mas apenas a rede a que ela pertence.

Só pra esclarecer um pouco mais: meu objetivo é que "qualquer" máquina na web possa acessar o VNC em uma máquina na minha LAN.

Quando este acesso é feito através do link que é o default gateway este acesso funciona! Logo as configurações de NAT devem estar certas.

Quando o acesso é feito através do link que não é o default gateway, ele não funciona.

Regras de NAT
-A PREROUTING -p tcp -m tcp --dport 5501 -j DNAT --to-destination 10.0.0.75:5500
-A PREROUTING -p tcp -m tcp --dport 5504 -j DNAT --to-destination 10.0.0.73:5500

Quando o acesso é feito através da porta 5501 cai no IP 10.0.0.75, quando pela porta 5504 cai no IP 10.0.0.73. Isto funciona, só que apenas com o link gateway. É como se o acesso feito pelo link não gateway tentasse retornar pelo outro link.

fabio2paolini

Ok, agora ficou claro. Não sou muito experiente com iptables.  Mas você poderia incluir o ip de destino, deixando a regra assim

iptables -t nat -A PREROUTING -p tcp -m tcp -d <ip-conexão-externa> --dport 5501 -j DNAT --to-destination 10.0.0.75:5500
iptables -t nat -A PREROUTING -p tcp -m tcp -d <ip-conexão-externa> --dport 5504 -j DNAT --to-destination 10.0.0.73:5500

Você poderia também tentar trocar -A por -I, para o caso de haver alguma outra regra anterior bloqueando esta conexão.

Uma coisa que não entendi, é como a sua conexão externa (wan) tem um IP do tipo 192.168.1.254, que se refere a um IP local.
Há  algum roteador entre seu modem da net e as conexões eth1 e eth3?

wasen

Citação de: fabio2paolini online 22 de Janeiro de 2010, 12:42
Ok, agora ficou claro. Não sou muito experiente com iptables.  Mas você poderia incluir o ip de destino, deixando a regra assim

iptables -t nat -A PREROUTING -p tcp -m tcp -d <ip-conexão-externa> --dport 5501 -j DNAT --to-destination 10.0.0.75:5500
iptables -t nat -A PREROUTING -p tcp -m tcp -d <ip-conexão-externa> --dport 5504 -j DNAT --to-destination 10.0.0.73:5500

Na verdade eu fiz da seguinte forma: no modem, direcionei as portas de 5500 á 5510 todas para o firewall. No firewall fiz o NAT para redirecionar para as máquinas da LAN conforme a porta que foi acessada. Se eu fizer como você sugeriu não funcionará pois o IP destino dos pacotes será o firewall e não o IP externo.

Eu tentei filtrar pela interface de entrada, mas também não funcionou:

-A PREROUTING -i eth3 -p tcp -m tcp --dport 5501 -j DNAT --to-destination 10.0.0.75:5500
-A PREROUTING -i eth3 -p tcp -m tcp --dport 5504 -j DNAT --to-destination 10.0.0.73:5500


Citação de: fabio2paolini online 22 de Janeiro de 2010, 12:42
Você poderia também tentar trocar -A por -I, para o caso de haver alguma outra regra anterior bloqueando esta conexão.

Uma coisa que não entendi, é como a sua conexão externa (wan) tem um IP do tipo 192.168.1.254, que se refere a um IP local.
Há  algum roteador entre seu modem da net e as conexões eth1 e eth3?


Este é o IP do modem na LAN, o IP real dele é variável.

Estou dando uma olhada num script chamado HTB para fazer QOS e roteamento. Alguém conhece ele? Ou outra solução?

zekkerj

CitarÉ como se o acesso feito pelo link não gateway tentasse retornar pelo outro link.

É exatamente o que acontece, quem está dentro vai tentar sair sempre pelo gateway.

A solução mais simples seria fazer SNAT, substituindo o endereço de origem pelo endereço da interface, e assim forçar o pacote a voltar pra mesma interface, na saída. Só que o SNAT é feito na cadeia POSTROUTING, e nessa cadeia o pacote não guarda informação da interface de entrada. Restaria a vc usar o endereço externo de origem, mas se vc já redirecionou o pacote pra rede interna, ele já teve o endereço externo, e sim o interno.

Não vou dizer que não tem como fazer, mas vai ser bem mais simples se vc limitar o serviço a apenas uma das interfaces.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

wasen

Citação de: zekkerj online 22 de Janeiro de 2010, 13:44

Não vou dizer que não tem como fazer, mas vai ser bem mais simples se vc limitar o serviço a apenas uma das interfaces.

Na verdade é o que eu quero fazer, só que quero limitar este acesso ao link que não é o gateway mas mesmo assim não sei como fazer. Eu só utilizei o outro para fazer testes.

fabio2paolini

Como esta a tabela de rotas do pc?
Caso o pacote esteja saindo pelo outro gateway, então
será que se você especificar que as rotas a rede 10.0.0.0 devem ser através da interface eth2 não funciona?
Provavelmente a situação já é esta, mas talvez ..

fabio2paolini

Há também a possibilidade de incluir a interface de saída na regra, algo como


-A PREROUTING  -p tcp -m tcp --dport 5501 -j DNAT -o eth2 --to-destination 10.0.0.75:5500
-A PREROUTING  -p tcp -m tcp --dport 5504 -j DNAT -o eth2  --to-destination 10.0.0.73:5500


E sobre a possibilidade de se trocar -A por -I? Eu já tive casos em que essa troca funcionou.

wasen

Citação de: fabio2paolini online 22 de Janeiro de 2010, 14:10
Como esta a tabela de rotas do pc?
Caso o pacote esteja saindo pelo outro gateway, então
será que se você especificar que as rotas a rede 10.0.0.0 devem ser através da interface eth2 não funciona?
Provavelmente a situação já é esta, mas talvez ..

Na verdade eth2 é a interface de comunicação com a rede 10.0.0.0.
O fluxo de saída default é eth1 mas preciso que quando o acesso seja feito através de eth3 ele retorno por eth3.

wasen

Citação de: fabio2paolini online 22 de Janeiro de 2010, 14:21
Há também a possibilidade de incluir a interface de saída na regra, algo como


-A PREROUTING  -p tcp -m tcp --dport 5501 -j DNAT -o eth2 --to-destination 10.0.0.75:5500
-A PREROUTING  -p tcp -m tcp --dport 5504 -j DNAT -o eth2  --to-destination 10.0.0.73:5500


E sobre a possibilidade de se trocar -A por -I? Eu já tive casos em que essa troca funcionou.

Estas são as primeiras regras de PREROUTING .  :-[

zekkerj

CitarHá também a possibilidade de incluir a interface de saída na regra, algo como ...
Não na cadeia PREROUTING. É o mesmo problema da cadeia POSTROUTING, ao contrário.

"-i" só é válido nas cadeias INPUT, FORWARD e nat/PREROUTING.

"-o" só é válido nas cadeias OUTPUT, nat/OUTPUT, FORWARD e nat/POSTROUTING.

CitarNa verdade é o que eu quero fazer, só que quero limitar este acesso ao link que não é o gateway mas mesmo assim não sei como fazer. Eu só utilizei o outro para fazer testes.
Não tem como fazer isso. Os pacotes entram por qualquer interface, mas o retorno só acontece pelo gateway.

Não é questão de iptables, e sim de roteamento.

Talvez a gente possa tentar mudar a forma como o balanceamento de carga está sendo feito, de forma que ele respeite sempre as conexões de entrada, na hora de escolher a interface de saída. Mas nesse caso vc tem que mostrar como fez o seu balanceamento de carga.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D

wasen

Citação de: zekkerj online 22 de Janeiro de 2010, 16:31

Talvez a gente possa tentar mudar a forma como o balanceamento de carga está sendo feito, de forma que ele respeite sempre as conexões de entrada, na hora de escolher a interface de saída. Mas nesse caso vc tem que mostrar como fez o seu balanceamento de carga.

Deixa eu dar uma visão mais ampla da questão:

eth2= lan
eth1= link adsl de 10mbps com IP variavel
eth3= link adsl de 600kbps com IP fixo

Hoje funciona assim: meu default gateway é eth1. Para o eth3 eu criei algumas rotas estáticas para alguns IPs onde nosso acesso é restrito ao nosso de IP fixo.

O que pretendo: utilizar meu llink com IP fixo (eth3) para receber conexões VNC e HTTP.

Isto não está funcionando pelo fato de que eth3 não é o gateway.