Portweiterleitung auf Mac Pro mit macOS Sierra

Ich möchte von meinem macOS Sierra-Computer mit der IP-Adresse 152.1.2.3 zu meinem NAS 192.168.2.3 weiterleiten. Insbesondere möchte ich auf den HTTP-Webserver auf meinem NAS unter 192.168.2.3/Photos zugreifen. Das NAS leitet den gesamten über HTTP eingehenden Datenverkehr an den richtigen Ordner (Fotos).

Ich habe die Internetfreigabe aktiviert und teile meine Ethernet-Verbindung meines macOS-Computers (152.1.2.3 auf Ethernet 2) mit meinem NAS (192.168.2.3 auf Ethernet 1)

Mein NAS kann das Internet sehen und Updates erhalten.

Ich kann von meinem Computer aus lokal auf den Webserver zugreifen, indem ich 192.168.2.3 eingebe und er führt mich zur Webserver-Seite unter 192.168.2.3/Photos.

Ich kann einfach nicht von außerhalb des lokalen Netzwerks darauf zugreifen.

Die einfache Lösung besteht darin, das NAS direkt mit dem Netzwerk zu verbinden, aber ich kann dies aufgrund lokaler Richtlinien nicht.

Zusammengefasst: Ich möchte folgendes eingeben und zum Webserver auf dem NAS umgeleitet werden --> 152.1.2.3:9999

wäre der Terminalbefehl:

rdr pass on en2 inet proto tcp from any to any port 9999 -> 198.168.2.3 port 80
Ich stimme dafür, diese Frage als nicht zum Thema gehörend zu schließen, da dies ein Netzwerkproblem und kein Apple-Problem ist.
@Rob - das OP verwendet den MacPro als Firewall/Router - es ist definitiv ein Thema.
Die Portweiterleitung wurde jedoch hier auf AD diskutiert, sodass es sich um ein mögliches Duplikat der Portweiterleitung auf macOS Sierra handelt
@Allan Es ist kein (exaktes) Duplikat, da Apples Internetfreigabe beteiligt ist.

Antworten (1)

Die Internetfreigabe in macOS erfolgt (intern) durch Erstellen eines Bridge-Geräts mit zwei oder mehr Schnittstellen, Aktivieren eines DHCP-Servers, Einrichten verschiedener PF-Regeln und Aktivieren von PF.

Um alle Regeln auszudrucken, muss folgendes Shell-Skript ausgeführt werden:

pfdump.sh:

#!/bin/bash

function pfprint() {
  if [ -n "$1" ];then
    sudo pfctl -a "$2" -s"$1" 2>/dev/null
  else
    sudo pfctl -s"$1" 2>/dev/null
  fi
}

function print_all() {

  local p=$(printf "%-40s" $1)
  (
    pfprint r "$1" | sed "s,^,r     ,"
    pfprint n "$1" | sed "s,^,n     ,"
    pfprint A "$1" | sed "s,^,A     ,"
  ) | sed "s,^,$p,"

  for a in `pfprint A "$1"`; do
    print_all "$a"
  done
}

print_all

Standardmäßig ist pf mit dem folgenden pf-Dump deaktiviert:

                                        r     scrub-anchor "com.apple/*" all fragment reassemble
                                        r     anchor "com.apple/*" all
                                        n     nat-anchor "com.apple/*" all
                                        n     rdr-anchor "com.apple/*" all
                                        A       com.apple
com.apple                               r     anchor "200.AirDrop/*" all
com.apple                               r     anchor "250.ApplicationFirewall/*" all
com.apple                               A       com.apple/200.AirDrop
com.apple                               A       com.apple/250.ApplicationFirewall

Nach dem Aktivieren von Internet Sharing ist pf aktiviert und ein Dump sieht so aus:

                                        r     scrub-anchor "com.apple/*" all fragment reassemble
                                        r     scrub-anchor "com.apple.internet-sharing" all fragment reassemble
                                        r     anchor "com.apple/*" all
                                        r     anchor "com.apple.internet-sharing" all
                                        n     nat-anchor "com.apple/*" all
                                        n     nat-anchor "com.apple.internet-sharing" all
                                        n     rdr-anchor "com.apple/*" all
                                        n     rdr-anchor "com.apple.internet-sharing" all
                                        A       com.apple
                                        A       com.apple.internet-sharing
