Нещодавно мені теж довелося зробити подібне, і в пошуках натрапив на цю відповідь. На жаль, відповідь Nafe використовує, ipfwяка зараз застаріла і недоступна в OSX; а відповідь Кевіна Лірі насправді трохи шахрайська. Тому я повинен був зробити щось краще (чистіше) і вирішив поділитися тут для нащадків. Ця відповідь багато в чому ґрунтується на підході, згаданому в цій суті .
Як зазначає ОП, вказівник браузера на 192.168.99.100 повинен отримати відповідь від сервера в localhost: 8000. Додавання псевдоніму ifconfigнасправді не є необхідним, pfctlодне достатньо: щоб досягти цього, pf.confфайл /etc/pf.confпотрібно змінювати.
Спочатку ми створюємо (з Судо) новим якірним файлом (назвемо його redirection) по адресою: /etc/pf.anchors/redirection. В основному це звичайний текстовий файл і містить наступний рядок (так само , як у відповідь Кевін Лірі): rdr pass on lo0 inet proto tcp from any to 192.168.99.100 port = 80 -> 127.0.0.1 port 8000. Після створення нового файлу прив’язки до нього потрібно посилатися у pf.confфайлі. Відкрийте pf.confфайл з sudo та додайте rdr-anchor "redirection"після останнього рядка rdr-anchor (який є rdr-anchor "com.apple/*") та додайте load anchor "redirection" from "/etc/pf.anchors/redirection"в кінці.
Зрештою, так має виглядати файл pf.conf:
scrub-anchor "com.apple/*"
nat-anchor "com.apple/*"
rdr-anchor "com.apple/*"
rdr-anchor "redirection" #added for redirection/port forwarding
dummynet-anchor "com.apple/*"
anchor "com.apple/*"
load anchor "com.apple" from "/etc/pf.anchors/com.apple"
load anchor "pow" from "/etc/pf.anchors/redirection" #added for redirection/port forwarding
І це майже все. Просто перезапустіть pfctl, видавши, sudo pfctl -dщоб спочатку його відключити, а потім sudo pfctl -fe /etc/pf.confзнову запустити.
Тепер, якщо вам потрібно це зробити автоматично після кожного перезавантаження, потрібно виконати ще одну крихітну роботу: демонстрація запуску для pfctlпотреб має бути оновлена (посилальна суть зазначає, що pf увімкнено автоматично під час завантаження, однак, схоже, це не буде випадок від перегляду коду). Відкрийте (з судо) System/Library/LaunchDaemons/com.apple.pfctl.plistі шукайте це:
<array>
<string>pfctl</string>
<string>-f</string>
<string>/etc/pf.conf</string>
</array>
і додайте рядок, <string>-e</string>щоб в кінцевому рахунку зробити так:
<array>
<string>pfctl</string>
<string>-e</string>
<string>-f</string>
<string>/etc/pf.conf</string>
</array>
Це повинно це робити.
Caveat : Apple більше не дозволяє змінювати файли демон-версії просто так (ні з судо, ні з chmod, ні з чим іншим). Тільки шлях повозитися з системою захисту від цілісності налаштувань: завантажитися в режимі відновлення і запуску терміналу. Перевірте статус SIP за допомогою csrutil status, він, як правило, повинен бути включений. Відключіть його csrutil disableта перезавантажте в звичайному режимі, а потім внесіть зміни до файлу плістів, як обговорювалося вище. Після завершення поверніться до режиму відновлення та повторно увімкніть захист (він діє з поважних причин), видавши csrutil enable.
Пояснення: Ви можете перевірити, видавши ifconfigкоманду, яка 127.0.0.1вже є (за замовчуванням) псевдонімом localhost lo0 - цей факт використовується, щоб уникнути необхідності додавати додатковий псевдонім для localhost і просто використовувати адресу за замовчуванням у pf.confфайлі.
ОНОВЛЕННЯ: На жаль, здається, що завантаження файлу при запуску не працює. Я все ще намагаюся отримати допомогу, щоб її сортувати. До цього часу біг sudo pfctl -f /etc/pf.confпісля запуску робить трюк.