3 votos

Reenvío de puertos en el Mac Pro con macOS Sierra

Me gustaría hacer un port forward desde mi ordenador MacOS Sierra con la dirección IP 152.1.2.3 a mi NAS que es 192.168.2.3. En concreto, me gustaría acceder al servidor web HTTP de mi NAS en 192.168.2.3/Photos. El NAS tiene todo el tráfico que entra por HTTP dirigido a la carpeta correcta (Fotos).

Tengo activada la opción de compartir Internet y comparto la conexión Ethernet de mi ordenador MacOS (152.1.2.3 en Ethernet 2) con mi NAS (192.168.2.3 en Ethernet 1)

Mi NAS puede ver Internet y recibir actualizaciones.

Puedo acceder al servidor web localmente desde mi ordenador introduciendo 192.168.2.3 y me dirige a la página del servidor web en 192.168.2.3/Fotos.

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

sería el comando de la terminal:

rdr pass on en2 inet proto tcp from any to any port 9999 -> 198.168.2.3 port 80

0 votos

Voto por cerrar esta pregunta como off-topic porque se trata de un problema de red en lugar de un problema de Apple.

2 votos

@Rob - el OP está utilizando el MacPro como el firewall / router - es definitivamente en el tema.

0 votos

Sin embargo, el reenvío de puertos se ha discutido aquí en AD por lo que es un posible duplicado de Reenvío de puertos en MacOS Sierra

2voto

klanomath Puntos 19587

La compartición de Internet en MacOS se hace (internamente) creando un dispositivo puente que contenga dos o más interfaces, activando un servidor DHCP, configurando varias reglas pf y habilitando pf.

Para imprimir todas las reglas hay que ejecutar el siguiente shell script:

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 se desactiva 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 Compartir Internet pf está activado y un volcado tiene el siguiente aspecto:

                                        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. Ambas pueden ser diferentes en su entorno.

Para exponer un servidor interno al público con la compartición de Internet activada, hay que reenviar un puerto de la interfaz externa a la IP y el puerto de servicio del servidor:

Crea la regla rdr en el router (tu Mac Pro) entrando 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 introduzca ifconfig en tu Mac Pro.

A continuación, cree 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>

Inicie el demonio con:

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

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

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

Crear un archivo bootptab en el router (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

Sustituya aquí las direcciones MAC (hwaddr) y los tipos de hardware (hwtype) por los adecuados a su entorno. Puede obtener las direcciones MAC introduciendo ifconfig en el host correspondiente. Reinicie su router (Mac Pro) después.


Implicaciones de seguridad:

Al utilizar su Mac Pro como router está expuesto a Internet y es vulnerable como tal. Pf como se ejecuta después de habilitar el uso compartido de Internet ha no hay ninguna regla de bloqueo . Hay que añadir un montón de reglas adicionales para que sea más seguro (y funcione).


La IP que has publicado pertenece a 152.1.0.0/16 - un bloque IP asignado a la Universidad Estatal de Carolina del Norte (NCSU). Es posible que su universidad haya aplicado medidas de seguridad en esta red que impidan el acceso desde otras redes (o la "totalidad" de Internet).

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X