Portweiterleitung in OS X 10.10

Ich muss jede Internetseite an meine lokale Adresse weiterleiten, dh 127.0.0.1 mit OS X.

Ich habe folgenden Befehl versucht, aber er hat keine Wirkung:

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

Ich habe versucht, die genaue Bedeutung der obigen Zeile zu recherchieren, aber ich kann keine gute Erklärung finden. Wie führe ich diese Weiterleitung durch?

Bearbeiten 1 :

Nehmen wir an, ein Benutzer gibt "www.google.com" in den Browser ein; das sollte sich so auswirken -->

Der Benutzer sollte auf meine lokale Seite umgeleitet werden, die sich unter 127.0.0.1:8080 befindet

Wenn ich jetzt 127.0.0.1:8080 drücke, sehe ich mein lokales Portal.

Aber ich möchte, dass es nach der Weiterleitung von "Google.com" angezeigt wird.

Ich schreibe folgende Erklärung. Aber sie zeigen keinerlei Wirkung.

rdr pass on lo0 proto {tcp, udp} from any to any port 80 -> 127.0.0.1 port 7894 
pass out log(all) on em0 route-to lo0 inet proto {tcp, udp} from any to any port 80 keep state

Ich schreibe die obigen Zeilen in meine Ankerdatei und füge Anker zu pf.conf mit rdr-anchor hinzu

Was genau versuchst du zu erreichen?
Haben Sie die Manpage für pf.conf(5) und pfctl(8) gelesen ?
@techraf, ich möchte eine bestimmte Seite umleiten, sagen wir 'www.google.com' auf meine lokale Seite, dh 127.0.0.1:8080, die als lokales Google.com bereitgestellt werden kann. Wenn wir jede Seite auf mein lokales Portal umleiten könnten, wäre das auch in Ordnung
google.comleitet Sie sofort auf https um und umgeht Ihre Umleitung, wenn Sie die Umleitung für Port 443 konfigurieren, erhalten Sie einen Zertifikatfehler im Browser. Ist es das, was Sie erreichen wollen?
@PrafulD Du verstehst den Teil "zu keinem" immer noch nicht. "Any" bedeutet nicht alle IP-Adressen der ganzen Welt, sondern alle IP-Adressen der lokalen Maschine. Die IP-Adresse von Google (z. B. 216.58.201.206) ist also nicht im to any in "from any to any port 80" enthalten! Das zu jedem bedeutet alle IP-Adressen des lokalen (Ziel-/Web-)Servers (dies kann en0 (Ethernet): 192.168.0.3/10.12.24.3, en1 (WLAN): 192.168.1.3 usw. sein)
@klanomath, ich bin neu dabei. Können Sie mir die Zeilen mitteilen, die ich in meine pf.conf-Datei einfügen muss, damit google.com auf mein lokales Portal umgeleitet wird
@PrafulD Bitte fügen Sie Ihre Netzwerkkarte (Netzwerkumgebung) hinzu. Sie haben immer noch nicht richtig angegeben, ob sich der Benutzer nur auf dem lokalen (Portal-) Computer befindet oder ob andere Client-Computer (mit anderen Benutzern) im Netzwerk ebenfalls auf den Portal-Computer umgeleitet werden sollen.
@klanomath, Benutzer befindet sich nur auf dem lokalen Computer. Ich habe einen Mac mit WLAN-Verbindung. und ich möchte, dass es zum lokalen Portal von sich selbst umleitet.

Antworten (1)

Wenn ich Ihre Frage und Ihren Kommentar richtig verstehe, versuchen Sie, so etwas wie ein lokales Captive-Portal zu erreichen.

pfDies kann nicht mit und einer einfachen Weiterleitung erfolgen . Es sind viel mehr Dinge und Konfigurationen erforderlich. Hier (der Link zu bsdguides.org in der Github-Readme funktioniert nicht: richtiger Link ) findest du ein Beispiel, wie man das in OpenBSD macht. Die dortige Lösung kann unter Umständen an OS X angepasst werden.


Die Regel rdr pass inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080macht Folgendes:

rdr pass inet proto tcp from any to any port 80 -> 127.0.0.1 port 8080
|   |    |              |
|   |    |              #from any IP (all source IPs) to any IP (all destination IPs of the local machine)
|   |    |              from any to any
|   |    #IPv4 Protocol TCP
|   |    inet proto tcp
|   #allow
|   pass
#redirect from port 80 to localhost:8080
rdr                                     port 80 -> 127.0.0.1 port 8080

Oder: Jeder eingehende ( rdrleitet nur eingehende Pakete um) IPv4-TCP-Verkehr (auf jeder Schnittstelle) an Port 80 von jeder IP zu jeder IP (auf jeder Schnittstelle) des lokalen Computers wird weitergeleitet und an 127.0.0.1:8080 umgeleitet.

Die Regel leitet Anfragen von einem lokalen Clientcomputer für google.com:80 (z. B. 216.58.201.206:80) oder 175.68.9.102:80 nicht an 127.0.0.1:80 weiter, da keine dieser IPs eine IP des lokalen ( www-)Server-Rechner noch weiß der lokale (www-)Server von den Anfragen.

Dies gilt nicht für den ausgehenden Datenverkehr des lokalen Computers, da dies kein eingehender Datenverkehr ist. Sie müssen diesen Verkehr zuerst loopen:

Ich habe meiner pf.anchor-Datei die folgenden zwei Zeilen hinzugefügt, rdr pass on lo0 proto {tcp, udp} from any to any port 80 -> 127.0.0.1 port 7894 pass out log(all) on em0 route-to lo0 inet proto {tcp, udp} from any to any port 80 keep stateaber es funktioniert nicht
@PrafulD Bitte fügen Sie den Inhalt Ihres Kommentars zu Ihrer Frage hinzu und erklären Sie genau, was Sie erreichen möchten. Letzteres ist noch unklar!