场景:

当初有三台主机:A、B、C, A和B通,B和C通,然而A和C之间不通,比方有防火墙,或者是网段不同等等。然而如果我非要通过A能拜访C这个主机呢?这个时候就须要流量转发,通过将A->C的流量,交给B,由B作为跳板机转发到C。

形式一:通过SSH隧道转发

ssh隧道转发:分反向代理,正向代理,以及动静代理,我这里采纳了正向代理
在跳板机B上执行以下命令:

ssh -C -f -N -g -L 40022:192.168.168.144:22 root@192.168.168.144

其中192.168.168.144就是主机C的地址,22就是主机C须要拜访的端口号,40022是我在跳板机B上凋谢的端口,用于让主机A来ssh,
凋谢端口命令:

firewall-cmd --zone=public --add-port=40022/tcp --permanentfirewall-cmd --reload

这样配置后,我在A主机上:间接ssh B主机地址+凋谢的端口号:40022,就间接登录到主机C上了。
如果登录不上,须要批改主机B上sshd配置文件,开启隧道转发(百度有更具体的)
ps: ssh 前面加上-v -T就能够开启ssh调试,查找一下不通的起因

建设胜利后,能够通过 ps -ef | grep ssh 查看到过程,敞开这个ssh转发隧道,间接kill -9 杀过程即可

留神:ssh这种连贯是不稳固的,须要再装置一个autossh,保障ssh 隧道不会断,autossh用法自行百度。

yum install autossh

PS: ssh 隧道命令参数简介:
-f 后盾执行ssh 命令
-C 容许压缩数据
-N 不执行近程指令,建设静默连贯
-R 开启反向代理,将近程主机的某个端口转发到本地机器的指导端口
-L 开启正向代理,将本地主机某个端口转发到近程主机某个端口
-D 动静转发,即socket代理
-p 指定近程主机端口
-g 容许近程主机连贯本地用于转发的端口

形式二:通过Firewalld做流量转发(举荐)

ssh这种我感觉不是很靠谱,至于是ssh隧道转发平安还是Firewalld平安,这里不作计较。有些虚机镜像外面做了加固解决,ssh隧道是买通不了的,反正Firewalld是能够的。

以下操作都是在跳板机B上执行:
1、先使能firewallD的转发性能:

firewall-cmd --add-masquerade --permanent

2、增加端口映射:

firewall-cmd --permanent --add-forward-port=port=40022:proto=tcp:toport=22:toaddr=192.168.168.144firewall-cmd --reload

40022是跳板机B上的端口,映射到目标机器C的22端口,且192.168.168.144是目标主机C的地址
这样就能够通过在主机A上,ssh 主机B的地址+port 40022 间接拜访主机C

firewall 相干命令

删除映射firewall-cmd --permanent --remove-forward-port=port=40022:proto=tcp:toport=22:toaddr=192.168.168.144查看已失效的映射:firewall-cmd --list-forward-ports

最初举荐一个端口映射的小工具:rinetd ,这个比iptables 的nat映射配置简略,有需要的话,能够钻研一下,挺好用的。