SSH本地转发、远程转发、动态转发【通俗易懂,不懂的人就看此文】

ssh隧道命令选项含义:

                -n 重定向stdin到/dev/null
                -g 允许远端主机连接本地转发端口
                -f 后台运行,隐含-n选项(重定向stdin到/dev/null)
                -q 安静模式
                -N 不执行命令
                -T 不创建TTY
                -L 本地转发
                -R 远程转发
                -D 动态转发,实现socks5代理的关键 
# 注意:1-下面的所有命令在SSH客户端上执行 2-如果ssh命令生成的隧道不够稳定,可以考虑AutoSSH

本地转发

ssh -gfq -NTL [SSH客户端IP]:SSH客户端主机新产生的监听Port:目标服务端IP:目标服务端Port SSH服务端User@SSH服务端IP

  • 【 效果观察 】 此时在SSH客户端所在PC上执行:ss -tunlp 会发现新产生了一个Port监听,客户端(比如192.168.1.10的浏览器)可以访问这个Port(比如192.168.1.20:8080)来实现访问目标服务(比如http://公网ip:8000)
  • 【 应用场景 】 有点像正向代理, 客户端-->SSH客户端IP:PORT-->【SSH服务端->目标服务端IP:PORT】 (此处SSH服务端和目标服务端可以是同一台主机,如果是同一台主机,则命令格式中的目标服务端IP:目标服务端Port的格式可以写成127.0.0.1:目标服务端口号。这里把“SSH服务端和目标服务端之间的网络”称之为目标网络。
  • 【 通俗解释 】 客户端(比如浏览器)经由【SSH客户端->SSH服务端】之间的隧道访问“SSHD所在PC可达的服务(比如httpd)”。或者说客户端(比如浏览器)访问SSH客户端执行上述命令新产生的监听【IP:PORT】来访问SSHD可达的目标服务端(比如httpd)。 应用于:sshd服务端的PC可达目标服务

远程转发

ssh -gfq -NTR [SSH服务端IP]:SSH服务端主机新产生的监听Port:目标服务端IP:目标服务端Port SSHD服务端User@SSHD服务端IP

  • 【 效果观察 】 此时在SSHD服务端所在PC上执行: ss -tunlp 会发现新产生了一个Port监听,客户端(比如浏览器)可以访问这个IP:Port来访问目标服务,默认监听在回环接口,如果需要监听其他接口,需要修改sshd_config的GatewayPorts
  • 【 应用场景 】 有点像反向代理, 客户端->SSHD服务端IP:PORT->【SSH客户端->目标服务端IP:PORT】 (此处SSH客户端和目标服务端可以是同一台主机,如果是同一台主机,则命令格式中的目标服务端IP:目标服务端Port的格式可以写成127.0.0.1:目标服务端口号,这里把“SSH客户端和目标服务端之间的网络”称之为目标网络。
  • 【 通俗解释 】 客户端(比如浏览器)经由【SSH服务端<-SSH客户端】之间的隧道访问ssh客户端可达的目标服务,或说客户端(比如浏览器)访问SSH服务端新监听的IP:Port来访问ssh客户端可达的目标服务(比如httpd)。应用于:ssh客户端的PC可达目标服务
  • 【 注意 】 实际测试发现,如果想要SSH服务端新生成的端口监听到0.0.0.0的话,需要修改sshd配置文件(/etc/ssh/sshd_config)中的GatewayPorts为yes才行。

动态转发

ssh -gfq -NTD [SSH客户端IP]:SSH客户端新产生的监听Port SSH服务端User@SSH服务端IP

  • 【 效果观察 】 socks5正向代理。各种tcp/udp包可以通过【 [SSH客户端IP]:SSH客户端新产生的监听Port 】 连接到远程SSHD服务端,SSHD服务端相当于socks5代理服务器。SSH服务端再把客户端发上来的各种各样的“Addr:Port”的请求转发出去
  • 【 应用场景 】 把SSHD服务端当socks5代理
  • 【 注意 】 在win10中设置socks5代理时,在“设置->网络和Internet->代理”设置的代理是http代理,如果想要设置socks5代理,需要在地址框中显示填写“socks=地址”

posted on 2019-11-07 13:47  进取有乐  阅读(73)  评论(0)    收藏  举报

导航