创建从一个本地端口到另一个本地端口的隧道的简单方法?

创建从一个本地端口到另一个本地端口的隧道的简单方法?

我有一个开发服务器,只能从 127.0.0.1:8000 访问,不能从 192.168.1.x:8000 访问。作为一种快速破解,有没有办法设置一些东西来侦听另一个端口(例如 8001),以便从本地网络我可以连接 192.168.1.x:8001 并且它将在客户端和 127.0 之间建立隧道传输流量.0.1:8000?

答案1

socat服务器上:

socat tcp-listen:8001,reuseaddr,fork tcp:localhost:8000

默认情况下,socat将侦听计算机上任何 IPv4 或 IPv6 地址(如果支持)上的 TCP 端口 8001。您可以通过替换tcp-listentcp4-listen或将其限制为 IPv4/6 tcp6-listen,或者通过添加,bind=that-address.

对于您要代理的连接套接字,您可以使用任何地址来代替localhost,如果您想将地址解析限制为 IPv4 或 IPv6 地址,则tcp可以用tcp4或替换。tcp6

请注意,对于侦听端口 8000 的服务器,连接将显示为来自代理(在 的情况下localhost,将是localhost),而不是原始客户端。你需要使用DNAT方法(但需要超级用户权限)服务器才能知道谁是客户端。

答案2

使用 ssh 是最简单的解决方案。

ssh -g -L 8001:本地主机:8000 -f -N[电子邮件受保护]

这会将工作站上的本地端口 8001 转发到remote-server.com 端口 8000 上的本地主机地址。这
-g意味着允许网络上的其他客户端连接到我的工作站上的端口 8001。否则,只有工作站上的本地客户端才能连接到转发的端口。
-N意味着我所做的只是转发端口,不启动 shell。
-f表示成功 SSH 连接并登录后分叉到后台。
端口 8001 将保持对许多连接开放,直到 ssh 终止或被终止。如果您碰巧使用的是 Windows,优秀的 SSH 客户端 PuTTY 也可以做到这一点。使用 8001 作为本地端口,使用 localhost:8000 和目标,并在设置中添加本地端口转发。与PuTTY连接成功后即可添加。

答案3

使用传统nc是最简单的解决方案:

nc -l -p 8001 -c "nc 127.0.0.1 8000"

此版本nc位于netcat-traditionalUbuntu 上的软件包中。 (你必须update-alternatives或称其为nc.traditional。)

请注意,与 ssh 相比,它没有加密。如果您在一台主机之外使用它,请记住这一点。

答案4

引用一个大卫·斯皮利特回答在 ServerFault 上,用可用的存储库替换丢失的链接:

rinetd 应该可以完成这项工作,并且可以从以下位置获取它的 Windows 二进制文件https://github.com/samhocevar/rinetd(对于在 Linux 下寻找相同内容的人来说,rinetd 位于几乎每个发行版的标准存储库中,因此可以使用“apt-get install rinetd”或“yum install rinetd”或类似命令进行安装)

它是一个简单的二进制文件,采用以下格式的配置文件

bindaddress bindport connectaddress connectport

例如:

192.168.1.1 8001 127.0.0.1 8000

或者

0.0.0.0 8001 127.0.0.1 8000

如果要将传入端口绑定到所有接口。

相关内容