Запустить демон, не обрабатывающий программные аргументы

2

Я пытался внести изменения (для переадресации / перенаправления портов) в pfctl.confфайл и /etc/pfctl.confзагрузить его ( файл) при запуске. pfctl.confБыло подтверждено, что работает , как ожидалось , поскольку выпуск sudo pfctl -ef /etc/pfctl.confприводит к желаемому поведению (запросы к одному порту получить перенаправлены на другой).

То, что pfctlсамо загружается при запуске, также подтверждается тем, что launchctl list | grep pfпоказ com.apple.pfctlв выводе. Однако желаемое поведение при пересылке не достигается сразу после запуска. Это происходит только при выполнении pfctl -f /etc/pfctl.confпосле запуска. Как ни странно, выход pfctl -ef /etc/pfctl.confеще говорит pf already enabled.

Поэтому я пришел к выводу, что пока pf загружается при запуске, демон, похоже, не загружается из файла conf. Тело демона запуска com.apple.pfctl.plistтеперь выглядит так:

<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>

Проверив обсуждение в Getting launchd, чтобы правильно прочитать аргументы программы, это было информативно, но практически не полезно в этом случае - я уже пытался отредактировать аргументы программы в файле plist, чтобы включить полный путь к исполняемому файлу pfctl (как можно увидеть в код выше - первая строка массива arguments) но безрезультатно. Я также добавил аргумент (массив второй строки аргументов), чтобы фактически запустить pfctl, основываясь на обсуждении в этой сущности . Демон также, кажется, настроен правильно в соответствии с инструкциями в документации для разработчиков Apple., В соответствии с документами для разработчиков (в которых говорится, что программный тег необходим, когда аргументы программы не указаны, и наоборот), я также попытался удалить программный тег, оставив массив аргументов программы на месте (с указанием пути к исполняемому файлу как первый аргумент) - но это тоже не имело никакого эффекта.

Как ни странно, в поставляемой версии pfctl.plistфайла (которая, скорее всего, является правильной) был указан тег программы и аргументы программы, что явно противоречит документации разработчика (или, может быть, я неправильно понял документацию).

Так что теперь я в полном недоумении. Любая помощь будет наиболее ценится!

Дополнительная информация: Не уверен, что это актуально, но на всякий случай так: файл привязки (созданный мной), на который ссылается pf.conf, выглядит так:

rdr pass on lo0 inet proto tcp from any to 127.0.0.1 port =80 -> 127.0.0.1 port 8888  

Так есть ли вероятность того, что сетевой интерфейс еще не активен и адреса не были назначены во время работы демона? Если так, как это можно исправить?

Yogesch
источник
Похоже, у вас есть путь к pfctl дважды. Удалить один из аргументов программы?
Джон Китс
Да, в этом фрагменте это действительно так. По умолчанию (стоковая версия) действительно было то, что вы сказали - удалите его из аргументов программы. Поскольку это не сработало, я попытался добавить его к аргументам после прочтения (связанного) руководства. Однако я также попытался указать полный путь в теге аргументов программы, но не в теге программы (полностью удалил тег программы). Ни одна из комбинаций не сработала, к сожалению.
Йогеш
Вы пытались поместить все это в программный тег и просто исключить из него все аргументы? Кроме того, когда он работает, как выглядит PS wwaux?
Джон Китс