SSH隧道
SSH 隧道(端口转发)有两种用法
将端口转发当做和代理使用,这样一个端口可以访问到支持代理的多个内网段
将端口转发当做一对一映射转发隧道,每个端口只能绑定单个服务的单个端口,但可以兼容不支持配置代理的服务,例如RDP
SSH隧道:用于要访问一台被内网隔离的SSH服务器,
1、XSHELL 隧道配置 条件1:被隔离的内网服务器需要能访问外网, 条件2:有一台有固定IP的公网服务器(通过NAT映射出去的也可以,主要是需要公网IP)
在xshell上正常配置到公网服务器的连接,并验证可以正常登录
打开上面创建链接的
SSH隧道(动态隧道)技术,主要应用于类似下图的环境,Remote PC 跟SSH client 之间无法直接连接,只有SSH server才能跟SSH client远程连接。Remote PC 通过SSH server 来跟SSH client进行远程连接。

本环境需要SSH server有两个网卡,两个ip,用于分别连接Remote PC和SSH client; 操作步骤:
建立SSH隧道时,需要将转发的主机SSH服务中的GatewayPorts设置为yes。表示允许进行端口转发
echo "GatewayPorts yes" >> /etc/ssh/sshd_config
systemctl restart sshd在Remote PC 上打开 putty(远程连接工具),输入连接SSH server的IP和端口,然后打开面板左侧的“SSH”中的“Tunnels”(隧道),设置Source port(源端口),选择Dynamic(动态),然后点击Add(添加),最后点击Open(打开)连接至SSH server 
这时如果查看Remote PC 的端口就可以发现有个新增的监听端口7000,在Remote PC上再打开一个putty客户端,输入SSH client的IP和端口,并在左侧的Connection(连接)中选择Proxy(代理),Proxy type(代理类型)选择SOCKS5,Proxy hostname(代理主机)输入127.0.0.1 ,Port(端口)输入之前设置的7000,然后选择Open(打开)就可以连接到SSH client主机。在SSH client上查看连接就会发现是由SSH server 连到到SSH client。
如果Remote PC连接到SSH server的putty隧道会话窗口被关闭,就会导致Remote PC 到 SSH client之间的连接中断
以上内容为根据别人提供的文档总结。 原文地址:http://www.hackingarticles.in/beginner-guide-ssl-tunneling-dynamic-tunneling/
SSH隧道--端口转发 用于内网被隔离只能通过转发机器进行出外网,从而访问外网的一台服务器
因为建立SSH隧道时,源和目标都能访问中间的转发主机,所以需要将转发的主机SSH服务中的GatewayPorts设置为yes
echo "GatewayPorts yes" >> /etc/ssh/sshd_config
systemctl restart sshd本地SSH隧道
在建立本地SSH隧道之前要清楚下面几个参数:
公网机器B的IP地址(这里是1.1.1.1)
公网机器B的端口号(这里是3333)
某服务器C的IP地址(这里是3.3.3.3)
某服务器C的端口号(端口:22) 在清楚了上面的参数后,我们使用下面的命令来建立一个远程SSH隧道,在192.168.199.16的主机上执行下面的命令:
ssh -Nf -L 1.1.1.1:3333:3.3.3.3:22 1.1.1.1这里我们用到了SSH客户端的三个参数,下面我们一一做出解释:
-N 告诉SSH客户端,这个连接不需要执行任何命令。仅仅做端口转发
-f 告诉SSH客户端在后台运行
-L 做本地映射端口,被冒号分割的三个部分含义分别是最后一个参数是我们用来建立隧道的中间机器的IP地址(IP: 1.1.1.1) 需要使用的本地端口号(端口: 3333) 需要访问的目标机器IP地址(IP: 3.3.3.3) 需要访问的目标机器端口(端口: 22) 那么本地局域网的任何机器访问1.1.1.1:3333都会自动被映射到3.3.3.3:22。
windows下使用putty端口转发内网RDP协议,防止直接开放RDP协议不安全。
访问结构类似下图,只不过ssh client 换成了一台windows主机的3389 
操作步骤:
修改SSH的配置,打开GatewayPorts功能
配置转发用的SSH服务器为仅私钥访问
在公网映射SSH服务器的SSH端口
在RemotePC端使用putty配置端口转发
在RemotePC上使用远程桌面连接转发的端口

如果有多个需要转发的,可以添加多个
假设 有A B C三台主机,A、B 能互通,B、C能互通,A、C不通。
现在要A访问C的远程桌面
修改一下B 的SSH配置,vi /etc/ssh/sshd_config 将GagewayPorts配置为yes。并重启SSHD服务
B配置SSH访问,并映射一个端口到公网,让A能访问到。建议配置成SSH只允许通过密钥访问,降低用户被暴力破解的风险
在A上(我的是windows系统)打开[putty]!(https://www.putty.org/)。先正常配置SSH连接的信息(用户、IP地址、端口)。
putty左侧的选项中,切换到Connection--SSH--Tunnels。分别填写Source port(本机随便写一个未占用的端口) 和Destination(要连接C主机的地址和端口),下面的类型选Local就可以了,然后点击Add添加到转发端口列表中。如果有多个需要转发的,可以添加多个 第四步的参考图

从左边切换到最顶部的Session中,填写一个Saved Sessions名称,点击右边的save保存一下设置,方便下次调用。
点击 Open 就会连接到B主机,连接成功之后,就可以通过127.0.0.1+刚才配置的Source port来进行访问,例如我配置的是8000端口,对应的是C主机的3389。那就可以打开A主机的远程桌面连接输入127.0.0.1:8000 进行连接了。
最后更新于