Servidor Web na rede local

1

Eu tenho problema em acessar (um dos meus) servidor web da minha rede local.

Eu tenho um computador (Ubuntu) que funciona como roteador, servidor web, etc. Isso funciona bem, eu posso acessar o servidor web externamente e da rede interna. Eu também posso acessar computadores na rede interna via ssh do lado de fora (redirecionamento com o iptables).

Agora tenho outro servidor da Web na rede interna. Eu fiz alguns caminhos de roteamento com o iptables. Se eu no navegador digitar some.webadress.com:40080 , ele deve ir para o servidor da Web "interno".

Isso funciona:

  • Acesse o servidor da Web interno com o nome de domínio (+ porta) de um rede externa
  • Acessar o servidor da web interno com o número IP interno (+ porta) da rede interna

Isso não funciona:

  • Acesse o servidor da web interno com o nome de domínio (+ porta) da rede interna

Tenho certeza de que a parte de roteamento funciona bem. A questão é se eu tenho que ter um DNS ou é algo que devo adicionar / alterar no meu arquivo /etc/hosts ?

EDITAR: Algum esclarecimento. O dispositivo / servidor da web que estou tendo problemas para acessar é uma alteração da web. O comutador da web é um dispositivo que possibilita o controle de vários relés de alta tensão (por exemplo, aquecedor do carro, luzes externas, etc.) por meio do aplicativo da web / telefone. O problema surge quando um smartphone é usado. Se eu estiver na rede 3G, eu uso some.webadress.com:40080 (note que eu uso tradução de porta) e se eu estiver no wifi doméstico eu devo usar 192.168.0.101:8080 . O que eu quero usar é some.webadress.com:40080 , independentemente de eu estar na rede local ou em uma rede externa.

(A melhor parte da família não está interessada em coisas técnicas, por isso ter um endereço rápido é realmente um problema:)

    
por mazellan 23.12.2012 / 13:54

3 respostas

1

Outras máquinas na sua rede acessarão o servidor da web sem passar pelo seu roteador; está na mesma rede local. Você deve conseguir acessar seu servidor da Web diretamente da rede interna usando seu endereço IP, por exemplo, %código%. Suponho que você não faça a tradução de porta e seu servidor da Web seja executado na mesma porta da máquina que você configurou para encaminhar o roteador.

Se isso funcionar, você só precisará informar suas máquinas para falar com http://192.168.0.101:8080 ao resolver o nome 192.168.0.101 . Isso é algo que você deve ser capaz de configurar em seu servidor DNS local (pode estar sendo executado em seu roteador). Você também deve certificar-se de que suas máquinas na rede local estão sempre usando este servidor DNS local.

Por exemplo, se você configurasse um servidor DNS no Ubuntu usando some.webadress.com , ele carregaria o arquivo dnsmasq nesta máquina por padrão, então coloque uma linha

192.168.0.101     some.webadress.com

seria suficiente.

Como alternativa, edite o arquivo /etc/hosts em todas as máquinas para anular a resposta do DNS. Isso é muito mais difícil de manter, especialmente quando se trata de um número maior de máquinas.

    
por gertvdijk 23.12.2012 / 15:57
1
O arquivo

hosts funcionará bem e não há necessidade de criar um servidor DNS apenas para isso na minha opinião.

Outra maneira que você poderia considerar é criar um alias para o host virtual do servidor web usando um nome interno (hostname, hostname.local ou hostname.internal.domain, dependendo de como sua LAN está configurada) que pode ser resolvido localmente sem o servidor DNS. Desta forma, as máquinas locais poderão acessá-lo diretamente, sem usar o caminho externo de IP / roteador.

Comentários após esclarecimento na pergunta original:

Se você quiser usar o mesmo URL em ambas as redes (3G e Wi-Fi), excluir um nome interno diferente do externo será descartado, pois será um URL diferente.

O que você pode fazer é alterar o arquivo hosts com base na conexão que você usa: Um arquivo hosts para wifi (convertendo a URL para IP interno do servidor) e um para 3G (convertendo para IP externo). Você pode fazer isso com scripts automáticos em um computador (executando o Linux, pelo menos), mas não tenho ideia de um smartphone.

Quando você usa some.webadress.com:40080 com a conexão Wi-Fi, seu roteador não roteia o tráfego interno usando endereços externos. Este é um dos propósitos de uma LAN, ser isolado da rede pública.

  • Suponho que você tenha feito o encaminhamento no iptables usando a interface de entrada e não o IP de destino, pois é provavelmente dinâmico, mas se você tiver um IP público fixo, se usar o IP + de destino (seu IP público) em vez da interface de entrada + porta para a regra, deve funcionar do jeito que você quer, eu acho. De qualquer forma, você pode tentar temporariamente usando o IP que você tem no momento do teste.

  • Se o seu IP é dinâmico, você tem que usar a interface como entrada para a regra de encaminhamento do iptables, então você pode tentar encaminhar para o IP interno do servidor web quando ele vem na interface interna também, em vez de apenas externo.

  • Outra opção que você pode tentar é usar a porta e a origem 0.0.0.0/0.0.0.0 para encaminhar usando iptables.

por laurent 23.12.2012 / 15:55
1

Parece que o que você deseja alcançar é o loopback de NAT. Encontrei este guia:

link

Algo na linha de:

iptables -t nat -A PREROUTING -s 192.168.0.0/24 -d some.webaddress.com -p tcp --dport 40080 -j DNAT --to-destination 192.168.0.101:8080
iptables -t nat -A POSTROUTING -d 192.168.0.101 -s 192.168.0.0/24 -p tcp --dport 8080 -j SNAT --to-source some.webaddress.com

Não 100% de certeza sobre o valor --dport na regra POSTROUTING, se o acima não funcionar, tente com 40080.

Boa sorte.

    
por mgor 30.07.2013 / 18:33