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

56

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

Каков современный способ переадресации портов в Эль-Капитане?

Я просто хочу перенаправить порт 80 на порт 8080.

Базилик Бурк
источник
Пожалуйста, примите ответ.
Эфрен

Ответы:

79

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

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

Используется современный способ переадресации портов в Эль-Капитане 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).

    В качестве альтернативы вы можете создать свой собственный демон запуска, подобный ответу здесь: Использование сервера 5.0.15 для общего доступа в Интернет БЕЗ общего доступа в Интернет .

После обновления системы или обновления некоторые из указанных выше исходных файлов могут быть заменены, и вам придется повторно применить все изменения.

Если вы хотите перенаправить через разные интерфейсы, вы должны включить это в /etc/sysctl.conf:

net.inet.ip.forwarding=1
net.inet6.ip6.forwarding=1
klanomath
источник
7
Почему нет простой команды, чтобы сделать это больше? Это слишком сложно сейчас.
Dr.Knowitall
@klanomath - это работает, и я могу перенаправить порт x на порт y на 127.0.0.1 и т. д., но я не могу перенаправить порты на мой windows vm, работающий на рабочем столе paralles, есть идеи? вот мой вопрос stackoverflow.com/questions/40695684/…
Судхир N
Кажется, не работает при пересылке порта на виртуальную машину, которая работает на рабочем столе Parallels
Sudhir N
@sudhir Вы не успешно связались со своим новым Вопросом. По умолчанию виртуальная машина Parallels не видна в сети в качестве меры безопасности. Вы можете изменить настройку в конфигурации виртуальной машины, чтобы сделать виртуальную машину видимой. И помните, pingэто ваш друг в диагностике сетевых проблем.
Василий Бурк
1
@ Вопрос Сухира
Эфрен
3

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