正向代理与反向代理

正向代理 正向代理是客户端和服务器中间的服务器,为了从原始服务器取得内容,客户端向代理服务器发送一个请求并指定目标(原始服务器), 然后代理服务器向原始服务器转发请求并将获得的内容返回给客户端。 举个例子,比如正常情况下我没法办上youtube,但是我有个aws的机器,它不受GFW的限制,能够访问youtube,我也能正常访问那个aws的机器, 那么我通过发送请求给aws的机器,让他转发我的请求给youtube,然后把youtube返回的数据给我,我就能通过aws的机器作为跳板访问GFW, 那个aws的机器也就是代理服务器的角色,并且这种方式就是正向代理。 总结一下,正向代理就是我想访问一台机器,但是被墙了访问不到,我需要一台机器作为跳板转发我的请求。 反向代理 于正向代理不同,反向代理更多的是为了保护原始服务器。 对于客户端而言,反向代理中的代理服务器就是原始服务器,客户端并不需要知道有这个代理的角色存在, 因此客户端也不需要一些额外的设置,比如正向代理中制定代理服务器是谁。 比如在原始服务器A上配置防火墙,使得只有服务器B能够访问A,并且通过B服务器转发A的数据实现于外界的通信。这样对于客户端,它只需要和B交互, 从而隐藏了服务器A,B服务器也就是反向代理服务器。由于有代理服务器的存在,对于后面的原始服务器来说,也就多了一层做负载均衡的服务器。 透明代理 还有一种代理方式叫做透明代理,比如公司的机器不能上qq,这个就是透明代理,它在内网和外网之间捕捉用户的请求,过滤一部分请求。 SSH端口转发 有一种很简单的方式就能做到代理功能,那就是SSH本身提供的端口转发功能。 要想理解清楚SSH端口转发,首先必须记住这样几个原则: SSH简单的理解就是2台机器之间安全的数据通道,它包括ssh的client和ssh的server2个角色,这样的一条通道也就是ssh隧道(ssh tunneling) SSH 端口转发自然需要 SSH 连接,而 SSH 连接是有方向的,从 SSH Client 到 SSH Server 我们的应用的请求也是有方向的,一般是客户端向服务器端发出请求 一旦这2个方向相同,我们称为ssh的本地转发(-L),不同则为远端转发(-R) 命令一般是跑在ssh client的机器上的 本地转发 ssh本地转发命令为: ssh -L <local port>:<remote host>:<remote port> <SSH hostname> 这条命令可以翻译成:从本地的端口发出请求,通过这台机器作为跳板转发请求到的端口。 是相对而言的,比如是127.0.0.1的话,就是本身。 所以一般如果是127.0.0.1的话,跳板机或者代理服务器就是目标服务器。 举个例子: A是一台在我家的机器macbook air,它可以访问taobao,也就是服务器C B是一台在公司的机器imac,由于在公司的内网,所以在家的A访问不到B C是taobao的服务器,公司不让上taobao,所以服务器B访问不了C 现在要想在让B服务器能访问C的80端口,由于防火墙这条路本身是走不通的,但是由于B能访问A,A能访问C,所以能把A作为代理服务器实现这一要求。 在服务器B和服务器A之间建立ssh隧道,在SSH端口转发中,由于服务器B能连接到服务器A,并且请求是从服务器B发出,所以B既是ssh的client,也是请求的客户端 所以此时应该在B上去运行ssh的本地转发命令: ssh -L 8080:HOST_C:80 HOST_A 远端转发 ssh远端转发的命令为: ssh -R <local port>:<remote host>:<remote port> <SSH hostname> 由于本身B是可以访问A的,但是A访问不到B,现在要想服务器A访问到B,也就是在家能连上公司的机器。...

March 27, 2024 · 1 min · Huijie Liu