com.apple                               r     anchor "200.AirDrop/*" all
com.apple                               r     anchor "250.ApplicationFirewall/*" all
com.apple                               A       com.apple/200.AirDrop
com.apple                               A       com.apple/250.ApplicationFirewall
com.apple.internet-sharing              r     scrub-anchor "base_v4" all fragment reassemble
com.apple.internet-sharing              r     anchor "base_v4" all
com.apple.internet-sharing              n     nat-anchor "base_v4" all
com.apple.internet-sharing              n     rdr-anchor "base_v4" all
com.apple.internet-sharing              A       com.apple.internet-sharing/base_v4
com.apple.internet-sharing/base_v4      r     scrub on en1 all no-df fragment reassemble
com.apple.internet-sharing/base_v4      r     scrub on bridge100 all no-df max-mss 1460 fragment reassemble
com.apple.internet-sharing/base_v4      r     scrub on bridge100 proto esp all no-df fragment reassemble
com.apple.internet-sharing/base_v4      r     pass on en1 all flags any keep state
com.apple.internet-sharing/base_v4      r     pass on en1 proto esp all no state
com.apple.internet-sharing/base_v4      r     pass on bridge100 all flags any keep state rtable 6
com.apple.internet-sharing/base_v4      n     nat on en1 inet from 192.168.2.0/24 to any -> (en1:0) extfilter ei
com.apple.internet-sharing/base_v4      n     no nat on bridge100 inet from 192.168.2.1 to 192.168.2.0/24
com.apple.internet-sharing/base_v4      n     rdr on bridge100 inet proto tcp from 192.168.2.0/24 to any port = 21 -> 127.0.0.1 port 8021

Hier ist en1 die externe Schnittstelle (diejenige, die mit Ihrem internen Netzwerk geteilt wird) und 192.168.2.0/24 das interne Netzwerk, das vom DHCP-Server bereitgestellt wird. Beide können sich in Ihrer Umgebung unterscheiden.

Um einen internen Server mit aktivierter Internetfreigabe öffentlich zugänglich zu machen, müssen Sie einen Port der externen Schnittstelle an die IP und den Dienstport des Servers weiterleiten:

Erstellen Sie eine RDR-Regel auf dem Router (Ihrem Mac Pro), indem Sie in Terminal.app eingeben:

sudo nano /private/etc/pf-rdr.rule

und der Inhalt:

rdr on en1 inet proto tcp from any to 152.1.2.3 port = 9999 -> 192.168.2.3 port 80

Angenommen, en1 ist die externe Schnittstelle, 152.1.2.3:9999 sein IP:Port und 192.168.2.3:80 der IP:Port des internen Servers. Um die Gerätekennung (und IP) Ihrer externen Schnittstelle zu erhalten, geben Sie ifconfigauf Ihrem Mac Pro ein.

Erstellen Sie dann einen Start-Daemon:

sudo nano /Library/LaunchDaemons/org.user.pfrdr.plist

mit dem Inhalt:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>Disabled</key>
    <false/>
    <key>Label</key>
    <string>org.user.pfrdr</string>
    <key>ProgramArguments</key>
    <array>
        <string>/sbin/pfctl</string>
        <string>-a</string>
        <string>com.apple/portforwarding</string>
        <string>-f</string>
        <string>/private/etc/pf-rdr.rule</string>
    </array>
    <key>RunAtLoad</key>
    <true/>
    <key>StandardErrorPath</key>
    <string>/Library/Logs/org.usr.pfrdr.log</string>
    <key>StandardOutPath</key>
    <string>/Library/Logs/org.usr.pfrdr.log</string>
</dict>
</plist>

Starten Sie den Daemon mit:

sudo launchctl load /Library/LaunchDaemons/org.user.pfrdr.plist

Dadurch wird eine zweite rdr-Regel im com.apple-Anker zu pf hinzugefügt und der externe Port an den internen Host weitergeleitet.

Da DHCP IP-Adressen dynamisch zuweist, ist es auch sinnvoll, eine feste IP für den internen Server zu definieren:

Erstellen Sie eine Datei bootptab auf dem Router (Ihrem Mac Pro):

sudo nano /etc/bootptab

mit dem Inhalt:

# Bootptab file
# Section 1 -- ignored
%%
# Section 2 -- used
# Hardware types: 1=Ethernet, 6=Wireless
#                 See http://www.ietf.org/rfc/rfc1700.txt
#
# machine entries have the following format:
#
# hostname         hwtype     hwaddr         ipaddr   bootfile
your-nas-ethernet     1 c4:2c:03:3a:7f:65 192.168.2.3 boot
a-wireless-machine    6 60:33:4b:27:6c:62 192.168.2.4 boot
another-ethernet      1 00:0d:93:72:e7:96 192.168.2.2 boot

Ersetzen Sie hier die MAC-Adressen (hwaddr) und die Hardwaretypen (hwtype) durch die richtigen, die in Ihrer Umgebung gefunden werden. Die MAC-Adressen erhalten Sie, indem Sie ifconfigden jeweiligen Host eingeben. Starten Sie anschließend Ihren Router (Mac Pro) neu.


Auswirkungen auf die Sicherheit:

Indem Sie Ihren Mac Pro als Router verwenden, ist er dem Internet ausgesetzt und als solches angreifbar. Pf, wie es nach dem Aktivieren der Internetfreigabe ausgeführt wird, hat absolut keine Sperrregel . Sie müssen eine ganze Reihe zusätzlicher Regeln hinzufügen, um es sicherer zu machen (und zu funktionieren).


Die von Ihnen veröffentlichte IP gehört zu 152.1.0.0/16 – einem IP-Block, der der North Carolina State University (NCSU) zugewiesen ist. Möglicherweise hat Ihre Universität in diesem Netzwerk Sicherheitsmaßnahmen ergriffen, die den Zugriff aus anderen Netzwerken (oder dem "gesamten" Internet) verhindern.