通过 SSH 隧道使用时无 Telnet 登录提示

通过 SSH 隧道使用时无 Telnet 登录提示

我有一台设备,我们称之为 d1,运行轻量级 Linux。此设备由我的上网盒/路由器进行 NAT,因此无法从互联网访问。该设备在其上运行 telnet 守护程序,并且只有 root 用户(无密码)。其 IP 地址在私有网络上为 192.168.0.126。

从私有网络(假设为 192.168.0.x),我可以执行以下操作:

telnet 192.168.0.126

其中 192.168.0.126 是私有网络中的 IP 地址。此操作可正常进行。

但是,为了允许管理,我需要从该专用网络之外访问该设备。因此,我在 d1 上创建了一个这样的 SSH 隧道:

ssh -R 4455:localhost:23 ussh@s1

s1 是位于私有网络中某处的服务器(但这仅用于测试目的,它最终会出现在互联网的某个地方),运行标准 Linux 发行版,我在其上创建了一个名为“ussh”的用户。s1 的 IP 地址是 192.168.0.48。

当我使用以下命令进行 telnet 时,假设从 c1, 192.168.0.19 :

telnet -l root s1 4455

我得到:

Trying 192.168.0.48...
Connected to 192.168.0.48.
Escape character is '^]'.
Connection closed by foreign host

大约 30 秒后连接关闭,我没有登录。我尝试不使用 -l 开关,但没有任何成功。我尝试使用 IP 地址而不是名称进行“telnet”,以避免反向 DNS 问题(尽管我向 d1 /etc/hosts 添加了一行引用 s1 IP/名称,以防万一),但没有成功。我尝试使用 4455 以外的其他端口,但没有成功。

我从 s1 收集了 Wireshark 日志。我可以看到:

s1 发送 SSH 数据到 c1,c1 ACK
s1 对 c1 执行 AAAA DNS 请求,仅获取 Authoritave 名称服务器。
s1 执行 A DNS 请求,然后获取 c1 的 IP 地址
s1 发送 SYN 数据包到 c1,c1 使用 RST/ACK 回复
s1 发送 SYN 到 c1,C1 RST/ACK (?)
0.8 秒后,c1 发送 SYN 到 s1,s1 SYN/ACK 然后 c1 ACK
s1 发送 SSH 内容到 d1,d1 发送 ACK 返回 s1
s1 重试 AAAA 和 A DNS 请求
5 秒后,s1 重试 SYN 到 c1,再次被 c1 RST/ACK。此操作重复 3 次。
最后五个数据包:d1 发送 SSH 内容给 s1,s1 发送 ACK 和 FIN/ACK 给 c1,c1 回复 FIN/ACK,s1 发送 ACK 给 c1。

该连接似乎在 22 秒后被 telnet 守护进程关闭。

据我所知,没有办法解码 SSH 流,所以我真的被困在这里......

有任何想法吗 ?

谢谢 !

答案1

我解决了这个问题!

实际上,d1 上的环回接口没有启动,因此隧道无法运行。我注意到“ping localhost”和“telnet localhost”都失败了。

我创建了一个带有“lo”接口的 /etc/network/interfaces 文件,并执行了 ifup lo。

相关内容