Я пытался внести изменения (для переадресации / перенаправления портов) в 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
Так есть ли вероятность того, что сетевой интерфейс еще не активен и адреса не были назначены во время работы демона? Если так, как это можно исправить?