<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Unbound on inetshell</title><link>https://inet.sh/es/tags/unbound/</link><description>Recent content in Unbound on inetshell</description><generator>Hugo</generator><language>es</language><lastBuildDate>Fri, 25 Sep 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://inet.sh/es/tags/unbound/index.xml" rel="self" type="application/rss+xml"/><item><title>pfSense y OPNsense: el port forward no funciona desde la propia LAN (NAT reflection y split DNS)</title><link>https://inet.sh/es/posts/pfsense/nat-reflection-port-forward-desde-lan/</link><pubDate>Fri, 25 Sep 2026 00:00:00 +0000</pubDate><guid>https://inet.sh/es/posts/pfsense/nat-reflection-port-forward-desde-lan/</guid><description>Desde fuera el port forward funciona, pero desde la LAN la IP pública o el dominio te llevan a la GUI del firewall o a un error de certificado. Dos arreglos: split DNS con host overrides en el DNS Resolver (el recomendado) o NAT reflection en modo Pure NAT con outbound NAT automático. Incluye el equivalente en OPNsense y la trampa del DNS rebinding.</description><content:encoded><![CDATA[<h2 id="en-corto">En corto</h2>
<p><strong>Opción limpia (split DNS):</strong> Services → DNS Resolver → <em>Host Overrides</em> → <code>app.example.com</code> → IP interna del servidor (<code>192.168.1.50</code>). Los clientes de la LAN tienen que usar el firewall como DNS.</p>
<p><strong>Opción NAT reflection:</strong> System → Advanced → <em>Firewall &amp; NAT</em>:</p>
<ul>
<li><em>NAT Reflection mode for port forwards</em>: <strong>Pure NAT</strong></li>
<li><em>Enable NAT Reflection for 1:1 NAT</em>: ✔</li>
<li><em>Enable automatic outbound NAT for Reflection</em>: ✔</li>
</ul>
<p>Save y prueba desde un cliente de la LAN contra la IP pública.</p>
<h2 id="el-problema">El problema</h2>
<p>El port forward <code>WAN:443 → 192.168.1.50:443</code> funciona desde Internet. Desde un equipo de la misma LAN, <code>https://app.example.com</code> (que resuelve a la IP pública) responde con la GUI de pfSense, un error de certificado, o <code>Potential DNS Rebind attack detected</code>.</p>
<p>El paquete sale del cliente hacia la IP pública, llega al firewall por la interfaz LAN y ahí se queda: la regla de port forward escucha en la WAN, no en la LAN, y la IP de destino es una dirección del propio firewall. Nunca &ldquo;sale y vuelve a entrar&rdquo;.</p>
<h2 id="opción-1-split-dns">Opción 1: split DNS</h2>
<p>Es la que recomienda Netgate: el nombre resuelve a la IP interna dentro y a la pública fuera. El tráfico va directo, el servidor ve la IP real del cliente y el firewall no toca nada.</p>
<ol>
<li>Services → DNS Resolver → <em>Host Overrides</em> → <strong>Add</strong>: host <code>app</code>, dominio <code>example.com</code>, IP <code>192.168.1.50</code>. Si el servicio tiene varios nombres, añade <em>Additional Names</em>.</li>
<li>Los clientes deben usar el firewall como DNS (lo normal si el DHCP lo entrega). Un cliente con <code>8.8.8.8</code> fijo seguirá yendo a la IP pública.</li>
<li><code>nslookup app.example.com</code> desde la LAN → <code>192.168.1.50</code>.</li>
</ol>
<p>Requisitos: el puerto interno y el externo tienen que ser el mismo (si fuera reenvías <code>8443 → 443</code>, el cliente interno tendrá que usar <code>443</code> directamente).</p>
<p>Si usas DNS Forwarder (dnsmasq) en vez del Resolver, el ajuste equivalente está en Services → DNS Forwarder → <em>Host Overrides</em>.</p>
<h2 id="opción-2-nat-reflection">Opción 2: NAT reflection</h2>
<p>Cuando no controlas el DNS de los clientes, o hay un montón de puertos, el firewall puede &ldquo;reflejar&rdquo; la conexión: reescribe el destino a la IP interna y, con el outbound NAT automático, también el origen, para que la respuesta vuelva por el firewall.</p>
<p>System → Advanced → <em>Firewall &amp; NAT</em>, sección <em>Network Address Translation</em>:</p>
<table>
  <thead>
      <tr>
          <th>Ajuste</th>
          <th>Valor</th>
          <th>Por qué</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>NAT Reflection mode for port forwards</td>
          <td><strong>Pure NAT</strong></td>
          <td>Solo reglas de PF: todos los protocolos, sin límite de puertos. <em>NAT + Proxy</em> usa un daemon, solo TCP y máximo 500 puertos por regla</td>
      </tr>
      <tr>
          <td>Enable NAT Reflection for 1:1 NAT</td>
          <td>✔</td>
          <td>Si tienes 1:1 NAT además de port forwards</td>
      </tr>
      <tr>
          <td>Enable automatic outbound NAT for Reflection</td>
          <td>✔</td>
          <td>Sin esto, si cliente y servidor están en la misma subred el servidor responde directo al cliente, que no reconoce la conexión y la corta</td>
      </tr>
      <tr>
          <td>Reflection Timeout</td>
          <td>(solo NAT + Proxy)</td>
          <td>Ignóralo en Pure NAT</td>
      </tr>
  </tbody>
