He estado intentando realizar un cambio (para el reenvío / redireccionamiento de puertos) al archivo pfctl.conf
y lo tengo cargado (el archivo /etc/pfctl.conf
) al inicio. Se ha confirmado que pfctl.conf
funciona como se esperaba porque la emisión de sudo pfctl -ef /etc/pfctl.conf
conduce al comportamiento deseado (las solicitudes a un puerto se reenvían al otro).
El hecho de que pfctl
en sí se cargue al inicio también se confirma porque al hacer launchctl list | grep pf
se muestra com.apple.pfctl
en la salida. Sin embargo, el comportamiento de reenvío deseado no se logra directamente después del inicio. Sucede solo al hacer pfctl -f /etc/pfctl.conf
después del inicio. Por extraño que parezca, la salida de pfctl -ef /etc/pfctl.conf
todavía dice pf already enabled
.
Por lo tanto, llegué a la conclusión de que mientras pf se carga al inicio, el daemon parece no cargarse desde el archivo conf. El cuerpo del daemon de lanzamiento com.apple.pfctl.plist
ahora se ve así:
<plist version="1.0">
<dict>
<key>Disabled</key>
<false/>
<key>Label</key>
<string>com.apple.pfctl</string>
<key>WorkingDirectory</key>
<string>/var/run</string>
<key>Program</key>
<string>/sbin/pfctl</string>
<key>ProgramArguments</key>
<array>
<string>/sbin/pfctl</string>
<string>-e</string>
<string>-f</string>
<string>/etc/pf.conf</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
Habiendo revisado la discusión en Obtener launchd para leer los argumentos del programa correctamente fue informativo pero no es útil en este caso: ya he intentado editar los argumentos del programa del archivo plist para incluir la ruta completa al ejecutable pfctl (como se puede ver en el código de arriba - la primera línea de la matriz de argumentos), pero no sirvió para nada. También agregué un argumento (segunda línea de matriz de argumentos) para lanzar pfctl en base a la discusión en this gist . El daemon también parece estar configurado correctamente de acuerdo con las instrucciones en Documentos para desarrolladores de Apple . De acuerdo con los documentos del desarrollador (que indican que la etiqueta del programa es necesaria cuando no se suministran los argumentos del programa y viceversa), también intenté eliminar la etiqueta del programa mientras dejaba la matriz de argumentos del programa en su lugar (con la ruta al ejecutable como el primer argumento) - pero esto tampoco tuvo efecto.
Sorprendentemente, la versión enviada del archivo pfctl.plist
(que puede asumirse como muy probablemente correcta) tenía la etiqueta de programa y la etiqueta de argumentos del programa, aparentemente en contradicción con los documentos dev ((o tal vez yo entendí mal los documentos).
Así que ahora estoy completamente perdido. Cualquier ayuda sería muy apreciada!
Información adicional: No estoy seguro de que esto sea relevante, pero en caso de que lo sea: el archivo delimitador (creado por mí) al que hace referencia pf.conf parece:
rdr pass on lo0 inet proto tcp from any to 127.0.0.1 port =80 -> 127.0.0.1 port 8888
Entonces, ¿existe la posibilidad de que la interfaz de red aún no esté activa y no se hayan asignado las direcciones en el momento en que se ejecuta el daemon? Si es así, ¿cómo se puede arreglar?