远程端口转发适用于 TCP/1194,但不适用于 TCP/443,即使服务器上的端口 443 未被使用

远程端口转发适用于 TCP/1194,但不适用于 TCP/443,即使服务器上的端口 443 未被使用

我遇到了一个奇怪的问题。

我启动了一个新的 Linode 作为隧道端点。

我能够成功地远程转发端口 1194,因此现在可以成功地将 linode-server@1194 连接到我的机器的端口 1194,并且我可以通过连接到我的 linode 服务器上的端口 1194 来连接到我的 VPN。

下面的命令是我使用的(有效的命令):

ssh -N -R 1194:localhost:1194 [email protected]

现在我想将 443 端口也转发。我尝试了以下方法:

ssh -N -R 443:192.168.1.122:443 [email protected]

我的本地服务器有意监听 192.168.1.122(不是本地主机)。

但是,上述命令无法在服务器上打开端口 443。我收到以下错误:

警告:监听端口 443 的远程端口转发失败

因此我检查了我的 linode 服务器上是否有任何东西在端口 443 上运行。没有:

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:~$ 

服务器上没有软防火墙。而且Linode云防火墙也关闭了,还是不行。

我完全不知道为什么转发 443 不起作用。

PS-创建隧道时用户身份验证工作正常。

我不确定这是否有帮助,但我的 sshd_config 看起来像这样:

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:~$

需要澄清的是,/etc/ssh/sshd_config.d/

linode-server 上的 sshd 详细日志记录:

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

为什么权限被拒绝?我上面使用的远程转发命令使用同一个用户(对于成功和失败的隧道)。

刚刚发现这里这可能是因为 443 是特权端口。现在我不想使用 root 用户在 443 上启用远程转发。我已锁定 linode 服务器,无法以 root 身份登录(并且我不想允许 root 登录)。根据上面的链接,我可以setcap在 linode 服务器上使用,但我该怎么做,因为隧道打开命令实际上是从我的本地运行的。我有什么替代方案?我知道也许在 linode 服务器上使用更高的端口会起作用,但我不想这样做。我真的希望它是端口 443,这样我就不需要记住端口了。

答案1

在本地服务器上,从端口 8080(非特权端口)启动远程端口转发

ssh -N -R 8080:192.168.1.122:443 [email protected]

在 linode-server 上,安装了一个名为 的工具socat,并使用以下命令在 linode 服务器上从 8080 本地转发到 443,现在可以正常工作:)

sudo socat TCP-LISTEN:443,fork TCP:0.0.0.0:8080

答案2

问题是端口 443 上没有任何进程在监听。要连接到端口 443,必须有一个进程在监听端口 443。如果查看 netstat,您会看到当前有一个进程在监听端口 1194,这就是连接到端口 1194 成功的原因。您需要将该进程更改为监听端口 443。

tcp        0      0 0.0.0.0:1194            0.0.0.0:*               LISTEN      7438/sshd: pi

相关内容