基于 SSH 反向隧道的 Dockerized Telnet
Posted
技术标签:
【中文标题】基于 SSH 反向隧道的 Dockerized Telnet【英文标题】:Dockerized Telnet over SSH Reverse Tunnel 【发布时间】:2021-09-06 08:29:27 【问题描述】:我知道标题可能令人困惑,所以让我解释一下。
这是我目前的情况:
服务器 A - 127.0.0.1
服务器 B - 1.2.3.4.5
服务器 B 打开到服务器 A 的反向隧道。这给了我服务器 A 上的一个随机端口来与服务器 B 通信。假设端口是 1337。
正如我提到访问服务器 B 我正在向 127.0.0.1:1337
发送数据包。
我们的客户端需要 Telnet 连接。由于 Telnet 是不安全的,但需要,我们决定在 ssh 反向隧道上使用 telnet。
此外,我们创建了一个带有busybox的高山容器,以消除对主机的任何访问。这是我们的问题。
隧道是在主机上创建的,但 telnet 客户端位于 docker 容器内。这是两个独立的系统。
我可以通过-network=host
与 docker 共享我的主机网络,但它消除了 docker 容器的封装思想。
同样将 docker 绑定到主机,-p 127.0.0.1:1337:1337
尖叫该端口已在使用中并且无法绑定到该端口(duh ssh 正在使用它)
从主机映射端口到容器也不起作用,因为 telnet 客户端没有将流量转发到特定端口,所以我们不能只是“嗅探”它。
有人知道如何克服这个问题吗? 我考虑过共享我的主机网络并尝试配置 iptables 规则以限制网络上的 docker 功能,但我的 iptables 技能并不是很好。
【问题讨论】:
【参考方案1】:端口转发不起作用,因为那基本上是错误的方向。 -p 127.0.0.1:1337:1337
的意思是“获取该主机端口上的所有内容,并将其转发到容器中”。但是你想从容器连接到主机上的那个端口。
基本上就是三个步骤:
以下步骤至少需要 Docker v20.04
在主机上:将您的隧道绑定到主机上的docker0
接口(可能需要您先确定该接口的 ip)。换句话说,参考您的示例,确保隧道的本地端不结束于127.0.0.1:1337
,而是<ip of host interface docker0>:1337
在主机上:将--add-host host.docker.internal:host-gateway
添加到您的 docker run 命令中
在您的容器内:telnet
到 host.docker.internal
(魔术 DNS 名称)在您在第 2 步中绑定的端口(即 1337)上
【讨论】:
非常感谢您的帮助。它似乎确实可以工作,但即使我确实建立了连接,我也没有得到任何提示。telnet 172.17.0.1 19819 Trying 172.17.0.1... Connected to 172.17.0.1. Escape character is '^]'.
直接连接到服务器 B 不会导致此问题。你知道怎么处理吗?以上是关于基于 SSH 反向隧道的 Dockerized Telnet的主要内容,如果未能解决你的问题,请参考以下文章