DD-WRT: ¿Cómo permitir que el reenvío de puertos se aplique a las solicitudes que se originan dentro de la LAN?

26

Con el firmware original de mi enrutador, tenía el reenvío de puertos definido desde el puerto 80 al servidor en la LAN, que utilicé junto con un servicio DNS dinámico externo.

Ahora he actualizado a DD-WRT y, por desgracia, el reenvío de puertos solo funciona para solicitudes a la IP externa desde fuera de la LAN. Desde el interior de la LAN solo puedo acceder al servidor por su IP interna.

¿Cómo puedo hacer que la IP externa (y, por lo tanto, el nombre de dominio conectado a la IP externa dinámica) sea accesible también desde dentro de la LAN?

Prefiero descubrir cómo lograrlo con las definiciones DD-WRT estándar, pero usar, por ejemplo, iptables no está fuera de discusión.

UrEl
fuente

Respuestas:

25

Parece que es un error en las recientes compilaciones 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

(cambie su subred de acuerdo con su LAN específica)

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

UrEl
fuente
¡Eso NO era obvio! funcionó como un encanto :)
Jay
Configuré esto como un comando de inicio y reinicié el enrutador, pero no cambié, todavía no funciona.
Timwi
Trabajó para mi. Muchas gracias. Ahora puedo acceder a mis direcciones IP asignadas desde mi red interna en mis enrutadores DD-WRT.
nusi
3
Esto funcionó para mí, pero solo si lo guardé como el script de firewall y no como el script de inicio.
Jarett Millard
@Timwi: como mencionó Jarett, yo también tuve que poner esto en la sección "Firewall", no en la sección "Inicio".
dan_linder
4

En el espíritu de la respuesta de UrEl: iptablesen el foro DD-WRT se puede encontrar un script autoconfigurable que se puede copiar y pegar sin más adaptaciones :

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 

Como señaló Jarett, esto debe usarse como script de Firewall y no como script de inicio.

krlmlr
fuente
Esta solución funcionó para mí mejor que la de UrEI porque esta última hizo que mi teléfono SIP no pudiera conectarse.
jamix
¿Cuál es la diferencia entre esto y la regla de @ UrlEl (además de obtener dinámicamente la interfaz wan y la dirección ip)?
Piotr Dobrogost
1

Intente deshabilitar "Filtrar redirección NAT WAN" en la pestaña Seguridad-> Cortafuegos. De la descripción de la ayuda:

Filtrar la redirección NAT de WAN Impide que los hosts de la LAN utilicen la dirección WAN del enrutador para contactar con los servidores de la LAN (que se han configurado mediante la redirección de puertos).

Tobias Plutat
fuente
Ya estaba deshabilitado (por defecto). ¿Alguna otra idea?
UrEl
Eso es extraño: en mi LAN, esta configuración es exactamente lo que marca la diferencia. ¿Qué construcción estás usando? Tal vez deberías volver a verificar tu reenvío de puertos; tal vez hay algo mal allí que te perdiste (tal vez las IP han cambiado entre tu acceso externo e interno, ¿rompiendo así los reenvíos de puertos?)
Tobias Plutat
Estoy usando 16994. Mientras tanto, encontré esto: hax.at/text/41
UrEl
¡Oh, cómo me encantan los lanzamientos DD-WRT con errores! (Establecimiento de conexión de los clientes que se utilizan para tomar las edades durante algún tiempo ... hasta que me di cuenta de que los nombres de host en arrendamiento estáticas sólo deben contener caracteres alfabéticos Arrgh.!)
Tobias Plutat
1

Parece que su verdadero problema es que necesita dos vistas del registro DNS A. Externamente, su dns dinámico apunta a su IP pública de red que reenvía el puerto 80 al host local. Todo lo que necesita hacer es agregar una entrada en dnsmasq con un registro A que apunte el mismo nombre de dominio completo a la IP del host local para sus hosts locales. Puede hacerlo agregando lo siguiente en la página Servicios / Opciones adicionales de dnsmasq:

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

simplemente reemplace los xx con la ip local y el nombre de dominio con su nombre de dominio. No olvide el punto final o agregará su nombre de dominio local.

conserje del sistema
fuente
Esto es lo que hice, ¡y funciona! Pero, ¿es posible hacer esto para ciertos puertos? Esto solo funcionará si reenvía puertos a una sola computadora. Si reenvía puertos a varias computadoras, no funcionará ...
rinogo