Описание тега roux
ТЛ;ДР: на Мохаве (не проверял на других), при создании РДР
правила в ПФ
, правила работы на некоторое время (некоторые проблемы при доступе к целевой порт напрямую), но через некоторое время эти правила перестают работать, хотя я не могу сделать через pfctl
сообщить что-нибудь по-другому таким образом, что делает его очевидным, что они более не применяются.
Я создал /библиотека/LaunchDaemons/Дев.вверх.через pfctl.файл plist
:
<?формат XML версия="1.0" кодирование="UTF-8"?>
<!Элемент DOCTYPE plist с общественностью "-//Яблока//ДТД файл plist 1.0//ванной" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist ОС версия="1.0">
<дикт>
<ключ>отключен</ключ>
<ложных/>
<ключ>метка</ключ>
<строка>Дэв.вверх.через pfctl</строка>
<ключ>WorkingDirectory</ключ>
<строка>в/var/выполнения</строка>
<ключ>программы</ключ>
<строка>на/sbin/через pfctl</строка>
<ключ>Аргументы</ключ>
<массив>
<строка>через pfctl</строка>
<строка>-е</строка>
</массив>
<ключ>RunAtLoad</ключ>
<правда/>
</дикт>
</plist в>
...и пути/Library/LaunchDaemons/Дев.вверх.loopbackalias.файл plist
:
<?формат XML версия="1.0" кодирование="UTF-8"?>
<!Элемент DOCTYPE plist с общественностью "-//компьютер Apple//DTD с файл plist 1.0//ванной" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist ОС версия="1.0">
<дикт>
<ключ>метка</ключ>
<строка>Дэв.вверх.loopbackalias.файл plist</строка>
<ключ>RunAtLoad</ключ>
<правда/>
<ключ>Аргументы</ключ>
<массив>
<строка>на/sbin/ifconfig, которые</строка>
<строка>назван lo0</строка>
<строка>псевдоним</строка>
<строка>127.0.0.42</строка>
</массив>
</дикт>
</plist в>
Я добавил следующее в файл/etc/ПФ.конф
:
# разрешить nginx для привязки на :20080 вместо :80 и :20443 вместо :443.
# Это позволяет нам запустить его как не-root пользователей, и таким образом не требует
# auth, чтобы обновить/перезапустить его.
РДР передать назван lo0 инет прото-TCP с любого порта 127.0.0.42 80 -> порт 127.0.0.42 20080
РДР передать назван lo0 инет прото-TCP с любой 127.0.0.42 порт 443 -> порт 127.0.0.42 20443
...и у меня nginx не работает и привязан к 127.0.0.42:20080
и 127.0.0.42:20443
.
Когда я применяю настройки, перезагрузка или запуск через pfctl -F в файл /etc/ПФ.конф
, все работает:
$ завиток http://127.0.0.42:80/services/ping
ОК
Однако...
Проблема 1
Хотя это правило является активным, доступ к целевой порт (20080/20443) напрямую имеет некоторые интересные вопросы. Есть задержка в доступе к ней, что, кажется, быстро растет с номером (последние?) доступы:
$ завиток -ы -о времени /dev/нуль http://127.0.0.42:20080/services/ping
(0,2 секунды)
$ завиток -ы -о времени /dev/нуль http://127.0.0.42:20080/services/ping
(1.6 секунд)
$ завиток -ы -о времени /dev/нуль http://127.0.0.42:20080/services/ping
(27 секунд)
$ завиток -ы -о времени /dev/нуль http://127.0.0.42:20080/services/ping
(тайм-аут)
(впрочем, на протяжении, доступ :80
—порт перенаправляется на ПФ
для :20080
—работает и принимает <25 мс.)
Проблема 2
Через некоторое время, правила перенаправления полностью перестает действовать, как если ПФ
не включается вообще, или правила не были загружены, но он до сих пор утверждает, включен и я все еще вижу это сообщает ПФ
:
$ через pfctl -с нац
Нет поддержки altq в в ядра
Функции, связанные с altq в отключены
нац-якорь "ком.яблоко/*" все
РДР-якорь "ком.яблоко/*" все
РДР передать назван lo0 инет прото-TCP с любого порта 127.0.0.42 = 80 -> порт 127.0.0.42 20080
РДР передать назван lo0 инет прото-TCP с любого порта 127.0.0.42 = 443 -> 127.0.0.42 порт 20443
$ через pfctl -S Инфо | грэп включено
Нет поддержки altq в в ядра
Функции, связанные с altq в отключены
Статус: включен в течение 6 14 дней:56:42 отладки: срочно
$ завиток -с http://127.0.0.42:80/services/ping
завиток: (7) не удалось подключиться к порту 127.0.0.42 80: соединение сброшено
$ завиток -с http://127.0.0.42:20080/services/ping
ОК
Я в состоянии вызвать довольно надежно при отключении от WiFi. Я думаю, скорее всего это происходит только тогда, когда изменения в сети происходят.