SSH Tunnel 顾名思义就是 SSH 安全隧道,我们在研究这个东东之前来分析几个场景

准备工作:

host1=192.168.56.123

host2=192.168.56.124

host3=192.168.56.125

场景一:

现在有三台主机 ,分别是host1,host2,host3, 其中host1可以访问host2的22 端口,host2可以通过22端口访问host3,但是host1不能直接通过22端口访问host3,因为防火墙的限制,现在需求是 我们想让host1也能访问host3,在不改变现有网络结构的情况下 怎么操作呢 ,

先来看看 图示 :

 

有两种办法可以解决这个问题

方法一,host1 ssh到host2, 而后在host2中ssh到host3

这样是可以的,这个也是我们说的跳板机/堡垒机的原理,这个不是本文的重点。有兴趣的可以自行尝试

 

方法二, 通过tennel技术来实现

下面我们来通过tennel技术来解决这个问题,我们先给出命令,后面我们再来解释他的运作方式

本地映射方式一:

登录host1,运行下面的命令

1 ssh -L 8888:192.168.56.125:22 root@192.168.56.124

 

 

命令解释:

此命令的意思是,让host1 起8888 端口,借助host2能直接访问host3,使之映射到host3的22端口,后面我们想从host1上直接登录host3,就可以在host1使用下面的命令

ssh -p 8888 root@localhost

本地映射方式二:

登录host2,运行下面的命令

ssh -L 0.0.0.0:8888:192.168.56.125:22 root@192.168.56.125

此命令的意思是,让host2起8888端口可以被外网机器访问,注意这里的0.0.0.0,表示外网能访问,如果设置成127.0.0.1,表示只能在host2中通ssh -p 8888 root@localhost的形式访问host3

 

可以看看ssh效果,

成功登录效果:

 

 以上方式均可成功****************************************************************************************************

 

 

以下方式有些问题*****************************************************************************************************

非本地端口映射方式一:

以上都是本地端口映射的方式去访问远程主机,是主动起端口去映射远程机器的端口达到可以访问远程主机的方式,还有一种是被动的,意思就是远程主机告诉本地主机去起某一个端口跟自己的某一端口映射,然后第三个主机可以通过映射端口访问自己(远程主机),是不是很绕,我们来通过案例说明

还是以上面的host1,host2,host3为例

host1能ssh到host2,host2能ssh到host3,host1 不能直接ssh 到host3,我们想让host3 想让host1 连接自己应该怎么弄,刚才讲到的是让host2起或host1 起8888端口去映射host3的22端口,这个是他们主动起的, 现在是host3 想让host1去连接自己, host1 就成被动了 

我们先给出命令,然后再解释其含义:

ssh -R 0.0.0.0:8888:192.168.56.125:22 root@192.168.56.124

命令含义是说,登录host3,在host3里执行上述命令,让host2在0.0.0.0监听8888端口映射到host3 的22端口,而后host1可以通过ssh -p 8888 root@192.168.56.124(host2)来访问192.168.56.125(host3)

我试了试,用这种方式好像host2不能在0.0.0.0上监听8888,只能在127.0.0.1监听,这样导致host1不能通过host2 的8888端口访问到host3,有明白为什么的同学可以在下方留言,博主万分感谢。

 

 

 

这部分内容网上说是可以的,但是我试了下没有成功,还是不能上网 ,请有兴趣的同学试试,看看问题出在哪里 ,欢迎留言相告,万分感激 

****************************************************************************************

ssh tennel代理上网:

比如 host2能上网,而host1不能上网,但是host1可以ssh 到host2,可以通过下面的方式让host1通过host2 去上网

命令如下:

ssh -D 8989 root@192.168.56.124

命令解释:

登陆host1,运行上述命令,让host1在本地起8989端口,这样host1 在配置了代理上网localhost:8989之后,就可以通过host2来上网。

centos7配置代理上网的方式:

在目录/etc/profile.d新建文件proxy.sh,并填入以下内容

export http_proxy=http://localhost:8989/
export https_proxy=https://localhost:8989/
export ftp_proxy=https://localhost:8989/
source /etc/profile

完成后host1就能上网了 

****************************************************************************************

 

 

经常用到的用法,

1,windows主机通过端口映射到虚拟主机的某一端口,例如宿主机是Windows,里面用VBox起了虚拟机,ip为192.168.56.11,虚拟机里有一个HTTP应用,起的是8080端口,当然我们可以在宿主机中通过虚拟网卡访问到192.168.56.0/24网段,但是在宿主机局域网中是访问不到的,宿主机网关也不知道怎么路由到192.168.56.0/24这个网段,所以访问不到,但是我们可以用以下命令来让宿主机的起一个端口映射到虚拟机的一个端口上,这个需要借助有ssh的客户端工具完成,例如xshell或Gitbash,先看命令:

ssh -L 0.0.0.0:8999:192.168.56.11:8080 root@192.168.56.11

这个命令的运行方式是,在Windows宿主机上起8999端口,如意前面的IP地址可以不写,不写的话表示只能在本机访问,就是 说你只能通过http://127.0.0.1:8999来访问,而宿主机局域网中的机器是不能访问到这个端口的,因为他绑定的是本地回环网卡127.0.0.1. 要想宿主机局域网中的其他机器也能访问到,必须加上0.0.0.0,来监听所有网卡。然后是这个8999端口会映射到192.168.56.11:8080端口,这也是经常会用到的一种方式

 

posted on 2020-12-28 09:17  EZgod  阅读(367)  评论(0编辑  收藏  举报