He estado tratando de hacer un cambio (para el reenvío de puertos / redireccionamiento) a la pfctl.conf
y que lo haga ( el /etc/pfctl.conf
) cargado al inicio. El pfctl.conf
se ha confirmado que funciona como se esperaba porque la emisión de sudo pfctl -ef /etc/pfctl.conf
conduce al comportamiento deseado (las peticiones a un puerto se reenvían al otro).
Que pfctl
se carga realmente al inicio también se confirma porque al hacer launchctl list | grep pf
muestra com.apple.pfctl
en la salida. Sin embargo, el comportamiento de reenvío deseado no se consigue directamente tras el arranque. Sólo ocurre al hacer pfctl -f /etc/pfctl.conf
después de la puesta en marcha. Curiosamente, la salida de pfctl -ef /etc/pfctl.conf
dice todavía pf already enabled
.
Por lo tanto, llegué a la conclusión de que mientras pf se carga en el inicio, el demonio parece no cargar desde el archivo conf. El cuerpo del demonio de lanzamiento com.apple.pfctl.plist
ahora parece:
<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>
Tras comprobar la discusión en Conseguir que launchd lea correctamente los argumentos del programa Ya he tratado de editar los argumentos del programa del archivo plist para incluir la ruta completa al ejecutable de pfctl (como se puede ver en el código anterior - primera línea de la matriz de argumentos), pero en vano. También he añadido un argumento (segunda línea de la matriz de argumentos) para lanzar realmente pfctl basado en la discusión en este punto de vista . El demonio también parece estar configurado correctamente según las instrucciones en Documentos para desarrolladores de Apple . De acuerdo con la documentación para desarrolladores (que indica que la etiqueta de programa es necesaria cuando no se suministran los argumentos de programa y viceversa), también intenté eliminar la etiqueta de programa dejando la matriz de argumentos de programa en su lugar (con la ruta del ejecutable como primer argumento), pero esto tampoco tuvo efecto.
Curiosamente, la versión enviada del pfctl.plist
(que puede ser asumido como correcto) tenía tanto la etiqueta de programa como la etiqueta de argumentos de programa, aparentemente en contradicción con los documentos de desarrollo (o tal vez entendí mal los documentos).
Así que ahora estoy completamente perdido. Cualquier ayuda será muy apreciada.
Información adicional: No estoy seguro de que esto sea relevante, pero por si acaso: el archivo de anclaje (creado por mí) al que hace referencia pf.conf tiene el siguiente aspecto:
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 demonio? Si es así, ¿cómo se puede arreglar?