
我有一個奇怪的問題。
我提出了一個新的 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