2019年12月18日 下午2:51
ssh 反向代理 - 不拨牙 - 博客园
相关知识:
- nat和内网穿透的概念:
- nat(网络地址转换方法)_百度百科
- 内网穿透_百度百科
- 关键词是:地址转换。表示:公网ip和局域网ip进行对应关系,这个关系是:多对一(一个公网ip对应n个内网ip)。这也导致会有内网穿透这个说法:用于确定将一个公网ip:port对应到局域网中的ip。
- nat与内网穿透的关系:
- ::逆过程:从nat的说明中可看出,nat其实指的是多对一编码这个过程,而内网穿透强调了是一对多的解码过程::
- nat:出去的过程
- 内网穿透:回来的过程
- NAT网关的工作步骤:


- ssh 代理和 vpn代理的区别:
- 该使用 SSH 还是该使用 VPN?
- vpn:
- VPN 是虚拟专用网络,它虚拟了一个网卡,类似于一个数据隧道,使用 VPN 后,你连接到了一个新的网络连接,这个网络连接和你所使用的宽带连接、局域网连接等是平级的,(但实际上数据是先加密,再通过你其它的网卡发送的),如果你使用这种方式连接了网络,你的所有网络数据包都将通过 VPN 加密隧道发送。
- SSH:
- ::他不是一个单独的网络连接,只是在现有网络连接内的一个协议::
- VPN 更接近底层,相当于一个新的虚拟网卡,更有“专用”的性质,而 SSH 更像加密的代理服务器,是在你现有的网络上的一个普通的连接。
- 为什么VPN比SSH繁荣?
- 因为ssh做不了的事情,VPN都可以做;而ssh能做的,VPN也统统能做。
- ssh和vpn哪个好,区别是什么? | Mujj博客
- 其他:
- 其实ssh只是代理的一种,代理有很多种,例如http代理,反向代理等,这些之所以在国内的网络环境里不堪大用,主要是因为他们内容传输都是使用明文,不加密的内容很容易被第三方嗅探,然后截断连接
- ssh和vpn都是加密传输,相对安全,在国内恶劣的网络环境下,总算能够生存。
注:
- 如果抱着登录服务器的目的来说,最简单的方法就依然还是必须有A、B服务器,但是没不要设置啥代理,直接先从Cssh登录到B,再从B登录到A一样可以完成连接。
- 所以说,如果简单的连接一下A服务器,没必要弄得这么复杂!!!
理解核心
::一台linuxA,它不仅可以主动的连接B,也可以命令B来连接自己::
- 这就是linux反向代理最难理解的地方,这个命令B来连接自己这个动作有点反直觉,谁会想到linux有这功能,这也体现了linux中的确有很多的设计哲学在里面。
- 这两种的结果虽然都是B->A,但是不同点是:反向代理会使B机器启动一个ssh连接(B->A)对应的端口号。如果正向连接B->A,这个ssh在B上没有启动一个对应的接口,不好之处是:无法将B机器其他端口的内容转接到B->A之间的连接(eg:无法再在B机器上进行正向代理端口映射到已有的连接中)。
利用SSH代理访问内网资源 - DTeam的团队日志 - SegmentFault 思否
另一种理解:
正向代理与反向代理的区别? - 个人文章 - SegmentFault 思否
正向代理:代理的是客户端(服务器并不知道真正的客户端到底是谁)
反向代理:代理的是服务端(客户端也不知道真正的服务器是谁)
参数说明:
- 反向代理
ssh -fCNR
- 正向代理
ssh -fCNL
- -f 后台执行ssh指令
- -C 允许压缩数据
- -N 不执行远程指令
- -R 将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口
- 这就是反向两个字的意思!!!
- -L 将本地机(客户机)的某个端口转发到远端指定机器的指定端口
- 这就是正向两个字的意思!!!
- -p 指定远程主机的端口
机器状况:

流程说明:
- 第一步:就是在机器A上做到B机器的反向代理
- 命令:
ssh -fCNR 7280:localhost:22 root@123.123.123.123 - 步骤:
- 登录B机器:
ssh root@123.123.123.123注:这里是默认的22端口 - 在B机器中端口转发:
B:7280->A:22,注:我认为这就是一个正向代理。也就说:反向代理中是正向代理的包装!
- 登录B机器:
- 结果:
- 此时,AB之间的ssh连接一直保持(结果就像B ssh连接了A一样,只不过是由A要求B做的)
- 此时,可以在B机器中使用
ssh -p 7280 localhost来登录
- 命令:
- 第二步:在B机器上做正向的代理实现本地端口的转发
ssh -fCNL *:1234:localhost:7280 localhost- 需要这次转发的原因是:
B:7280是B机器与A进行通讯的ssh进程启动的端口(只有反向代理才会有),而不是登录B机器的端口,因此我们需要B机器上的另一个端口B:1234作为B机器的登录端口,并将此次登录的内容,转发到B:1234->B:7280
- 第三部:在另一台外网服务器C中通过
B:1234端口来登录Bssh -p1234 gdut728@123.123.123.123
检验是否已经启动了可以使用ps aux | grep ssh指令来查看:
