Jaki jest nowoczesny sposób przekierowania portów na El Capitan? (port przekazywania 80 do 8080)

56

Stare narzędzie ipfwzostało zniechęcone w najnowszych wersjach Mac OS X i teraz nie ma go w El Capitan.

Jaki jest nowoczesny sposób przekierowania portów w El Capitan?

Chcę po prostu, aby port 80 przekierował na port 8080.

Basil Bourque
źródło
Proszę przyjąć odpowiedź.
Efren

Odpowiedzi:

79

Aby przekierować cały ruch z portu 80 na port 8080, możesz wpisać następujące polecenie w wierszu polecenia Terminal.

echo "
rdr pass inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
" | sudo pfctl -ef -

Zaczerpnięte z https://salferrarello.com/mac-pfctl-port-forwarding/

Sal Ferrarello
źródło
1
Działa idealnie!
Anupam Jain,
17
i ze wspomnianego artykułu, aby go usunąć sudo pfctl -F all -f /etc/pf.confi wyświetlić swoje obecne reguły przekierowania portów,sudo pfctl -s nat
Brad Parks
4
należy pamiętać, że to rozwiązanie nie dodaje reguł, ale zastępuje wszelkie inne reguły załadowane wcześniej, w tym pf.confplik
erandros
36

Korzysta z nowoczesnego sposobu przekazywania portów w El Capitan pf. W poniższym przykładzie wszystkie żądania portu 80 są przekazywane do portu 8080 na tym samym hoście. Dostosuj przekierowania do swoich potrzeb.

  1. Utwórz plik kotwicy org.user.forwarding w /private/etc/pf.anchors

    sudo touch /private/etc/pf.anchors/org.user.forwarding
    

    o następującej treści i końcowym pustym wierszu

    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
    

    lub

    rdr pass inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
    
  2. Zmodyfikuj plik /private/etc/pf.conf, ale pozostaw końcową pustą linię

    oryginalny plik:

    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"
    

    do

    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. Analizuj i testuj plik kontrolny, aby upewnić się, że nie ma błędów:

    sudo pfctl -vnf /etc/pf.anchors/org.user.forwarding
    
  4. Teraz zmodyfikuj /System/Library/LaunchDaemons/com.apple.pfctl.plist z

    <array>
        <string>pfctl</string>
        <string>-f</string>
        <string>/etc/pf.conf</string>
    </array>
    

    do

    <array>
        <string>pfctl</string>
        <string>-e</string>
        <string>-f</string>
        <string>/etc/pf.conf</string>
    </array>
    

    Aby to zrobić, musisz wyłączyć ochronę integralności systemu. Po edycji pliku można ponownie włączyć SIP. Po ponownym uruchomieniu komputera Mac pf zostanie włączony (jest to opcja -e).

    Alternatywnie możesz utworzyć własnego demona uruchamiania podobnego do odpowiedzi tutaj: Używanie serwera 5.0.15 do udostępniania Internetu BEZ udostępniania Internetu .

Po aktualizacji systemu lub aktualizacji niektóre oryginalne pliki powyżej mogły zostać zastąpione i trzeba ponownie zastosować wszystkie zmiany.

Jeśli chcesz przekazywać dalej przez różne interfejsy, musisz włączyć to w /etc/sysctl.conf:

net.inet.ip.forwarding=1
net.inet6.ip6.forwarding=1
klanomath
źródło
7
Dlaczego nie ma już prostego polecenia, aby to zrobić? To jest teraz zbyt skomplikowane.
Dr.Knowitall,
@klanomath - to działa i mogę przekierować port x do portu y na 127.0.0.1 itd., ale nie jestem w stanie przekierować portów do mojego vm systemu Windows działającego na pulpicie Paralles, jakiś pomysł? oto moje pytanie stackoverflow.com/questions/40695684/...
Sudhir N,
Wydaje się, że nie działa, gdy przekierowuje port do maszyny wirtualnej działającej na równoległym pulpicie
Sudhir N
@sudhir Nie udało się utworzyć linku do nowego pytania. Domyślnie maszyna wirtualna Parallels nie jest widoczna w sieci ze względów bezpieczeństwa. Możesz zmienić ustawienie w konfiguracji maszyny wirtualnej, aby maszyna wirtualna była widoczna. I pamiętaj, pingjest twoim przyjacielem w diagnozowaniu problemów z siecią.
Basil Bourque,
1
@ suhir's question: apple.stackexchange.com/questions/262708/…
Efren
3

Aby rozszerzyć rozwiązanie z @ sal-ferrarello odpowiedź, stworzyłem dwa super podstawowy Shell Scripts aby włączyć lub wyłączyć przekierowanie bez narażania już istniejących wpisów w pf.

I. Najpierw znajdź wpisy, które już masz:

sudo pfctl -s nat

Moje wyniki były następujące:

No ALTQ support in kernel
ALTQ related functions disabled
nat-anchor "com.apple/*" all
rdr-anchor "com.apple/*" all

To, co nas interesuje, to faktyczne wpisy, więc odrzuć dwie pierwsze linie informacyjne.

II. Utwórz enable.shskrypt:

#!/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

Pierwsze dwa wiersze po nim echoto wpisy, które już tam były. Trzecia linia zawiera nowe przekierowanie - w tym przypadku od 80 do 8080. Na końcu dzwonimy, sudo pfctl -s nataby sprawdzić, czy zmiany zostały zastosowane.

III. Utwórz disable.shskrypt:

Podobnie jak enable.shmy tworzymy skrypt, ale bez przekierowania 80-> 8080, ale z poprzednimi już istniejącymi wpisami:

#!/bin/sh
echo "
nat-anchor \"com.apple/*\" all
rdr-anchor \"com.apple/*\" all
" | sudo pfctl -ef -
sudo pfctl -s nat
Cadavre
źródło