三种不同类型的ssh隧道

简介: 想通过ssh隧道连接远端机器的VNC服务,对ssh -L命令不太熟悉,man ssh后发现3组与隧道(turnnel)相关的参数:ssh -D,ssh -L,ssh -R,一下子就搞糊涂了,所有下决心仔细研究一番。何谓SSH隧道隧道是一种把一种网络协议封装进另外一种网络协议进行传输的技术。这里我们研究ssh隧道,所以所有的网络通讯都是加密的。又被称作端口转发,因为ssh隧道通常会绑定一个本地端口,所有发向这个端口端口的数据包,都会被加密并透明地传输到远端系统。SSH隧道的类型ssh隧道有3种类型:动态端口转发(Socks 代理)本地端口转发远端端口转发动态端口转发

想通过ssh隧道连接远端机器的VNC服务,对ssh -L命令不太熟悉,man ssh后发现3组与隧道(turnnel)相关的参数:ssh -D,ssh -L,ssh -R,一下子就搞糊涂了,所有下决心仔细研究一番。

何谓SSH隧道
隧道是一种把一种网络协议封装进另外一种网络协议进行传输的技术。这里我们研究ssh隧道,所以所有的网络通讯都是加密的。又被称作端口转发,因为ssh隧道通常会绑定一个本地端口,所有发向这个端口端口的数据包,都会被加密并透明地传输到远端系统。

SSH隧道的类型
ssh隧道有3种类型:

动态端口转发(Socks 代理)

本地端口转发

远端端口转发

动态端口转发
动态端口允许通过配置一个本地端口,把通过隧道到数据转发到远端的所有地址。本地的应用程序需要使用Socks协议与本地端口通讯。此时SSH充当Socks代理服务器的角色。

命令格式

ssh -D [bind_address:]port
参数说明

bind_address 指定绑定的IP地址,默认情况会绑定在本地的回环地址(即127.0.0.1),如果空值或者为*会绑定本地所有的IP地址,如果希望绑定的端口仅供本机使用,可以指定为localhost。

port 指定本地绑定的端口

使用场景

假设X网络(192.168.18.0/24)有主机A(192.168.18.100),Y网络(192.168.2.0/24)有主机B(192.168.2.100)和主机C(192.168.2.101),已知主机A可以连接主机B,但无法连接主机C。

在主机A执行

$ ssh -D localhost:8080 root@192.168.2.100
然后主机A上的应用程序就可以通过

SOCKS5 localhost:8080
访问主机C上的服务。

优点

配置一个代理服务就可以访问远端机器和与其所在子网络的所有服务

缺点

应用程序需要额外配置SOCKS代理,若应用程序不支持代理配置则无法使用

本地端口转发
通过SSH隧道,将一个远端机器能够访问到的地址和端口,映射为一个本地的端口。

本地端口转发

命令格式

ssh -L [bind_address:]port:host:hostport
参数说明

bind_address 指定绑定的IP地址,默认情况会绑定在本地的回环地址(即127.0.0.1),如果空值或者为*会绑定本地所有的IP地址,如果希望绑定的端口仅供本机使用,可以指定为localhost。

port 指定本地绑定的端口

host 指定数据包转发目标地址的IP,如果目标主机和ssh server是同一台主机时该手机游戏卖号平台参数指定为localhost

host_port 指定数据包转发目标端口

使用场景

假设X网络(192.168.18.0/24)有主机A(192.168.18.100),Y网络(192.168.2.0/24)有主机B(192.168.2.100)和主机C(192.168.2.101),已知主机A可以连接主机B,但无法连接主机C。A主机需要访问C主机的VNC服务(5900端口)

在A主机上建立本地转发端口5901

$ ssh -L 5901:192.168.2.101:5900 root@192.168.2.100
然后本地vnc客户端通过5901端口打开c主机的vnc服务

$ open vnc://localhost:5901
优点

无需设置代理

缺点

每个服务都需要配置不同的端口转发

