Cambié a macOS Sierra y no puedo hacer que el reenvío de puertos funcione para localhost (http y https) usando la interfaz de bucle invertido lo0. Estoy usando pf y siguiendo las instrucciones existentes para El Capitan pero sin éxito:
https://apple.stackexchange.com/a/230331/81267 , http://blog.brianjohn.com/forwarding-ports-in-os-x-el-capitan.html
Básicamente, configuro ifconfig:
sudo ifconfig lo0 10.0.0.1 alias
Luego creo un pf
archivo de anclas:/etc/pf.anchors/myorganization
rdr pass on lo0 inet proto tcp from any to 10.0.0.1 port = 80 -> 127.0.0.1 port 3000
rdr pass on lo0 inet proto tcp from any to 10.0.0.1 port = 443 -> 127.0.0.1 port 7000
Agregue una referencia en pf.conf (tuvo que deshabilitar y luego volver a habilitar SIP para hacer esto):
rdr-anchor "myorganization"
...
load anchor "myorganization" from "/etc/pf.anchors/myorganization"
Pruebo los anclajes:
sudo pfctl -vnf /etc/pf.anchors/myorganization
y el resultado se ve bien:
...
TRANSLATION RULES:
nat-anchor "com.apple/*" all
rdr-anchor "com.apple/*" all
rdr-anchor "myorganization" all
...
Los he habilitado:
sudo pfctl -evf /etc/pf.conf
He agregado localhost
a mi /etc/hosts
127.0.0.1 localhost
Pero cuando http://localhost
busco obtengo ERR_CONNECTION_REFUSED
. Si navego al http://localhost:3000
sitio está funcionando bien.
Actualización . Encendí el registro de pf y probé sin el alias 10.0.0.1:
rdr pass log (all) on lo0 inet proto tcp from any to any port 80 -> 127.0.0.1 port 3000
rdr pass log (all) on lo0 inet proto tcp from any to any port 443 -> 127.0.0.1 port 7000
Y la primera vez que presiono http://localhost , veo el registro:
00:00:00.000000 rule 4294967295/8(ip-option): pass in on en0: (tos 0x0, ttl 1, id 59674, offset 0, flags [none], proto IGMP (2), length 32, options (RA))
192.168.0.106 > 224.0.1.60: igmp v2 report 224.0.1.60
00:00:00.204784 rule 4294967295/8(ip-option): pass in on en0: (tos 0xc0, ttl 1, id 0, offset 0, flags [DF], proto IGMP (2), length 32, options (RA))
192.168.0.3 > 224.0.0.252: igmp v2 report 224.0.0.252
00:00:00.093232 rule 4294967295/8(ip-option): pass out on en0: (tos 0x0, ttl 1, id 11047, offset 0, flags [none], proto IGMP (2), length 32, options (RA))
192.168.0.77 > 224.0.0.251: igmp v2 report 224.0.0.251
00:00:00.111608 rule 4294967295/8(ip-option): pass in on en0: (tos 0x0, ttl 1, id 60629, offset 0, flags [none], proto IGMP (2), length 32, options (RA))
192.168.0.106 > 239.255.255.250: igmp v2 report 239.255.255.250
00:00:00.102426 rule 4294967295/8(ip-option): pass in on en0: (tos 0xc0, ttl 1, id 0, offset 0, flags [DF], proto IGMP (2), length 32, options (RA))
192.168.0.3 > 224.0.0.251: igmp v2 report 224.0.0.251
00:00:00.000120 rule 4294967295/8(ip-option): pass in on en0: (tos 0xc0, ttl 1, id 0, offset 0, flags [DF], proto IGMP (2), length 48, options (RA))
192.168.0.3 > 224.0.0.22: igmp v3 report, 2 group record(s) [gaddr 224.0.0.251 is_ex, 0 source(s)] [gaddr 224.0.0.252 is_ex, 0 source(s)]
Los accesos posteriores a localhost no agregan nada a los registros y veo que la interfaz de bucle invertido lo0 no se muestra en ese registro, solo en0 (Ethernet), por lo que no estoy convencido de que esta salida de registro sea relevante para el problema. También intenté agregar en0 y en1 al /etc/pf.anchors/myorganization
archivo pero con los mismos resultados.
Mi respuesta a la pregunta: ¿Cuál es la forma moderna de reenviar puertos en El Capitán? (reenviar puerto 80 a 8080) sigue siendo válido.
Sin embargo, tiene varias fricciones/configuraciones incorrectas en su configuración:
Una redirección:
rdr pass on lo0 inet proto tcp from any to 10.0.0.1 port = 80 -> 127.0.0.1 port 3000
solo redirigirá una solicitud de 10.0.0.1:80 a 127.0.0.1:3000.
Una solicitud de localhost:80 (que se traduce como 127.0.0.1:80 y no como 10.0.0.1:80) no se redirigirá porque no hay una rdr ...
línea adecuada y obtendrá un error de conexión.
10.0.0.1 localhost
a /etc/hosts no solucionará su problema porque localhost parece estar codificado en 127.0.0.1.Para que su redirección funcione, descargue pf.conf con sudo pfctl -d
. Luego verifique su ancla y pf.conf:
rdr pass log (all) on lo0 inet proto tcp from any to any port 80 -> 127.0.0.1 port 3000
rdr pass log (all) on lo0 inet proto tcp from any to any port 443 -> 127.0.0.1 port 7000
y
...
scrub-anchor "com.apple/*"
nat-anchor "com.apple/*"
rdr-anchor "com.apple/*"
rdr-anchor "myorganization"
dummynet-anchor "com.apple/*"
anchor "com.apple/*"
load anchor "com.apple" from "/etc/pf.anchors/com.apple"
load anchor "myorganization" from "/etc/pf.anchors/myorganization"
Luego analice/verifique myorganization con sudo pfctl -vnf /etc/pf.anchors/myorganization
y cargue pf.conf con sudo pfctl -evf /etc/pf.conf
.
En algunos casos raros, es posible que deba agregar una línea adicional:
::1 127.0.0.1
a su archivo /etc/hosts. Sin embargo, esto no parece lógico y puede aplicarse solo a versiones anteriores de Sierra. No he podido confirmar esto.
klanomath
Daniel Flipance
klanomath
Daniel Flipance
Daniel Flipance