</table>
<p>También se puede activar por regla: Firewall → NAT → Port Forward → editar → <em>NAT reflection</em> → <em>Enable (Pure NAT)</em>, dejando el global en <em>Disable</em>.</p>
<p>Costes: el servidor ve como origen la IP LAN del firewall (no la del cliente), y todo ese tráfico pasa por el firewall aunque cliente y servidor estén en el mismo switch.</p>
<h2 id="opnsense">OPNsense</h2>
<p>Misma idea, otros menús:</p>
<ul>
<li>Split DNS: Services → Unbound DNS → <em>Overrides</em> → Host Overrides.</li>
<li>Reflection: Firewall → Settings → <em>Advanced</em> → <strong>Reflection for port forwards</strong>, <strong>Reflection for 1:1</strong>, <strong>Automatic outbound NAT for Reflection</strong>.</li>
</ul>
<h2 id="trampas">Trampas</h2>
<ul>
<li><strong>DNS rebinding.</strong> Si en vez de un host override apuntas el Resolver a un DNS externo que devuelve IPs privadas (un DNS interno de otra sede, un proveedor con vistas), Unbound descarta esas respuestas por protección contra rebinding. No desmarques <em>Disable DNS Rebinding Checks</em> en System → Advanced → Admin Access: añade en Services → DNS Resolver → <em>Custom options</em> <code>private-domain: &quot;example.com&quot;</code> y solo ese dominio queda exento.</li>
<li><strong>El cliente con DNS fijo</strong> se salta el split DNS. O lo obligas por DHCP, o lo capturas con una regla de NAT de puerto 53, o usas reflection.</li>
<li><strong>Pure NAT necesita saber la interfaz y el gateway</strong> en el momento de cargar reglas; con WANs dinámicas que cambian de IP, un <em>Filter Reload</em> después del cambio de IP lo arregla.</li>
<li><strong>Puertos distintos dentro y fuera</strong> solo funcionan con reflection; split DNS no traduce puertos.</li>
<li><strong>Certificados</strong>: con split DNS el navegador sigue viendo <code>app.example.com</code>, así que el certificado del servidor sirve igual. Si reflejas por IP pública, también. El error de certificado del principio era el de la GUI del firewall, no el del servidor.</li>
</ul>
<p>Referencias: <a href="https://docs.netgate.com/pfsense/en/latest/recipes/port-forwards-from-local-networks.html">Port Forwards from Local Networks</a> y <a href="https://docs.netgate.com/pfsense/en/latest/nat/reflection.html">NAT Reflection</a> en la documentación de Netgate.</p>
]]></content:encoded></item></channel></rss>