Selección de la interfaz para el reenvío de puertos SSH

24

Tengo un servidor que llamaremos hub-server.tld con tres direcciones IP 100.200.130.121, 100.200.130.122 y 100.200.130.123. Tengo tres máquinas diferentes que están detrás de un firewall, pero quiero usar SSH para reenviar una máquina a cada dirección IP. Por ejemplo: machine-one debería escuchar SSH en el puerto 22 en 100.200.130.121, mientras que machine-two debería hacer lo mismo en 100.200.130.122, y así sucesivamente para diferentes servicios en puertos que pueden ser iguales en todas las máquinas.

La página de manual de SSH ha -R [bind_address:]port:host:hostportenumerado Tengo puertos de puerta de enlace habilitados, pero cuando se usa -Rcon una dirección IP específica, el servidor aún escucha en el puerto en todas las interfaces:

máquina uno:

# ssh -NR 100.200.130.121:22:localhost:22 [email protected]

hub-server.tld (Escucha SSH en el puerto 2222):

# netstat -tan | grep LISTEN
tcp        0      0 100.200.130.121:2222        0.0.0.0:*                   LISTEN
tcp        0      0 :::22                       :::*                        LISTEN
tcp        0      0 :::80                       :::*                        LISTEN

¿Hay alguna manera de hacer que SSH reenvíe solo conexiones en una dirección IP específica a la máquina uno para que pueda escuchar el puerto 22 en las otras direcciones IP al mismo tiempo, o tendré que hacer algo con iptables? Aquí están todas las líneas en mi configuración ssh que no son comentarios / valores predeterminados:

Port 2222
Protocol 2
SyslogFacility AUTHPRIV
PasswordAuthentication yes
ChallengeResponseAuthentication no
GSSAPIAuthentication no
GSSAPICleanupCredentials no
UsePAM yes
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL
AllowTcpForwarding yes
GatewayPorts yes
X11Forwarding yes
ClientAliveInterval 30
ClientAliveCountMax 1000000
UseDNS no
Subsystem       sftp    /usr/libexec/openssh/sftp-server
Eric Pruitt
fuente

Respuestas:

37

De sshd_config(5):

GatewayPorts

  Specifies whether remote hosts are allowed to connect to ports forwarded 
  for the client.  By default, sshd(8) binds remote port forwardings to the
  loopback address. This prevents other remote hosts from connecting to 
  forwarded ports.  GatewayPorts can be used to specify that sshd should 
  allow remote port forwardings to bind to non-loopback addresses, thus 
  allowing other hosts to connect.  The argument may be “no” to force remote 
  port forwardings to be available to the local host only, “yes” to force 
  remote port forwardings to bind to the wildcard address, or 
  “clientspecified” to allow the client to select the address to which the 
  forwarding is bound.  The default is “no”.

Desea establecer esto en clientspecifiedlugar de yes.

mgorven
fuente
¡Increíble gracias! Realmente deseo que la página de manual para ssh (1) establezca que clientspecifiedera necesario en lugar de simplemente decir "habilitado": "Especificar una dirección de enlace remota solo tendrá éxito si la opción GatewayPorts del servidor está habilitada (ver sshd_config (5))". A partir de eso, pensé que solo tenía que configurarlo yes.
Eric Pruitt el