Linux 下 ssh 正向和反向流量转发

我们平时在使用网络时,可能会有后面所述的使用场景。局域网中只有一台网关电脑可以连接另一网络的电脑。局域网中的其它电脑通过网关电脑连接另一网络的电脑。另一网络中的电脑通过网关电脑连接到局域网中其它电脑。这些可以用 ssh 的正向和反向连接功能来实现。下面我以 Deepin Linux 宿主机和其上的3台 VirtualBox 虚拟机为例来演示一下。视频演示地址:https://www.bilibili.com/video/BV1dY411a73p?share_source=copy_web

一、各主机及网络状态

各主机的 ”用户名@主机名,IP“ 如下:
A: littlebat@learndiary,10.0.2.15,10.0.0.1
B: littlebat@openeuler,10.0.0.2
C: test@i7,192.168.1.11
D: test@centos,192.168.1.12

各主机连通性如下:
A、B 在同一个局域网 10.0.0.0/24 内,可以互访;
C、D 在同一个局域网 192.168.1.0/24 内,可以互访;
A 通过另一接口 10.0.2.15 可以访问 C、D;
B 不能访问 C、D;
C、D 均不能访问 A、B。

每台主机均开放 ssh 22 端口,并以转发各主机的 ssh 端口为例来示例 ssh 的正向和反向流量转发功能。

二、正向转发
1、在 A 上把 A 的 2022 端口转发到 C 的 22 端口,访问 A 的 2022 端口即访问 C 的 22 端口,在 A 的 /etc/ssh/sshd_config 的 Gateway = no 的情况下:

1)、仅可在本机上连接转发端口:
ssh -p 22 -L 2022:localhost:22 test@192.168.1.11

2)、在绑定的地址上可连接转发端口,如:
ssh -p 22 -L 10.0.0.1:2022:localhost:22 test@192.168.1.11
ssh -p 22 -L 0.0.0.0:2022:localhost:22 test@192.168.1.11

3)、在全部接口上可连接转发端口:
ssh -p 22 -L :2022:localhost:22 test@192.168.1.11
或者:
ssh -p 22 -L *:2022:localhost:22 test@192.168.1.11
或者:
ssh -p 22 -L 0.0.0.0:2022:localhost:22 test@192.168.1.11

2、在 A 上把 A 的 2022 端口转发到 D 的 22 端口
ssh -p 22 -L *:2022:192.168.1.12:22 test@192.168.1.11

三、反向转发
1、在 A 上把 C 的 2022 端口转发到 A 的 22 端口,访问 C 的 2022 端口即访问 A 的 22 端口

1)、在 C 的 /etc/ssh/sshd_config 的 Gateway = no 的情况下,仅可在 C 本机上连接转发端口:
ssh -p 22 -R 2022:localhost:22 test@192.168.1.11

2)、在 C 的 /etc/ssh/sshd_config 的 Gateway = yes 的情况下,即可在全部接口上连接转发端口:
ssh -p 22 -R 2022:localhost:22 test@192.168.1.11

2、在 A 上把 C 的 2022 端口转发到 B 的 22 端口,访问 C 的 2022 端口即访问 B 的 22 端口
ssh -p 22 -R 2022:10.0.0.2:22 test@192.168.1.11

四、小结
ssh 是一款非常强大的远程连接工具,上面的正反向转发功能只是它的众多功能之二,要全面了解它的强大,可以阅读 man ssh。另外,我测试过,Windows 平台的 ssh 客户端 putty 也有同样的正反向转发功能。

发表评论

电子邮件地址不会被公开。 必填项已用*标注