
Estoy teniendo un problema extraño.
Abrí un nuevo Linode para que actuara como punto final de túnel.
Pude reenviar exitosamente el puerto 1194 de forma remota, por lo que ahora me conecto exitosamente a linode-server@1194 al puerto 1194 de mi máquina y puedo conectarme a mi VPN conectándome al puerto 1194 en mi servidor Linode.
El siguiente comando es el que utilicé (el que funciona):
ssh -N -R 1194:localhost:1194 [email protected]
Ahora también quiero reenviar el puerto 443. Probé esto:
ssh -N -R 443:192.168.1.122:443 [email protected]
Mi servidor local está escuchando en 192.168.1.122 a propósito (no en localhost).
Sin embargo, el comando anterior no logra abrir el puerto 443 en el servidor. Recibo el siguiente error:
Advertencia: el reenvío de puerto remoto falló para el puerto de escucha 443
Así que verifiqué en mi servidor Linode si se está ejecutando algo en el puerto 443. Nada es:
user@linode-server:~$ sudo netstat -tulpn
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:1194 0.0.0.0:* LISTEN 7438/sshd: user
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 411/systemd-resolve
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 2377/sshd: /usr/sbi
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 1513/master
tcp6 0 0 :::1194 :::* LISTEN 7438/sshd: user
tcp6 0 0 :::22 :::* LISTEN 2377/sshd: /usr/sbi
tcp6 0 0 :::25 :::* LISTEN 1513/master
udp 0 0 127.0.0.53:53 0.0.0.0:* 411/systemd-resolve
user@linode-server:~$
No hay ningún firewall de software en el servidor. Y el firewall de la nube Linode se ha desactivado, todavía no puedo hacerlo.
No tengo ni idea de por qué el reenvío 443 no funciona.
PD: la autenticación de usuario funciona bien mientras se crea el túnel.
No estoy seguro de si esto ayudará, pero mi sshd_config tiene este aspecto:
user@linode-server:~$ cat /etc/ssh/sshd_config | grep -v "^#" | grep -v "^$"
Include /etc/ssh/sshd_config.d/*.conf
PermitRootLogin no
PasswordAuthentication no
PermitEmptyPasswords no
ChallengeResponseAuthentication no
UsePAM yes
GatewayPorts yes
X11Forwarding yes
PrintMotd no
AcceptEnv LANG LC_*
Subsystem sftp /usr/lib/openssh/sftp-server
user@linode-server:~$
Y para aclarar, no hay nada en/etc/ssh/sshd_config.d/
Registro detallado desde sshd en el servidor Linode:
...
Aug 14 09:00:32 connect sshd[9499]: Postponed publickey for pi from *HIDDEN: My home public IP* port 49180 ssh2 [preauth]
Aug 14 09:00:32 connect sshd[9499]: Accepted key RSA *HIDDEN* found at /home/pi/.ssh/authorized_keys:1
Aug 14 09:00:32 connect sshd[9499]: Accepted publickey for pi from *HIDDEN: My home public IP* port 49180 ssh2: RSA *HIDDEN*
Aug 14 09:00:32 connect sshd[9499]: pam_unix(sshd:session): session opened for user pi by (uid=0)
Aug 14 09:00:32 connect systemd-logind[578]: New session 157 of user pi.
Aug 14 09:00:32 connect sshd[9499]: User child is on pid 9579
Aug 14 09:00:32 connect sshd[9579]: bind [0.0.0.0]:443: Permission denied
Aug 14 09:00:32 connect sshd[9579]: error: bind [::]:443: Permission denied
Aug 14 09:00:32 connect sshd[9579]: error: channel_setup_fwd_listener_tcpip: cannot listen to port: 443
...
¿Por qué se niega el permiso? El comando de reenvío remoto que utilicé anteriormente utiliza el mismo usuario (tanto para el túnel exitoso como para el fallido).
Se acaba de encontraraquíque podría deberse a que 443 es un puerto privilegiado. Ahora no quiero utilizar el usuario root para habilitar el reenvío remoto en 443. He bloqueado el servidor Linode y no puedo iniciar sesión como root (y no quiero permitir el inicio de sesión como root). Según el enlace anterior, puedo usar setcap
, en el servidor Linode, pero ¿cómo lo hago ya que el comando de apertura del túnel en realidad se ejecuta desde mi local? ¿Cuáles son mis alternativas? Sé que tal vez funcione usar un puerto superior en el servidor Linode, pero no quiero hacer eso. Realmente me gustaría que fuera el puerto 443 para no tener que recordar el puerto.
Respuesta1
En el servidor local, se inició el reenvío del puerto remoto desde el puerto 8080 (puerto sin privilegios)
ssh -N -R 8080:192.168.1.122:443 [email protected]
En Linode-server, instalé una herramienta llamada socat
y usé el siguiente comando para reenviar localmente de 8080 a 443 en Linode Server y ahora funciona :)
sudo socat TCP-LISTEN:443,fork TCP:0.0.0.0:8080
Respuesta2
El problema es que no hay nada escuchando en el puerto 443. Es necesario que haya un proceso escuchando en el puerto 443 para que pueda realizar conexiones al puerto 443. Si observa su netstat, verá que actualmente tiene un proceso escuchando en el puerto. 1194, razón por la cual las conexiones al puerto 1194 tienen éxito. Debe cambiar ese proceso para escuchar en el puerto 443.
tcp 0 0 0.0.0.0:1194 0.0.0.0:* LISTEN 7438/sshd: pi