我有一个开发服务器,只能从 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-listen
为tcp4-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-traditional
Ubuntu 上的软件包中。 (你必须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
如果要将传入端口绑定到所有接口。