我遇到过一种情况,我需要为 ISP 后面的服务器打开一个端口,而该服务器似乎正在阻止流量。在这种情况下,我有一个远程专用服务器,我可以ssh
进入并使用我想要的任何端口。我希望从防火墙后面的服务器 ssh 进入专用服务器,然后打开一个端口,通常供其他应用程序的客户端随意访问。
我原以为这很简单,从 ISP 防火墙后面的服务器来看:
ssh username@remote_server_ip -R remote_server_ip:12345:localhost:12345
然后只需连接客户端软件即可remoteserver:12345
作为服务器设置。
此外,我已sshd_config
设置为GatewayPorts clientspecified
,当我检查netstat -tln | grep 12345
remote_server 时,我看到:活动的 Internet 连接(仅服务器)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 remote_server_ip:12345 0.0.0.0:* LISTEN
不幸的是,这似乎不起作用。我怀疑我在 ssh 参数上出了问题。有什么想法吗?
答案1
如果我理解正确的话,您想从 ISP 后面的机器创建一个 ssh 隧道,并通过 SSH 服务器上的端口公开其服务。
如果是这种情况,则您的命令行看起来是正确的。我做了类似的事情。
您已经在 sshd 配置中启用了 Gatewayports,因此一切都很好,如果您没有这样做,您只能将端口绑定到 ssh 服务器上的环回地址 127.0.0.1。
简要说明一下,我必须重启 ssh 服务器才能使网关端口选项开始工作。重启 sshd 服务应该就足够了,但对我来说没用。
我发现您没有为 ssh 服务器指定端口,这意味着您正在使用端口 22,您的 ISP 可能正在以某种方式对其进行篡改。
还有一件事,无论您想在 ISP 后面的服务器上访问什么服务,请确保其端口已绑定到 127.0.0.1 接口,因为这是您的隧道指向的位置。此外,请检查您的服务是否接受来自该接口的连接,并仔细检查其运行的端口。
@barlop -R 127.0.0.1:12345:localhost:12345 是错误的,只有通过环回适配器连接的人才可以访问该服务。
但是阅读 barlop 的帖子后我意识到了一些事情,请记住您设置命令的方式,在 ssh 服务器上打开的端口将绑定到运行 SSH 服务器的同一 IP。这意味着该服务将暴露在互联网上,也许这是您想要的,但如果需要该服务的人从 LAN 连接,那么您需要将此端口绑定到 ssh 服务器的 LAN ip。另外,您确定您正在连接的 ssh 服务器不在防火墙后面吗?防火墙会将端口 22 内部转发到服务器?如果是这种情况,则意味着您正在要求 ssh 服务器在属于防火墙的 ip 上打开一个端口,这显然是不可能的。
在这种情况下,您需要在 ssh 服务器自己的 lan IP 上打开一个端口,然后本地机器可以直接连接到那里,如果您想将服务公开到互联网,那么您需要将端口从防火墙转发到您在 ssh 服务器上打开的端口。
只是试图涵盖所有内容,如果没有更多有关基础设施的信息,就很难清楚地了解正在发生的事情。
噢,社交的乐趣真大。