Quiero reenviar solicitudes de 192.168.99.100:80
a 127.0.0.1:8000
. Así es como lo haría en Linux usando iptables
:
iptables -t nat -A OUTPUT -p tcp --dport 80 -d 192.168.99.100 -j DNAT --to-destination 127.0.0.1:8000
¿Cómo hago lo mismo en MacOS X? Probé una combinación de ipfw
comandos sin mucho éxito:
ipfw add fwd 127.0.0.1,8000 tcp from any to 192.168.99.100 80
(El éxito para mí es apuntar un navegador http://192.168.99.100
y obtener una respuesta de un servidor de desarrollo en el que me estoy ejecutando localhost:8000
)
Respuestas:
Entonces descubrí una manera de hacer esto. No estoy seguro de si es la forma preferida, ¡pero funciona! En tu caparazón favorito:
(El alias
lo0
parece ser la parte que falta)Si desea que un dominio (falso) apunte a este nuevo alias, asegúrese de que / etc / hosts contenga la línea:
fuente
Pude hacer que esto funcionara usando los comandos
ifconfig
ypfctl
en Mac 10.10.2. Con el siguiente enfoque, estoy mapeando127.0.0.1:3000
con éxitomydomain.com
localmente en mi máquina.En su línea de comando ingrese los siguientes dos comandos para reenviar conexiones
127.0.0.1:3000
a10.0.0.1
:Luego edite su archivo
/etc/hosts
o/private/etc/hosts
y agregue la siguiente línea para asignar su dominio10.0.0.1
.Después de guardar su archivo de hosts, vacíe su DNS local:
Ahora ábralo
mydomain.com
en un navegador y verá el servidor alojado en su puerto localhost (es decir127.0.0.1:3000
). Básicamente, este proceso asigna un<ip>:<port>
nuevo a un nuevo<ip>
para que luego pueda asignar un host que IP.fuente
sudo discoveryutil udnsflushcaches
me dacommand not found
pero aún coincide con la entrada correctamente. Pero, ¿cómo puedo mapear un segundo puerto? Intenté hacer los pasos 1 + 2 con id:10.0.0.2
y otro puerto, pero siempre toma solo la última conexión. Entonces, si lo hago último10.0.0.1
yport 3000
hacia adelante3000
, si lo hago10.0.0.2
y lo porto4000
hacia adelante4000
. En mi/private/etc/hosts
escribí ambas entradas con la (diferente) identificación.sudo dscacheutil -flushcache
Yo también tuve que hacer algo similar recientemente, y al buscar encontré esta respuesta. Desafortunadamente, la respuesta de Nafe utiliza
ipfw
que ahora está en desuso y no está disponible en OSX; y la respuesta de Kevin Leary es de hecho un poco dura. Así que tuve que hacer algo mejor (más limpio) y decidí compartirlo aquí para la posteridad. Esta respuesta se basa en gran medida en el enfoque mencionado en esta esencia .Como OP menciona, apuntar un navegador a 192.168.99.100 debería obtener una respuesta de un servidor en localhost: 8000. Agregar un alias
ifconfig
no es realmente necesario,pfctl
solo es suficiente: para lograr esto, elpf.conf
archivo/etc/pf.conf
debe modificarse.Primero creamos (con sudo) un nuevo archivo de anclaje (llamémosle
redirection
) en:/etc/pf.anchors/redirection
. Esto es básicamente un archivo de texto normal y contiene la siguiente línea (al igual que en la respuesta de Kevin Leary):rdr pass on lo0 inet proto tcp from any to 192.168.99.100 port = 80 -> 127.0.0.1 port 8000
. Una vez que se ha creado el nuevo archivo de anclaje, debe ser referenciado dentro delpf.conf
archivo. Abra elpf.conf
archivo con sudo y agreguerdr-anchor "redirection"
después de la última línea rdr-anchor (que esrdr-anchor "com.apple/*"
) y agregueload anchor "redirection" from "/etc/pf.anchors/redirection"
al final.En última instancia, así es como debería verse el archivo pf.conf:
Y eso es casi todo. Simplemente reinicie
pfctl
emitiendosudo pfctl -d
para deshabilitarlo primero y luegosudo pfctl -fe /etc/pf.conf
para iniciarlo nuevamente.Ahora, si necesita que esto suceda automáticamente después de cada reinicio, debe realizarse otro pequeño trabajo: el daemon de lanzamiento
pfctl
debe actualizarse (la esencia mencionada menciona que pf se habilita automáticamente en el arranque, sin embargo, esto no parece ser el caso de mirar el código). Abra (con sudo)System/Library/LaunchDaemons/com.apple.pfctl.plist
y busque esto:y agregue la línea
<string>-e</string>
para finalmente hacerlo así:Deberias hacer eso.
Advertencia : Apple ya no permite cambiar los archivos de demonio de lanzamiento así (no con sudo, ni chmod, ni nada más). La única forma es jugar con la configuración de Protección de integridad del sistema : iniciar en modo de recuperación y ejecutar terminal. Verifique el estado de SIP con
csrutil status
, generalmente debería estar habilitado. Deshabilítelocsrutil disable
y reinicie en modo normal y luego realice los cambios en el archivo plist como se discutió anteriormente. Una vez hecho esto, regrese al modo de recuperación y vuelva a habilitar la protección (está en su lugar por una buena razón) mediante la emisióncsrutil enable
.Explicación: Se puede verificar emitiendo el
ifconfig
comando que127.0.0.1
ya es el alias (predeterminado) para localhost lo0; este hecho se está utilizando para evitar tener que agregar un alias adicional para localhost y simplemente usar la dirección predeterminada en elpf.conf
archivo.ACTUALIZACIÓN: Desafortunadamente, parece que cargar el archivo al inicio no funciona. Todavía estoy tratando de obtener ayuda para solucionarlo. Hasta entonces, correr
sudo pfctl -f /etc/pf.conf
después de arrancar hace el truco.fuente
System/Library/LaunchDaemons/com.apple.pfctl.plist
; esto probablemente no sobreviviría a una actualización del sistema operativo?Esto funcionó bien para mí:
Agregue la siguiente línea al archivo de inicio, como se describe aquí: http://xeiam.com/port-forwarding-80-to-8080-using-ipfw-on-mac-os-x/
add 100 fwd 127.0.0.1,8080 tcp from any to any 80 in
fuente
A partir de la 10.5, OS X viene con un nuevo firewall orientado a aplicaciones en lugar de
ipfw
. Pero ipfw todavía está instalado. Si tiene problemas con su sintaxis, consulte las interfaces gráficas comoWaterRoof
oFlying Buttress
.HTH, PEra
fuente
el orden de las reglas es importante, asegúrese de que no haya "negar todo" antes de permitir las reglas, o algo así.
fuente
65535 allow ip from any to any
).Parece que a su comando le falta un número de regla; tratar:
(si no se está ejecutando como root, deberá agregarle el prefijo sudo). Otra cosa para verificar es que el firewall está habilitado:
Si vuelve con el valor 0 (apagado), enciéndalo con:
... y luego haga arreglos para que se vuelva a habilitar cuando la computadora se reinicie. La forma "adecuada" de hacer esto es probablemente crear un elemento lanzado ( Lingon lo hace bastante fácil). O simplemente use una de las herramientas GUI mencionadas por PEra, y deje que se encargue de los detalles.
fuente