Старая утилита ipfw
не рекомендуется в последних версиях Mac OS X, и теперь ее нет в El Capitan.
Каков современный способ переадресации портов в El Capitan?
Я просто хочу, чтобы порт 80 перенаправлялся на порт 8080.
Чтобы перенаправить весь трафик порта 80 на порт 8080, вы можете ввести следующее в командной строке терминала.
echo "
rdr pass inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
" | sudo pfctl -ef -
Взято с https://salferrarello.com/mac-pfctl-port-forwarding/
Современный способ переадресации портов в El Capitan — использование pf
. В приведенном ниже примере все запросы порта 80 перенаправляются на порт 8080 на том же хосте. Пожалуйста, настройте перенаправления в соответствии с вашими потребностями.
Создайте файл привязки org.user.forwarding в /private/etc/pf.anchors
sudo touch /private/etc/pf.anchors/org.user.forwarding
со следующим содержимым и завершающей пустой строкой
rdr pass on lo0 inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
rdr pass on en0 inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
rdr pass on en1 inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
или же
rdr pass inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
Измените файл /private/etc/pf.conf, но оставьте пустую строку в конце.
исходный файл:
scrub-anchor "com.apple/*"
nat-anchor "com.apple/*"
rdr-anchor "com.apple/*"
dummynet-anchor "com.apple/*"
anchor "com.apple/*"
load anchor "com.apple" from "/etc/pf.anchors/com.apple"
к
scrub-anchor "com.apple/*"
nat-anchor "com.apple/*"
rdr-anchor "com.apple/*"
rdr-anchor "org.user.forwarding"
dummynet-anchor "com.apple/*"
anchor "com.apple/*"
load anchor "com.apple" from "/etc/pf.anchors/com.apple"
load anchor "org.user.forwarding" from "/etc/pf.anchors/org.user.forwarding"
Разберите и проверьте файл привязки, чтобы убедиться в отсутствии ошибок:
sudo pfctl -vnf /etc/pf.anchors/org.user.forwarding
Теперь измените /System/Library/LaunchDaemons/com.apple.pfctl.plist из
<array>
<string>pfctl</string>
<string>-f</string>
<string>/etc/pf.conf</string>
</array>
к
<array>
<string>pfctl</string>
<string>-e</string>
<string>-f</string>
<string>/etc/pf.conf</string>
</array>
Для этого необходимо отключить защиту целостности системы. После редактирования файла повторно включите SIP. После перезагрузки вашего Mac pf будет включен (это опция -e).
В macOS 10.15 Catalina (и ее системном томе только для чтения) вам необходимо отредактировать демон запуска в режиме восстановления. SIP по умолчанию отключен в режиме восстановления, поэтому нет необходимости выполнять csrutil :
/Volumes/Name_of_boot_volume/usr/bin/nano /Volumes/Name_of_boot_volume/System/Library/LaunchDaemons/com.apple.pfctl.plist
с именем загрузочного тома по умолчанию Macintosh HD это:
/Volumes/Macintosh\ HD/usr/bin/nano /Volumes/Macintosh\ HD/System/Library/LaunchDaemons/com.apple.pfctl.plist
В качестве альтернативы вы можете создать свой собственный демон запуска, аналогичный ответу здесь: Использование сервера 5.0.15 для совместного использования Интернета БЕЗ общего доступа к Интернету .
После обновления системы или обновления некоторые из исходных файлов, указанных выше, могли быть заменены, и вам придется повторно применить все изменения.
Если вы хотите пересылать через разные интерфейсы, вы должны включить это в /etc/sysctl.conf:
net.inet.ip.forwarding=1
net.inet6.ip6.forwarding=1
ping
это ваш друг в диагностике сетевых проблем.9283
. Добавил в org.user.forwarding
: rdr pass on lo0 inet proto tcp from any to any port 443 -> 127.0.0.1 port 9283
и относительные анкоры в pf.conf, перезапустил их командами sudo pfctl -f /etc/pf.conf
. Но когда я пытаюсь получить доступ к веб-сайту, mywebsite.dev
я не получаю ответа от сервера. Но если я явно пишу порт, то работает. Что, может быть, я здесь упускаю?/System/Library/LaunchDaemons/com.apple.pfctl.plist
не работает в Catalina из -за файловой системы только для чтения (даже с отключенным SIP)Чтобы расширить решение из ответа @sal-ferrarello, я создал два супер-базовых сценария оболочки, чтобы включить или отключить перенаправление без ущерба для уже существующих записей в файлах pf
.
I. Сначала найдите, какие записи у вас уже есть:
sudo pfctl -s nat
Мой вывод был таким:
No ALTQ support in kernel
ALTQ related functions disabled
nat-anchor "com.apple/*" all
rdr-anchor "com.apple/*" all
Что нас интересует, так это фактические записи, поэтому опустите первые две информационные строки.
II. Создать enable.sh
скрипт:
#!/bin/sh
echo "
nat-anchor \"com.apple/*\" all
rdr-anchor \"com.apple/*\" all
rdr pass inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
" | sudo pfctl -ef -
sudo pfctl -s nat
Первые две строки после echo
— это записи, которые уже были там. Третья строка с новой переадресацией — в данном случае с 80 на 8080. В конце мы звоним, sudo pfctl -s nat
чтобы посмотреть, были ли применены изменения.
III. Создать disable.sh
скрипт:
Аналогично enable.sh
создаем скрипт, но без редиректа 80->8080, а с предыдущими уже существующими записями:
#!/bin/sh
echo "
nat-anchor \"com.apple/*\" all
rdr-anchor \"com.apple/*\" all
" | sudo pfctl -ef -
sudo pfctl -s nat
Анупам Джайн
Брэд Паркс
sudo pfctl -F all -f /etc/pf.conf
и отобразить текущие правила переадресации портов,sudo pfctl -s nat
Гвидо Тарсия
pf.conf
файл