远端端口转发
远程端口转发用于某些单向阻隔的内网环境,比如说NAT,网络防火墙。在NAT设备之后的内网主机可以直接访问公网主机,但外网主机却无法访问内网主机的服务。如果内网主机向外网主机建立一个远程转发端口,就可以让外网主机通过该端口访问该内网主机的服务。可以把这个内网主机理解为“内应”和“开门者”。

远端端口转发

命令格式

ssh -R [bind_address:]port:host:hostport
参数说明

bind_address 指定绑定的IP地址,默认情况会绑定在本地的回环地址(即127.0.0.1),如果空值或者为*会绑定本地所有的IP地址,如果希望绑定的端口仅供本机使用,可以指定为localhost。

port 指定本地绑定的端口

host 指定数据包转发源地址的IP,如果源主机和ssh server是同一台主机时该参数指定为localhost

host_port 指定数据包转发源端口

使用场景

假设X网络(192.168.18.0/24)有主机A(192.168.18.100),Y网络(192.168.2.0/24)有主机B(192.168.2.100)和主机C(192.168.2.101),已知主机A可以通过SSH访问登录B主机,但反向直接连接被禁止,主机B和主机C可以相互访问。若主机C想访问主机A的VNC服务(5900端口)。

在主机A执行如下命令,开放B主机远端端口转发。

$ ssh -R 5900:192.168.2.100:5901 root@192.168.2.100
然后主机C连接主机B的5901端口

$ open vnc://192.168.2.100:5901
优点

可以穿越防火墙和NAT设备

缺点

每个服务都需要配置不同的端口转发

如何禁止端口转发
设置ssh服务配置文件/etc/ssh/sshd_config

AllowTcpForwarding no

目录
相关文章
|
安全 关系型数据库 MySQL
Mysql SSH隧道连接使用方法
Mysql SSH隧道连接使用方法
1691 0
|
6月前
|
安全 Linux 网络安全
|
5月前
|
网络协议 安全 Linux
【内网安全】隧道技术&SSH&DNS&ICMP&SMB&上线通讯Linux&Mac
【内网安全】隧道技术&SSH&DNS&ICMP&SMB&上线通讯Linux&Mac
|
6月前
|
Ubuntu 网络安全 数据安全/隐私保护
使用SSH隧道将Ubuntu云服务器Jupyter Notebook端口映射到本地
这样,你就成功地将Ubuntu云服务器上的Jupyter Notebook端口映射到本地,使你能够通过本地浏览器访问并使用Jupyter Notebook。
449 1
|
安全 网络安全
SSH隧道端口转发详解
需要在目标主机修改如下配置文件内容
331 0
|
域名解析 网络协议 安全
【内网安全-隧道技术】SMB、ICMP、DNS隧道、SSH协议
【内网安全-隧道技术】SMB、ICMP、DNS隧道、SSH协议
944 0
【内网安全-隧道技术】SMB、ICMP、DNS隧道、SSH协议
|
网络协议 网络安全 数据安全/隐私保护
|
消息中间件 Kafka 网络安全
|
Web App开发 Shell 网络安全
基于SSH隧道+chrome插件SwitchyOmega访问内网机器
背景:客户的服务在线下IDC,访问服务器通过VPN连接到IDC,但VPN连接后只放行了特性端口比如80,服务器部署了grafana系统之后不想与现有的80共用一个端口。比如grafana应用监听除80之外的3000端口,在不通过客户邮件申请其他端口的情况下,是否有其他办法呢?本文基于SH隧道+chrome插件SwitchyOmega访问IDC的3000端口画了架构图便于理解,如下图所示正常访问路线A,但由于防火墙的限制无法访问除允许的端口,所以我们想通过阿里云的服务器做ssh隧道(阿里云与IDC机器通过专线连接,端口未做限制),也就是图中的线路B。
7291 0
|
安全 网络安全 数据库
PostgreSQL 10.1 手册_部分 III. 服务器管理_第 18 章 服务器设置和操作_18.10. 使用SSH隧道的安全 TCP/IP 连接
18.10. 使用SSH隧道的安全 TCP/IP 连接 可以使用SSH来加密客户端和PostgreSQL服务器之间的网络连接。如果处理得当,这将提供一个足够安全的网络连接,即使是对那些无 SSL 能力的客户端。
1200 0