Reenvío de puertos en OS X 10.10

Tengo que reenviar cada página de Internet a mi dirección local, es decir, 127.0.0.1 usando OS X.

Intenté seguir el comando pero no tiene ningún efecto:

echo " rdr pass inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080 " | sudo pfctl -ef -

He intentado investigar el significado exacto de la línea anterior, pero no puedo encontrar una buena explicación. ¿Cómo realizo este reenvío?

Edición 1 :

Digamos que un usuario ingresa "www.google.com" en el navegador; esto debería tener un impacto como este -->

El usuario debe ser redirigido a mi página local que está en 127.0.0.1:8080

Ahora, si presiono 127.0.0.1:8080, veo mi portal local.

Pero quiero que se muestre después de la redirección desde "Google.com"

Estoy escribiendo la siguiente declaración. Pero, no están teniendo ningún efecto.

rdr pass on lo0 proto {tcp, udp} from any to any port 80 -> 127.0.0.1 port 7894 
pass out log(all) on em0 route-to lo0 inet proto {tcp, udp} from any to any port 80 keep state

Estoy escribiendo líneas arriba en mi archivo de ancla y agregando ancla a pf.conf usando rdr-anchor

¿Qué es exactamente lo que estás tratando de lograr?
¿Has leído la página del manual de pf.conf(5) y pfctl(8) ?
@techraf, quiero redirigir una página específica, digamos 'www.google.com' a mi página local, es decir, 127.0.0.1:8080, que se puede servir como Google.com local. Si pudiéramos redirigir cada página a mi portal local, también estaría bien
google.comlo redirigirá inmediatamente a https y omitirá su redirección, si configura la redirección para el puerto 443, obtendrá un error de certificado en el navegador. ¿Es eso lo que estás tratando de lograr?
@PrafulD Todavía no entiendes la parte "a cualquiera". "Cualquiera" no significa todas las direcciones IP de todo el mundo, sino todas las direcciones IP de la máquina local. ¡Así que la dirección IP de Google (por ejemplo, 216.58.201.206) no está incluida en "de cualquier a cualquier puerto 80"! El a cualquier significa todas las direcciones IP del servidor local (destino/web) (que puede ser en0 (ethernet): 192.168.0.3/10.12.24.3, en1 (wifi): 192.168.1.3, etc.)
@klanomath, soy nuevo en esto. ¿Puede decirme las líneas que debo agregar en mi archivo pf.conf para que redirija google.com a mi portal local?
@PrafulD Agregue su mapa de red (entorno de red). Todavía no especificó correctamente si el usuario está solo en la máquina local (portal) o si otras máquinas cliente (con otros usuarios) en la red también deben redirigirse a la máquina del portal.
@klanomath, el usuario está solo en la máquina local. Tengo un mac con conexión wifi. y quiero que redirija al portal local de sí mismo.

Respuestas (1)

Si entiendo correctamente su pregunta y su comentario, está tratando de lograr algo así como un portal cautivo local.

Esto no se puede hacer con pfuna simple redirección. Hay muchas más cosas y configuraciones involucradas. Aquí (el enlace a bsdguides.org en el archivo Léame de github no funciona: enlace correcto ) encontrará un ejemplo de cómo hacer esto en OpenBSD. La solución allí puede adaptarse a OS X bajo ciertas circunstancias.


La regla rdr pass inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080hace lo siguiente:

rdr pass inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
|   |    |              |
|   |    |              #from any IP (all source IPs) to any IP (all destination IPs of the local machine)
|   |    |              from any to any
|   |    #IPv4 Protocol TCP
|   |    inet proto tcp
|   #allow
|   pass
#redirect from port 80 to localhost:8080
rdr                                     port 80 -> 127.0.0.1 port 8080

O: cualquier tráfico TCP IPv4 entrante (solo redirige los paquetes entrantes) (en cualquier interfaz) al puerto 80 desde cualquier IP a cualquier IP (en cualquier interfaz) de la máquina local se pasa y se redirige a 127.0.0.1:8080 .rdr

La regla no redirige las solicitudes de una máquina cliente local para google.com:80 (es decir, 216.58.201.206:80) o 175.68.9.102:80 a 127.0.0.1:80 porque ninguna de estas IP es una IP local ( www-)la máquina del servidor ni el (www-)servidor local conocen las solicitudes.

Esto no se aplica al tráfico saliente de la máquina local porque no es tráfico entrante . Primero tienes que hacer un bucle con este tráfico:

He agregado las siguientes dos líneas a mi archivo pf.anchor rdr pass on lo0 proto {tcp, udp} from any to any port 80 -> 127.0.0.1 port 7894 pass out log(all) on em0 route-to lo0 inet proto {tcp, udp} from any to any port 80 keep statepero no funciona
@PrafulD Agregue el contenido de su comentario a su pregunta y explique exactamente lo que quiere lograr. ¡Esto último aún no está claro!