Нещодавно мені теж довелося зробити подібне, і в пошуках натрапив на цю відповідь. На жаль, відповідь 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
після запуску робить трюк.