DD-WRT: como permitir que o encaminhamento de porta se aplique a solicitações originadas de dentro da LAN?

26

Com o firmware original do meu roteador, eu tinha o encaminhamento de porta definido da porta 80 para o servidor na LAN, que usei em conjunto com um serviço DNS dinâmico externo.

Agora eu atualizei para o DD-WRT e, infelizmente, o encaminhamento de porta funciona apenas para solicitações ao IP externo de fora da LAN. De dentro da LAN, só posso acessar o servidor pelo seu IP interno.

Como posso obter o IP externo (e, portanto, o nome do domínio conectado ao IP externo dinâmico) para serem acessados ​​adequadamente também de dentro da LAN?

Prefiro descobrir como alcançá-lo com definições padrão de DD-WRT, mas usar, por exemplo, iptables não está fora de questão.

UrEl
fonte

Respostas:

25

Parece que é um bug nas versões recentes do DD-WRT.

Use iptables:

iptables -t nat -I POSTROUTING -o br0 -s 192.168.1.0/24 -d 192.168.1.0/24 -j MASQUERADE

(altere sua sub-rede de acordo com sua LAN específica)

From http://hax.at/text/41

UrEl
fonte
Isso não era óbvio! funcionou como um encanto :)
Jay
Defino isso como um comando de inicialização e reiniciei o roteador, mas nenhuma alteração - ainda não funciona.
Timwi
Trabalhou para mim. Muito obrigado. Agora eu posso acessar meu IP atribuído de ddns da minha rede interna nos meus roteadores DD-WRT.
Nusi
3
Isso funcionou para mim, mas somente se eu o salvasse como script de firewall e não como script de inicialização.
Jarett Millard 29/07
@ Timwi - Como Jarett mencionou, eu também tive que colocar isso na seção "Firewall", não na seção "Inicialização".
22414 dan_linder
4

No espírito da resposta do UrEl: Um iptablesscript autoconfigurável que pode ser copiado e colado sem adaptação adicional pode ser encontrado no fórum do DD-WRT :

insmod ipt_mark 
insmod xt_mark 
iptables -t mangle -A PREROUTING -i ! `get_wanface` -d `nvram get wan_ipaddr` -j MARK --set-mark 0xd001 
iptables -t mangle -A PREROUTING -j CONNMARK --save-mark 
iptables -t nat -A POSTROUTING -m mark --mark 0xd001 -j MASQUERADE 

Conforme observado por Jarett, isso deve ser usado como script de firewall e não como script de inicialização.

krlmlr
fonte
Essa solução funcionou melhor para mim do que a do UrEI, porque a última impossibilitou minha conexão com o telefone SIP.
Jamix
Qual é a diferença entre esta e a regra do @ UrlEl (além de obter dinamicamente a interface wan e o endereço IP)?
Piotr Dobrogost
1

Tente desativar "Filtrar redirecionamento WAN NAT" na guia Segurança-> Firewall. Na descrição da ajuda:

Filtrar redirecionamento NAT da WAN Impede que os hosts na LAN usem o endereço WAN do roteador para contatar os servidores na LAN (que foram configurados usando o redirecionamento de porta).

Tobias Plutat
fonte
Já estava desativado (por padrão). Alguma outra ideia?
UrEl
Isso é estranho - na minha LAN, essa configuração é exatamente o que faz a diferença. Qual build você está usando? Talvez você deve verificar novamente o seu encaminhamento de porta - talvez haja algo de errado lá que você perdeu (talvez os IPs foram alteradas entre o seu acesso externo e interno, quebrando assim redirecionamento de portas?)
Tobias Plutat
Estou usando 16994. Nesse meio tempo, encontrei o seguinte: hax.at/text/41
UrEl
Ah, como eu amo lançamentos de DD-WRT de buggy! (Estabelecer uma ligação de clientes usados para levar séculos por algum tempo ... até que eu descobri que nomes de host em locações estáticos deve conter apenas caracteres alfabéticos Arrgh.!)
Tobias Plutat
1

Parece que seu problema real é que você precisa de duas visualizações do registro DNS A. Externamente, o seu DNS dinâmico aponta para o IP público da rede, que encaminha a porta 80 para o host local. Tudo o que você precisa fazer é adicionar uma entrada no dnsmasq com um registro A apontando o mesmo nome de domínio totalmente qualificado para o host local ip dos hosts locais. Você pode fazer isso adicionando o seguinte na página Serviços / Opções adicionais do dnsmasq:

 address=/www.mydomain.com./xx.xx.xx.xx

substitua apenas os xx pelo ip local e o nome de domínio pelo seu nome de domínio. Não esqueça o ponto à direita ou ele acrescentará seu nome de domínio local.

systemconcierge
fonte
Foi isso que fiz e funciona! Mas é possível fazer isso para certas portas? Isso só funcionará se você estiver encaminhando portas para um único computador. Se você é portos de encaminhamento para vários computadores, não vai funcionar ...
rinogo