Каков современный способ переадресации портов на El Capitan? (переадресация порта 80 на 8080)

Старая утилита ipfwне рекомендуется в последних версиях Mac OS X, и теперь ее нет в El Capitan.

Каков современный способ переадресации портов в El Capitan?

Я просто хочу, чтобы порт 80 перенаправлялся на порт 8080.

Ответы (3)

Чтобы перенаправить весь трафик порта 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/

Работал отлично!
и из упомянутой статьи, чтобы удалить его sudo pfctl -F all -f /etc/pf.confи отобразить текущие правила переадресации портов,sudo pfctl -s nat
имейте в виду, что это решение не добавляет правила, а заменяет любое другое правило, загруженное ранее, включая pf.confфайл

Современный способ переадресации портов в El Capitan — использование pf. В приведенном ниже примере все запросы порта 80 перенаправляются на порт 8080 на том же хосте. Пожалуйста, настройте перенаправления в соответствии с вашими потребностями.

  1. Создайте файл привязки 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
    
  2. Измените файл /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"
    
  3. Разберите и проверьте файл привязки, чтобы убедиться в отсутствии ошибок:

    sudo pfctl -vnf /etc/pf.anchors/org.user.forwarding
    
  4. Теперь измените /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
Почему больше нет простой команды для этого? Это слишком сложно сейчас.
@klanomath - это работает, и я могу перенаправить порт x на порт y на 127.0.0.1 и т. д., но я не могу перенаправить порты на мою виртуальную машину Windows, работающую на рабочем столе paralles, есть идеи? вот мой вопрос stackoverflow.com/questions/40695684/…
Не работает при переадресации порта на виртуальную машину, работающую на параллельном рабочем столе.
@sudhir Вы не успешно связались со своим новым вопросом. По умолчанию виртуальная машина Parallels не видна в сети из соображений безопасности. Вы можете изменить параметр в конфигурации виртуальной машины, чтобы сделать виртуальную машину видимой. И помните, pingэто ваш друг в диагностике сетевых проблем.
@klanomath Какую «одну команду» мы должны «увидеть ниже»? Я не понимаю.
@BasilBourque Когда я написал комментарий, ответ Сала Феррарелло получил меньше голосов, чем мой ;-). Однако он не выживает после перезагрузки, и вам нужно снова ввести его после перезагрузки ...
@klanomath Спасибо. К вашему сведению, вы можете сделать ссылку на другой ответ, используя URL-адрес, указанный в ссылке «поделиться» в этом ответе. Пример: см . ответ Сала Феррарелло.
@BasilBourque Вероятно, я торопился и просто написал быстрый и грязный комментарий (без надлежащей ссылки) ...
Я запускаю Puma-dev, который запускает HTTPS на 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я не получаю ответа от сервера. Но если я явно пишу порт, то работает. Что, может быть, я здесь упускаю?
Я нахожусь в High Sierra и получаю синтаксическую ошибку при тестировании (шаг № 3). ?
@allicarn Вы добавили пустую новую строку (1x клавишу ввода) в конце обоих файлов?
Вот оно! Извините, я пропустил это в вашей инструкции. Спасибо!
Метод редактирования /System/Library/LaunchDaemons/com.apple.pfctl.plistне работает в Catalina из -за файловой системы только для чтения (даже с отключенным SIP)
@JamesCushing В Catalina вы можете редактировать его, загрузившись в режим восстановления! Добавил описание в свой ответ...

Чтобы расширить решение из ответа @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