1. SSH代理转发

1.1. 名词解释

名词 解释
SSH Secure Shell一种远程登录和代理的SSH协议实现
端口转发 将发往某个端口请求转发到其他某个机器的某个端口
跳板机 在局域网环境中,一台既可以访问内网又可以访问外同,同时能够被外网访问的一台机器

1.2. SSH本地端口转发(L)

1.2.1. 原理分析

SSH本地端口转发是一种正向隧道技术,是一种将本地端口通过代理服务器映射到远程服务器的某个端口技术。

ssh -L [listen_Host:]listen_port:DST_Host:DST_port user@Tunnel_Host
  • listen_Host : 可选,监听的机器IP,默认是本地接口。如果指定为IP地址,并且选项加-g时,其他能够访问该机器的机器也可通过该代理来访问远程的的服务。
  • listen_port : 必选,监听的端口,如果是非root用户,指定的端口需要大于1024.
  • DST_Host : 必选,远程提供服务器的机器
  • DST_port : 必选,远程提供服务的端口

1.2.2. 示例环境

环境描述

现在有3台机器A1/B1/B2 A1是访问的发起者。IP为20.20.20.20 B网络是一个私网(192.168.1.0/24) B1是B网络的公网跳板机,能够访问公网和内网。公网IP为30.30.30.30,内网IP为192.168.1.1 B2是B网络内网的一台服务器,只能内网(192.168.1.0/24)机器访问。内网IP是192.168.1.2

访问需求

要求在A1机器上能够访问B2机器上的80端口

需求分析

A1机器是访问的发起者,可以是公网上的一台机器,也可以是某个内网的机器,只需要该机器能够访问公网B1机器即可。B1机器是B网络的一个跳板机,能够同时访问公网和内部网络。B2机器是B网络的内网一台机器,公网是不能直接访问的,但是B1机器却可以访问。对于这样的环境,可以在A1机器上配置SSH本地端口转发功能,将请求通过B1转发到B2机器上。

请求链路 A1{ssh clinet} --> B1{ssh server} --> B2

响应链路 B2 --> B1{ssh server} --> A1{ssh client}

需求实现

在A1机器上执行配置命令

ssh -g -N -f -o ServerAliveInterval=60 -L 20.20.20.20:8888:192.168.1.2:80  root@30.30.30.30

通过访问20.20.20.20(A1机器)的8888端口,就可以转发请求到192.168.1.2的80端口。执行命令时需要输入30.30.30.30的root密码。

  • -g : 允许其他机器访问该端口
  • -N : 不执行命令,仅作为端口转发功能
  • -f : 后台运行,不占用shell终端
  • -o : 发送ssh存活请求
  • -L : 配置本地端口转发功能

1.3. SSH远程端口转发(R)

SSH远程端口转发是一种反向隧道技术,通过将远程SSH Server的端口请求转发到自己网络的其他机器

1.3.1. 示例环境

现在有3台机器C1/C2/D1 C1是服务提供机器,只能内部网络访问。ip地址为:172.16.1.1 C2也是内部服务器,但C2可以访问公网。ip地址为:172.16.1.2 D1是公网上一台机器。ip地址为:40.40.40.40

1.3.2. 访问需求

通过D1来访问C1的服务

1.3.3. 需求分析

在C网络中没有公网跳板机,但是C2可以访问外网的情况,同时D1是C2可以访问的一台公网服务器,这时可用通过C2配置远程端口转发功能,就可以通过D1来访问C1的服务

请求链路 D1{ssh server} --> C2{ssh client} --> C1

响应链路 C1 --> C2{ssh client} --> D1{ssh server}

1.3.4. 需求实现

修改D1的SSHD配置/etc/ssh/sshd_config

GatewayPorts yes

在C2机器执行

ssh -g -N -f -o ServerAliveInterval=60 -R  40.40.40.40:8888:172.16.1.1:80  root@40.40.40.40
  • -R 配置远程端口准发

在D1机器上访问8888端口就是访问C1的80端口

1.4. SSH动态端口转发(D)

1.4.1. 原理分析

通过sockets代理服务,将请求转发到跳板机,有跳板机请求其网络中的服务

1.4.2. 示例环境

现在有公网E1机器和F1机器 E1是公网的一个机器,或者其他能够访问F1的的器,公网IP为:60.60.60.60 F1是F网络的跳板机。公网IP为50.50.50.50,内网IP为:10.0.0.1

1.4.3. 访问需求

E1能否访问F1所在网络所有机器的服务(10.0.0.0/8)

1.4.4. 需求分析

E1只是一个访问客户端,所在的位置不是很重要,可以是公网机器,也可以是内网能够访问公网的F1的机器。F1是一个跳板机,能够联通F1内外网络。这样可以在E1上配置动态端口转发功能来访问F网络。

请求链路 E1{ssh client} --> F1{ssh server} --> F{10.0.0.0/8}

响应链路 F{10.0.0.0/8} --> F1{ssh server} --> E1{ssh client}

1.4.5. 需求实现

在E1机器上执行

ssh -g -N -f -o ServerAliveInterval=60 -D  60.60.60.60:9999  root@60.60.60.60

配置代理,将请求发送给E1的9999端口,就可以访问F网络了

1.5. SSH图形转发(X)

-

1.6. 参考

http://hetaoo.iteye.com/blog/2299123

http://www.linuxidc.com/Linux/2016-01/127868.htm

Copyright © 温玉 2021 | 浙ICP备2020032454号 all right reserved,powered by Gitbook该文件修订时间: 2022-01-02 10:02:05

results matching ""

    No results matching ""