Reenvío de puertos en Mac Pro con macOS Sierra

2

Me gustaría trasladar desde mi computadora macOS Sierra con una dirección IP de 152.1.2.3 a mi NAS, que es 192.168.2.3. Específicamente, me gustaría acceder al servidor web HTTP en mi NAS en 192.168.2.3/Photos. El NAS tiene todo el tráfico que llega a través de HTTP dirigido a la carpeta correcta (Fotos).

Tengo Conexión compartida activada y comparto mi conexión Ethernet de mi computadora macOS (152.1.2.3 en Ethernet 2) a mi NAS (192.168.2.3 en Ethernet 1)

Mi NAS puede ver Internet y obtener actualizaciones.

Puedo acceder al servidor web localmente desde mi computadora ingresando 192.168.2.3 y me dirige a la página del servidor web en 192.168.2.3/Photos.

Simplemente no puedo acceder desde fuera de la red local.

La solución fácil es conectar el NAS directamente a la red, pero no puedo debido a las políticas locales.

En resumen: Me gustaría escribir lo siguiente y ser redirigido al servidor web en el NAS - > 152.1.2.3:9999

el comando del terminal sería:

rdr pass on en2 inet proto tcp from any to any port 9999 -> 198.168.2.3 port 80
    
pregunta farberm 27.08.2017 - 13:29

1 respuesta

1

El uso compartido de Internet en macOS se realiza (internamente) creando un dispositivo puente que contiene dos o más interfaces, activando un servidor DHCP, configurando varias reglas de pf y habilitando pf.

Para imprimir todas las reglas, se debe ejecutar el siguiente script de shell:

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

Por defecto, pf está deshabilitado con el siguiente volcado de pf:

                                        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

Después de activar Internet Sharing pf está habilitado y un volcado se parece a esto:

                                        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

Aquí en1 es la interfaz externa (la que comparte a su red interna) y 192.168.2.0/24 la red interna proporcionada por el servidor DHCP. Ambos podrían diferir en su entorno.

Para exponer un servidor interno al público con Conexión compartida habilitada, debe reenviar un puerto de la interfaz externa a la IP y al puerto de servicio del servidor:

Cree la regla rdr en el enrutador (su Mac Pro) ingresando en Terminal.app:

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

y el contenido:

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

asumiendo que en1 es la interfaz externa, 152.1.2.3:9999 su IP: puerto y 192.168.2.3:80 la IP: puerto del servidor interno. Para obtener el identificador de dispositivo (y la IP) de su interfaz externa, ingrese ifconfig en su Mac Pro.

Luego crea un demonio de lanzamiento:

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

con el contenido:

<?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>

Inicia el demonio con:

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

Esto agregará una segunda regla rdr en el ancla com.apple a pf y reenviará el puerto externo al host interno.

Dado que DHCP asigna direcciones IP dinámicamente, también es útil definir una IP fija para el servidor interno:

Cree un archivo bootptab en el enrutador (su Mac Pro):

sudo nano /etc/bootptab

con el contenido:

# 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

Reemplace las direcciones MAC (hwaddr) y los tipos de hardware (hwtype) por los adecuados que se encuentran en su entorno aquí. Puede obtener las direcciones MAC ingresando ifconfig en el host respectivo. Reinicie su enrutador (Mac Pro) después.

Implicaciones de seguridad:

Al usar su Mac Pro como enrutador, está expuesto a Internet y es vulnerable como tal. Pf a medida que se ejecuta después de habilitar el uso compartido de Internet no tiene absolutamente ninguna regla de bloqueo . Tienes que agregar un montón de reglas adicionales para que sea más seguro (y funcione).

La IP que ha publicado pertenece a 152.1.0.0/16, un bloque de IP asignado a la North Carolina State University (NCSU). Su universidad puede haber aplicado medidas de seguridad en esta red que impedirán el acceso desde otras redes (o la Internet "completa").

    
respondido por el klanomath 05.09.2017 - 04:42

Lea otras preguntas en las etiquetas