遠端埠轉發適用於 TCP/1194,但不適用於 TCP/443,即使未使用伺服器上的埠 443
我有一個奇怪的問題。
我提出了一個新的 Linode 作為隧道端點。
我能夠成功地遠端轉發埠 1194,所以現在連接到 linode-server@1194 到我機器的埠 1194 並且我能夠通過連接到我的 linode-server 上的埠 1194 來連接到我的 VPN。
以下命令是我使用的(有效的):
ssh -N -R 1194:localhost:1194 user@linode-server.something.com
現在我也想移植 443。我試過這個:
ssh -N -R 443:192.168.1.122:443 user@linode-server.something.com
我的本地伺服器故意監聽 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-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-server 並且無法以 root 身份登錄(並且我不想允許 root 登錄)。根據上面的連結,我可以
setcap
在 linode-server 上使用 , 但我該怎麼做,因為隧道打開命令實際上是從我的本地執行的。我的替代方案是什麼?我知道也許在 linode-server 上使用更高的埠會起作用,但我不想這樣做。我真的很希望它是埠 443,所以我不需要記住埠。
在本地伺服器上,從埠 8080 發起遠端埠轉發(非特權埠)
ssh -N -R 8080:192.168.1.122:443 user@linode-server.something.com
在 linode-server 上,安裝了一個名為
socat
並使用以下命令在 linode 伺服器上從 8080 本地轉發到 443 的工具,它現在可以工作了:)sudo socat TCP-LISTEN:443,fork TCP:0.0.0.0:8080
問題是沒有監聽埠 443。需要有一個程序監聽埠 443 才能連接到埠 443。如果您查看 netstat,您會發現目前有一個程序正在監聽埠1194,這就是連接到埠 1194 成功的原因。您需要更改該程序以偵聽埠 443。
tcp 0 0 0.0.0.0:1194 0.0.0.0:* LISTEN 7438/sshd: pi