使用场景
一般是在内网下,A机房可以访问B机房,B机房可以反问 C机房,A机房不能反问C机房
- 主机A 需要ssh到 主机C机器上
- 主机A 主要访问 主机C 网络环境下的web服务
环境准备
主机A:1.1.1.1
主机B:2.2.2.2
主机C:3.3.3.3
流量走向
- 主机A会通过ssh连接到 跳板主机(主机B),这连接在主机B上会直接和 主机C 建立ssh连接,这样主机A通过主机B直接和主机C建立连接
操作步骤
- 配置.ssh/config
$ cat ~/.ssh/config
ForwardX11Trusted yes
ForwardX11 yes
Host jump1
HostName 2.2.2.2
User root
Host jump2
HostName 3.3.3.3
User root
ProxyCommand ssh jump1 nc %h %p
# 首先会连接到jump1,然后在jump1上直接连接 root@3.3.3.3
- ssh连接主机C
$ ssh jump2
# 首先会提示输入主机B密码,在输入主机C密码
# 因为首先会连接到主机B上,然后这个连接会主动在主机B上和主机C建立连接
- 开启socks5代理
一般用于主机A上访问主机C上的web服务
$ ssh -qTfnND 127.0.0.1:10001 jump2
然后chrome浏览器代理这个10001端口
然后可以通过隧道连接主机C网段下的web服务(流量会通过主机C访问到对应的web服务器)
使用场景
- 外部用户需要ssh到机房内网主机上操作
- 外网用户需要访问机房内网下的web服务
环境准备
公网主机:39.104.126.32 端口:22
内网主机:192.168.206.131 端口:22
中间主机:可以连接内网和外网主机的机器(一般为pc机器,配置为双网)
流量流向
- 首先“中间主机” 在“公网主机” 中开启一个ssh隧道端口,这个隧道流量是“公网主机” 通过“中间主机”建立的隧道把流量转发到“内网主机”
- 然后“client主机”访问到“公网主机”ssh隧道端口,这时会通过“中间主机”隧道转发到内网主机
操作
中间主机
# 建立隧道
ssh -CqTfnN -R 11000:192.168.206.131:22 root@39.104.126.32 -p 22
# 输入39.104.126.32(外网主机)主机的密码
# 会在39.104.126.32机器上开启一个11000端口, 11000端口对应这内网主机的22端口
# 这时候,“公网主机”和“内网主机”建立了隧道,是通过“中间主机”建立的,“中间主机”会转发隧道中的流量
公网主机
netstat -tunlp |grep 11000
# 查看是否有11000端口监听成功
Client 开启socket隧道
ssh -qTfnND 1080 root@39.104.126.32 -p 11000
# 输入192.168.206.131(内网主机)的密码
# 开启socket隧道后,client主机的浏览器代理 127.0.0.1:1080端口后,可以访问机房A内网的web服务
# 访问到了“公网主机”的隧道端口,流量会经过“中间主机”转发到“内网主机”
Client ssh连接内网主机
ssh root@39.104.126.32 -p 11000
# 输入192.168.206.131(内网主机)的密码
# 访问到了“公网主机”的隧道端口,流量会经过“中间主机”转发到“内网主机”