Networking

ssh 隧道拒絕與“通道 2:打開失敗”的連接

  • September 7, 2021

突然之間(閱讀:不更改任何參數)我的 netbsd 虛擬機開始出現奇怪的行為。症狀與 ssh 隧道有關。

從我的筆記型電腦啟動:

$ ssh -L 7000:localhost:7000 user@host -N -v

然後,在另一個 shell 中:

$ irssi -c localhost -p 7000

ssh 調試說:

debug1: Connection to port 7000 forwarding to localhost port 7000 requested.
debug1: channel 2: new [direct-tcpip]
channel 2: open failed: connect failed: Connection refused
debug1: channel 2: free: direct-tcpip: listening port 7000 for localhost port 7000, connect from 127.0.0.1 port 53954, nchannels 3

我還嘗試使用 localhost:80 連接到(遠端)Web 伺服器,結果相同。

遠端主機執行 NetBSD:

bash-4.2# uname -a
NetBSD host 5.1_STABLE NetBSD 5.1_STABLE (XEN3PAE_DOMU) #6: Fri Nov  4 16:56:31 MET 2011  root@youll-thank-me-later:/m/obj/m/src/sys/arch/i386/compile/XEN3PAE_DOMU i386

我有點失落。我嘗試tcpdump在遠端主機上執行,我發現了這些“壞 chksum”:

09:25:55.823849 IP (tos 0x0, ttl 64, id 0, offset 0, flags [DF], proto TCP (6), length 67, bad cksum 0 (->3cb3)!) 127.0.0.1.54381 > 127.0.0.1.7000: P, cksum 0xfe37 (incorrect (-> 0xa801), 1622402406:1622402421(15) ack 1635127887 win 4096 <nop,nop,timestamp 5002727 5002603>

我嘗試重新啟動 ssh 守護程序無濟於事。我還沒有重新啟動 - 也許這裡有人可以建議其他診斷。我認為它可能是虛擬網卡驅動程序,或者有人植根於我們的 ssh。

想法..?

問題解決了:

$ ssh -L 7000:127.0.0.1:7000 user@host -N -v -v

…顯然,遠端主機不喜歡“ **localhost ”。**然而,遠端/etc/hosts包含:

::1                     localhost localhost.
127.0.0.1               localhost localhost.

而本地網路介面是

lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 33184
       inet 127.0.0.1 netmask 0xff000000
       inet6 ::1 prefixlen 128
       inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2

嘆。我付出的100rp的賞金就這麼多:)

雖然 OP 的問題已經解決了,但我還是決定分享一下我的問題的解決方案,因為我從 ssh 收到了同樣的錯誤資訊,而我在其他站點上沒有找到任何解決方案。

就我而言,我必須連接到僅偵聽 IPv6 的服務。我試過:

ssh -f root@192.168.0.18 -L 51005:127.0.0.1:51005 -N
ssh -f root@192.168.0.18 -L 51005:localhost:51005 -N

和其他一些方法,但沒有奏效。任何連接嘗試http://localhost:51005都會導致如下錯誤: channel 2: open failed: connect failed: Connection refused

解決方案是:

ssh -f root@192.168.0.18 -L 51005:[::1]:51005 -N

IPv6 地址必須放在方括號中。

引用自:https://serverfault.com/questions/489192