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=地址”
浙公网安备 33010602011771号