我有一个 busybox 路由器,我可以使用 telnet 登录控制台,并且还可以访问 Web 界面。
我的问题是,如何通过路由器从本地网络创建 ssh 隧道,以便我能够远程访问我的计算机?我正在寻找基于命令行的解决方案,而且我也意识到路由器的内存较低且实用程序集非常有限。虽然它是一个最小的 Linux 系统,只有一小部分工具,但它们确实有像路由、iptables 等实用程序,所以我认为这是可能的。
另外,我对busybox系统的了解还很低,所以如果我有错误的地方,请随时纠正我。
答案1
我画了一些草图
键入 ssh 隧道命令的机器称为»你的主人«。
介绍
当地的:
-L Specifies that the given port on the local (client) host is to be forwarded to the given host and port on the remote side.
ssh -L sourcePort:forwardToHost:onPort connectToHost
表示:使用 ssh 连接到connectToHost
,并将所有连接尝试转发到当地的sourcePort
onPort
到名为 的计算机上的端口forwardToHost
,可以从该connectToHost
计算机访问该端口。偏僻的:
-R Specifies that the given port on the remote (server) host is to be forwarded to the given host and port on the local side.
ssh -R sourcePort:forwardToHost:onPort connectToHost
表示:使用 ssh 连接到connectToHost
,并将所有连接尝试转发到偏僻的sourcePort
onPort
到名为 的计算机上的端口forwardToHost
,可以从本地计算机访问该计算机。
你的例子
家用电脑运行linux
这是我的草图的第三张图片。你家里的电脑运行linux吗?你在互联网上有一个远程主机,上面有 ssh,你可以简单地从你的家庭计算机上使用它访问它
ssh remotehost
那么您肯定已经安装了 ssh,甚至不需要路由器来创建隧道。在您的计算机上使用以下命令(名为的蓝色框yourhost
代表您的家庭计算机):
ssh -R 11111:localhost:22 remotehost
现在,如果您坐在远程主机上并想通过 ssh 连接到您的家庭计算机,请使用此命令
ssh -p 11111 homeuser@localhost
11111
这将启动到远程主机上绿色端口的 ssh 连接,该连接通过 ssh 隧道(甚至通过您的 busybox 路由器)转发,并连接到22
您家用计算机的本地主机(即您的家用计算机本身)的粉红色端口。
当然busybox也可以建立隧道
这是我的草图中的第四张图片。您现在正坐在(或登录)busybox。yourhost
busybox路由器也是如此。
ssh -R 11111:nearhost:22 remotehost
现在,当您位于远程主机时,再次输入
ssh -p 11111 busyboxuser@localhost
连接到绿色端口11111
,然后通过隧道转发到 busybox,并从那里连接到22
近主机(代表您的家庭计算机)的粉红色端口。
答案2
ssh -L
这就是您正在寻找的。
让我们画一张共有 4 个主机的图,A、B、X、Y。
- A 是拥有常规客户端(例如网络浏览器)的计算机
- B 是距离您最近的支持 SSH 的本地计算机,它可能与 A 相同。
- X 是支持 SSH 的远程计算机
- Y 是托管您希望从 A 访问的服务(例如 Web 服务器)的计算机。Y 可以与 X 是同一主机。
在 B 上:
ssh -Nn -L 8080:Y:80 username@X
这建立了一条隧道:
B:8080 <--- encrypted over ssh ---> X < ---- unencrypted ----> Y:80
然后A可以连接到B:8080并看到Y:80:
A <--- unencrypted ---> B:8080 <--- encrypted over ssh ---> X < ---- unencrypted ----> Y:80
如果 A 与 X 是同一台机器,B 与 Y 是同一台机器,则未加密的路径实际上永远不会经过真实的网络;您的网络浏览器连接到 localhost:8080(隧道启动); X 上的 ssh 服务器连接到 localhost:80。