+ Responder ao Tópico



  1. #1

    Padrão é possivel fazer DNAT baseando-se no nome dns ?

    Saudações!

    O caso é que tenho uma vpn com 250 maquinas espalhadas por diversas cidades, em cada cliente da vpn roda uma aplicação que escuta na porta 8080.
    O ip externo ficticio do concentrador é 200.100.100.100

    A necessidade é que através da internet seja possivel acessar as paginas das aplicações nos clientes da vpn.

    Resolvi isso com um redirect no apache + DNAT + SNAT

    Ou seja, quando eu peço no browser http://200.100.100.100/cliente1 o apache me redireciona para http://200.100.100.100:10001, se for http://200.100.100.100/cliente2 vai para http://200.100.100.100:10002 e assim por diante.
    Em seguida uso um DNAT para dizer que quando chegar um pedido vindo da net pela porta 10001 o mesmo será redirecionado para o ip interno da vpn referente ao cliente1 na porta 8080 e por fim aplico um SNAT para dizer que esses pacotes deverão receber o ip de origem do concentrador e não o ip real de origem para que a resposta possa voltar corretamente, uma vêz que o concentrador da vpn não é o GW default dos clientes.


    Isso funcionou perfeitamente, o problema é que são 250 clientes ou seja eu precisaria da usar da porta 10001 à 10251, e ainda teria um ponto fraco de serem portas não padronizadas que dependendo de onde se tentar acessar serão barradas por algum firewall no caminho.

    Já tentei utilizar proxy reverso para solucionar isso, porém o sistema que roda nos clientes é farto de java-scripts que não funcionam com o proxy reverso.

    O que eu gostaria de saber é se é possivel o iptables tomar decisões para fazer o DNAT baseando-se no nome dns e não na porta ou ip.

    Exemplo:
    Eu crio 2 nomes validos na internet
    cliente1.meudominio.com.br e cliente2.meudominio.com.br ambos apontam para 200.100.100.100
    Existe em iptables como eu dizer que quando o pedido vier para cliente1.meudominio.com.br ele faça o DNAT para o ip interno do cliente 1 e quando vier cliente2.meudominio.com.br ele faça o DNAT para o ip interno do ciente2 ???


    Desculpem qualquer confusão na hora de escrever, to com esse problema pra resolver e uma febre que não me deixa pensar direito.

    Abraços a todos e agradeço qualquer colaboração!
    Última edição por landrower; 07-04-2009 às 15:12.

  2. #2

    Padrão

    Não cara... O melhor é continuar com sua abordagem.

    Vejamos o que acontece num conexão normal.

    Digamos que você quer acessar um máquina no mundo afora via um protocolo específico. Digamos o Google, via protocolo HTTP.

    Primeiro, você digita lá no seu navegador: Google [return]

    Seu navegador primeiramente envia uma requisição DNS para seu servidor:
    localhost:xxx -> servidordns:53 udp Google IN A
    Então, seu servidor responde:
    servidordns:53 -> localhost:xxx udp Google IN A 64.233.163.147
    Logo em seguida, seu browser tenta acessar:
    localhost:yyy -> 64.233.163.147:80 tcp GET Google HTTP/1.0
    Vê? o que chega ao gateway não é o nome em si, mas o seu correspondente númerico. E apesar de, no protcolo HTTP, o nome ir na requisição, o gateway não tem discernimento sobre os dados que passam na camada de aplicação (protocolo HTTP), somente das camadas de rede e transporte (IP e TCP)

    O que você poderia fazer era usar o mod_proxy no Apache e continuar com uma abordagem semelhante a que você já usa. Ou seja, deixar o Apache tratar de intermediar as conexões com os diversos clientes.

  3. #3

    Padrão

    Citação Postado originalmente por PEdroArthurJEdi Ver Post
    Não cara... O melhor é continuar com sua abordagem.

    Vejamos o que acontece num conexão normal.

    Digamos que você quer acessar um máquina no mundo afora via um protocolo específico. Digamos o Google, via protocolo HTTP.

    Primeiro, você digita lá no seu navegador: Google [return]

    Seu navegador primeiramente envia uma requisição DNS para seu servidor:
    localhost:xxx -> servidordns:53 udp Google IN A
    Então, seu servidor responde:
    servidordns:53 -> localhost:xxx udp Google IN A 64.233.163.147
    Logo em seguida, seu browser tenta acessar:
    localhost:yyy -> 64.233.163.147:80 tcp GET Google HTTP/1.0
    Vê? o que chega ao gateway não é o nome em si, mas o seu correspondente númerico. E apesar de, no protcolo HTTP, o nome ir na requisição, o gateway não tem discernimento sobre os dados que passam na camada de aplicação (protocolo HTTP), somente das camadas de rede e transporte (IP e TCP)

    O que você poderia fazer era usar o mod_proxy no Apache e continuar com uma abordagem semelhante a que você já usa. Ou seja, deixar o Apache tratar de intermediar as conexões com os diversos clientes.


    Antes de mais nada quero agradecer a sua atenção: Muito obrigado.

    Eu também acredito que a a utilização do proxy reverso seja a mais correta, porém não consegui fazer ele funcionar com esse sistema especificamente, devido a ele utilizar java script nos botões.

    Um exemplo de codigo que um botão tem:
    javascript:void(exibeSecao('secaoEmpresa', 'linkEmpresa', 'Empresa'));

    Aki segue a configuração de proxy reverso que tentei

    Redirect Permanent /cliente1 http://www3.meudominio.com.br/cliente1/loginAction.do
    ProxyPass /cliente1/ http://10.20.0.10:8080/
    ProxyHTMLURLMap http://10.20.0.10:8080 /cliente1
    <Location /cliente1/>
    ProxyPassReverse /
    SetOutputFilter proxy-html
    ProxyHTMLURLMap / /cliente1/
    ProxyHTMLURLMap /cliente1 /cliente1
    RequestHeader unset Accept-Encoding
    </Location>


    Tenho outros servidores com sites em suas redes locais que funcionam perfeitamente com esse esquema de proxy reverso, mas essa aplicação em especifico não roda os java scripts.

    Sobre o iptables, o modulo de layer 7 não poderia ser útil para meu problema?

    Abraços!

  4. #4

    Padrão

    Citação Postado originalmente por landrower Ver Post
    Antes de mais nada quero agradecer a sua atenção: Muito obrigado.
    Tem um botãozinho ai pra isso... hehehe

    Citação Postado originalmente por landrower Ver Post
    Eu também acredito que a a utilização do proxy reverso seja a mais correta, porém não consegui fazer ele funcionar com esse sistema especificamente, devido a ele utilizar java script nos botões.
    É verdade... sempre ouvi falar que aplicações com js são problemáticas nesse tipo de situação.

    Citação Postado originalmente por landrower Ver Post
    Aki segue a configuração de proxy reverso que tentei
    Infelizmente não entendo muito dessa configuração... Te passei para que pesquisasse, caso não já tivesse o feito.

    Citação Postado originalmente por landrower Ver Post
    Sobre o iptables, o modulo de layer 7 não poderia ser útil para meu problema?
    Sou da opnião de que não devemos misturas as camadas do sistema, sejo no modelo OSI, seja no TCP/IP. Por isso, nunca fui muito com a cara do layer7, mas sei que funciona.

    Se lhe for útil, passa aqui pra comentar depois... Ou até mesmo, poste num blog!