+ Responder ao Tópico



  1. #1

    Padrão Redirecionamento dois servidores diferentes

    Pessoal,
    Aqui na empresa tenho dois links em um servidor Debian e utilizo iproute para que determinadas aplicações (como serviços de terminal) saiam por um dois dois links. Funciona corretamente.
    Tenho também um iptables que barra tudo e libera somente portas pré-definidas. O iptables também faz o redirecionamento de um determinado serviço para servidores na rede interna. Tenho por exemplo, um serviço de terminal em uma máquina interna. Também funciona corretamente.
    O que eu preciso agora e não estou conseguindo fazer é que o tráfego que chegar na porta 3389 do link A seja redirecionado para a máquina X da rede interna e o tráfego que chega na mesma porta no link B seja redirecionado para a máquina Y da rede interna. Tem como fazer?

  2. #2

    Padrão Iptables...

    iptables -t nat -A PREROUTING -d A -p tcp --dport 3389 -j SNAT --to X:3389
    iptables -t nat -A PREROUTING -d B -p tcp --dport 3389 -j SNAT --to Y:3389

  3. #3

    Padrão

    Obrigado,
    Mas ainda não funcionou, pois o link 2 está recebendo, o servidor está direcionando corretamente para o endereço da rede interna, mas na hora de voltar, o servidor está mandando o pacote sair pelo link 1 (eth0) ao invés de responder ao link 2 (eth2). Tenho que adicionar algum tipo de rota, mas procurei por vários fóruns e não encontrei resposta que desse certo. Alguma idéia?

  4. #4

    Padrão

    Você pode criar uma regra no iptables para marcar os pacotes que sairem das máquinas X e Y que tiverem como source a porta 3389, e daí com o iproute utilizar essa marca para sairem pelo mesmo link.
    Ex iproute:
    Para máquina X
    iproute add rule from all fwmark 1 lookup link1

    Para máquina Y
    iproute add rule from all fwmark 2 lookup link2

    Isso depois de você ter criado no iptables para inserir essa marca nos pacotes necessários.

    O que deve estar acontecendo é que entra por um link e está querendo sair pelo o outro.

    Também o patch routes que pode ajudar em seu problema: Software, Patches and Docs

  5. #5

    Padrão Obrigado por tentar ajudar

    Obrigado. É exatamente isso que está acontecendo a conexão entra pela eth2 e tenta sair pela eth0. Mas tentei fazer o que você me disse e devo estar fazendo algo errado.

    Veja a parte do script:
    #Define pacotes provenientes da lan com destino 3389 serão enviados p/ eth2
    iptables -t mangle -A PREROUTING -i eth1 -p tcp --dport 1494 -j MARK --set-mark 1 #está saindo pelo link 2
    iptables -t mangle -A PREROUTING -i eth1 -p tcp --dport 1604 -j MARK --set-mark 1 #está saindo pelo link 2
    iptables -t mangle -A PREROUTING -i eth1 -p tcp --dport 3389 -j MARK --set-mark 1 #está saindo pelo link 2
    iptables -t mangle -A PREROUTING -i eth1 -p tcp --dport 491 -j MARK --set-mark 1 #está saindo pelo link 2

    iptables -t mangle -A PREROUTING -s 172.16.1.150 -p tcp --dport 3389 -j MARK --set-mark 2 #Essa que eu quero que saia no link 2 também.
    Mas está voltando pela eth0.
    #######
    ip route add default dev eth2 via 2xx.1xx.1xx.x table intelig
    ip rule add from all fwmark 2 lookup intelig #Acrescentei depois da dica.
    ip rule add fwmark 1 lookup intelig
    ip route flush cached
    #######
    Preciso muito disso funcionando. Se puder, me ajude.

  6. #6

    Padrão

    tem que ter uma regra no iptables pegando o ip do servidor(Term Service) interno marcando com a marca do link 2, por exemplo:

    iptables -t mangle -A PREROUTING -i eth1 -s 192.168.0.1 -t tcp --sport 3389 -j MARK --set-mark 1

    Isso considerando que sua eth1 é a rede interna, e 192.168.0.1 é o ip do servidor interno que você quer que saia pelo link 2.
    Você colocou as regras, mas são para as portas de destino e destino está funcionando, o problema é na volta ou seja, o source que é seu servidor interno, por isso criar uma regra como sport.

  7. #7

    Padrão Vou testar

    Obrigado pela resposta.
    Meu script tá um pouco diferente do seu. Meu servidor do Terminal é o 172.16.1.150, já tinha a regra mas não citava a eth1. Vou testar sua dica e retorno.

  8. #8

    Padrão

    eu tenho um esquema mais ou menos parecido na nossa empresa.

    tenho 2 links adsl onde um é pra internet geral, o outro é pra conexão de um programa que roda a base em postgres.

    a soluçao mais pratica que eu encontrei foi desviar todo o tráfego do servidor postgres para o link 2 da seguinte forma:

    ip rule add from XXX.XXX.XXX.XXX lookup (TABELA DE ROTEAMENTO DO SEGUNDO LINK)

    tentei de várias formas usar a marcação com a tabela mangle pelas portas, mas não funcionou pois a saída pega o segundo modem, mas entrada não, ainda não pesquisei por um jeito de fazer pacotes com destino a uma determinada porta serem aceitos com marcação na tabela mangle...

    Boa sorte!

  9. #9

    Padrão Agradeço a ajuda de todos

    Colegas,
    Agradeço a todos que me ajudaram nessa questão. Realmente tentei com a tabela mangle, mas a solução que deu certo foi a de desviar todo o tráfego do servidor para o link2. No meu caso não vou ter problema com esse cenário.

  10. #10

    Padrão

    É, eu até hoje não consegui fazer com que o tráfego de entrada do link 2 saísse pelo link 2 também, apesar de ter feito milhares de marcações. Estou numa batalha também com um FTP onde o tráfego da máquina que tem o FTP sai todo pelo link 2, mas preciso que entre e saia o tráfego da porta 21 somente pelo link 1. Consegui fazer a entrada da conexão, mas o computador manda os dados pelo link 2... Deve ter alguma forma até pelo próprio iproute2. Hoje eu estou tirando o dia todo pra isso, se eu conseguir algum avanço eu posto aqui.

    No caso da área de trabalho remota, tenta trocar a porta do RDP, tive que fazer isso também com duas máquinas com RD.

    Abraços!
    Última edição por glaucioklipel; 20-11-2007 às 13:27.

  11. #11

    Padrão

    Cara, consegui!

    São algumas poucas e boas regras hehehe, o problema é que a gente não seguiu a lógica da conexão. A gente conseguia conexão com a porta, mas não obtia resposta pois conectávamos pelo link 2 mas os pacotes saíam pelo link 1.

    Eu comentei sobre o servidor PostgreSQL. Eu preciso que este servidor receba conexões exclusivamente pelo link 2 que é dedicado ao serviço postgres. Tive que redirecionar todo o tráfego da máquina para o link 2 para que funcionasse o postgres. Para que só o tráfego do postgres fosse feito pelo link 2 e todo o restante pelo link 1, fiz da seguinte forma:

    iptables -t mangle -A POSTROUTING -p tcp --sport 5432 -s 192.168.1.102/32 -j MARK --set-mark 1
    iptables -t mangle -A PREROUTING -p tcp --sport 5432 -s 192.168.1.102/32 -j MARK --set-mark 1
    iptables -t mangle -A PREROUTING -p tcp --dport 5432 -j MARK --set-mark 1
    iptables -t mangle -A INPUT -p tcp --dport 5432 -j MARK --set-mark 1
    iptables -t mangle -A OUTPUT -p tcp --sport 5432 -s 192.168.1.102/32 -j MARK --set-mark 1
    iptables -t mangle -A FORWARD -p tcp --sport 5432 -s 192.168.1.102/32 -j MARK --set-mark 1
    iptables -t mangle -A FORWARD -p tcp --dport 5432 -j MARK --set-mark 1
    #
    ip rule add fwmark 1 lookup <TABELA-DE-ROTEAMENTO-LINK2>


    Agora, dessa forma está funcionando! Todo o tráfego sai pelo link 1, que é o geral da internet e o tráfego da porta 5432 entra e sai pelo link 2.

    Tenta fazer e posta o resultado! Não esqueça que o postgres só faz conexão pela tcp, se a conexão que você quer fazer exigir conexão udp, duplica as linhas tcp e troca por udp na segunda hehehe.

    Abraços!
    Última edição por glaucioklipel; 26-11-2007 às 19:31.