遠端連接埠轉送適用於 TCP/1194,但不適用於 TCP/443,即使伺服器上的連接埠 443 未使用

遠端連接埠轉送適用於 TCP/1194,但不適用於 TCP/443,即使伺服器上的連接埠 443 未使用

我有一個奇怪的問題。

我提出了一個新的 Linode 來充當隧道端點。

我能夠成功遠端轉送連接埠 1194,因此現在可以成功連接到 linode-server@1194 到我機器的連接埠 1194,並且我可以透過連接到我的 linode-server 上的連接埠 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-server 連接埠 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 伺服器上的 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 上啟用遠端轉送。根據上面的鏈接,我可以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。

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

相關內容