基础知识

正向代理

所谓正向代理就是无法直接访问目标服务,只能借助中间机器来访问目标服务。如下图所示:hostA无法直接访问目标服务(例如在内网环境,无法直接访问外部服务),但是能够访问hostB且hostB能够访问目标服务,因此hostA去访问hostB,然后由hostB去请求目标服务。

正向代理

反向代理

反向代理跟正向代理相反,正向代理解决的是怎么出去问题,反向代理解决的是怎么让外部访问你的服务问题,例如hostA有个服务需要对外暴露,但是外部网络无法直接访问,此时hostB能访问到hostA,外部网络能访问hostB,因此外部网络通过访问hostB,hostB再把数据代理到HostA

反向代理

ssh 代理功能

ssh 命令除了登陆外还有三种代理功能:

  • 正向代理(-L):相当于 iptable 的 port forwarding
  • 反向代理(-R):相当于 frp 或者 ngrok
  • socks5 代理(-D):相当于 ss/ssr

ssh 正向代理

1
ssh -L [客户端IP或省略]:[客户端端口]:[服务器侧能访问的IP]:[服务器侧能访问的IP的端口] [登陆服务器的用户名@服务器IP] -p [服务器ssh服务端口(默认22)]

客户端IP可以省略,省略的话就是127.0.0.1。服务器IP都可以用域名来代替。

举例说明: 你的IP是192.168.1.2,你可以ssh到某台服务器8.8.8.8,8.8.8.8可以访问8.8.4.4,你内网里还有一台机器可以访问你。 如果你想让内网里的另外一台电脑访问8.8.4.4的80端口的http服务,那么可以执行:

1
ssh -L 192.168.1.2:80:8.8.4.4:80 test@8.8.8.8

这时内网里的另外一台机器可以通过浏览器中输入http://192.168.1.2:80查看8.8.4.4的网页

ssh 反向代理

1
ssh -R [服务器IP或省略]:[服务器端口]:[客户端侧能访问的IP]:[客户端侧能访问的IP的端口] [登陆服务器的用户名@服务器IP] -p [服务器ssh服务端口(默认22)]

服务器IP如果省略,则默认为127.0.0.1,只有服务器自身可以访问。指定服务器外网IP的话,任何人都可以通过[服务器IP:端口]来访问服务。

举例说明: 你的IP是192.168.1.2,你可以ssh到外网某台服务器8.8.8.8,你内网里有一台机器192.168.1.3。 如果你想让外网所有的能访问8.8.8.8的IP都能访问192.168.1.3的http服务,那么可以执行:

1
ssh -R 8.8.8.8:80:192.168.1.3:80 test@8.8.8.8

这时外网任何一台可以访问8.8.8.8的机器都可以通过80端口访问到内网192.168.1.3机器的80端口。

参考文档