代理隧道网关

Posted 拯救世界的光太郎

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了代理隧道网关相关的知识,希望对你有一定的参考价值。

一、代理

        为什么需要代理?

        我们知道,内网通常是无法访问互联网的,恰巧我们又有这样的需求,这个时候,我们就可以架设一个代理服务器,客户端可以直接访问代理服务器,然后由代理服务器访问资源服务器。

        我们平时浏览网页时,客户端向服务端发送请求,web服务器收到请求后,向浏览器返回网页数据,最后浏览器渲染网页呈现在我们面前。

        HTTP代理的原理基本相同,我们在客户端设置了HTTP代理服务器,所有的HTTP请求就会首先发送到HTTP代理服务器上,代理服务器自动提取请求数据包的Request数据,然后作为客户端向Web服务器发送请求并且把Web服务器返回的数据转发给发送请求的客户端,代理服务器在这个过程中充当了中间人的角色。

        对于客户端来说,代理扮演服务器的角色,接收请求、返回响应;对于服务器来说,代理扮演着客户端的角色,发送请求、接收响应。

        在这个过程中,如果代理服务器不主动向服务端透露客户端的IP信息,并且不改变客户端发来的请求信息,那么从服务端的角度来看,一直都是代理服务器在向它请求数据,完全察觉不到真实客户端的存在,我们把这种类型的代理成为全匿名代理。除此之外,代理服务器对真实客户端的隐藏程度,还可以分为:普通匿名代理透明代理

        爬虫有一个代理池,其实就是利用很多不同的代理服务器,去对目标网站进行爬取,这样防止单个IP访问频率过高被网站封杀。

        但是现在越来越多的网站已经不是采用单纯的HTTP协议了,而是在HTTP上加入了用来加密数据包的安全层,即HTTPS,其开发的主要目的是提供对网站服务器的身份认证,保护交换数据的隐私与完整性。但这却影响到了我们刚才谈到的代理服务器的正常工作。因为如果客户端还是像刚刚那样只是简单地把本该直接发送给服务端的加密后的请求数据包发给代理服务器的话,由于数据包中的内容是被加密的,代理服务器无法读取请求头内容,后面的工作也就无法进行了。

        HTTP代理其实是有办法代理HTTPS数据包的,解决方式就是通过一个特殊的请求方法“connect”,它是HTTP中的一种请求方法,connect方法可以开启一个客户端与所请求资源之间的双向沟通的通道,这样客户只需每次在发送数据给代理之前,先向代理发起connect请求,通知代理服务器去与服务端主机建立好连接,然后再向代理发送请求数据,代理收到数据后,代理不管三七二十一直接转发给主机,再将服务端返回的数据转发给客户端,直到任何一方结束连接。

        其实理论上来讲,这种方式是能够代理任何基于TCP连接的应用层数据,包括HTTPS、FTP、SSH之类,因为在客户端通知代理与服务端建立好连接之后,代理会直接转发收到的任何数据,而并不关心数据内容。

        那既然HTTP代理能够代理HTTPS数据,那为什么还有种代理服务器叫HTTPS代理?

        其实,HTTPS代理并不是指用来代理HTTPS的代理服务器,它只是将我们说的HTTP代理过程中客户端与服务端的连接方式改为了HTTPS,所以叫做HTTPS代理。

        作为用户,我们在上网时设置代理服务器,可以访问原来无法访问的资源,可以做缓存,加速访问资源,还可以对外隐藏用户信息,这种情况的代理可以把它叫做正向代理。正向代理是代表客户端向服务端发起请求,而反向代理,就是代表服务器向用户提供服务。正向代理隐藏真实客户端,反向代理隐藏真实服务端。

        有时候网络供应商会对上网用户的端口、目的网站、协议、游戏、即使通讯软件等进行限制,使用代理服务器就可以突破这些限制。

        可以看到,代理主要的作用,就包括:提高访问速度组织内部针对特定网站的访问控制隐藏真实身份突破限制

二、隧道

        前面我们说了,当我们需要用内网访问处于互联网中的资源服务器时,可以通过代理来解决需求。还有一种解决问题的方式:隧道

        隧道和代理十分相似,代理服务器需要客户端向代理服务器发送请求,由代理服务器转发给资源服务器。隧道服务器和代理服务器一样,也有两张网卡,分别处于客户端和资源服务端的网段中,但是和代理不同是,使用了隧道服务器之后,可以直接在客户端向资源服务器发送请求

        这个时候,在我们感觉,就好像是隐藏了隧道服务器。

三、网关

1. 交换机:

作用:将数据包发送到正确的位置。

        模拟邮递员送邮件的场景,交换机就相当于邮递员,他的任务就是根据目标中的MAC地址,找到对应的物理端口。

        一台交换机有很多端口,它们都有自己的编号,计算机的网卡通过网线连接到网口上,这个端口就是一个确定的物理位置。我们只要知道某个网卡的MAC地址在哪个端口上,就能正确地将数据包发给它。在交换机中,有一张端口和MAC地址的映射关系表(MAC地址表)。交换机会维护这张关系映射表。

        我们知道,每一包数据都会有两个MAC地址,一个是发送方的地址,称为源MAC,另一个是接收方的MAC地址,称为目标MAC。交换机收到一包数据后,首先将源MAC与接收端口绑定。然后根据目标MAC查找,从哪个目标MAC发送出去,这个时候,就会出现两种情况:

  1. 查询到了关联端口,就直接从关联端口发出,
  2. 未查询到关联端口,则会向除接收端口外的所有端口群发,这种行为称之为泛洪,如果目标MAC地址存在于这个网络中,那么它一定会接收到群发的消息。

        运行一段时间后,就可以通过MAC地址表找到网络中所有的网卡设备。

        由此可见,交换机只关心数据包中的MAC地址,而不关注IP地址。

        MAC处在第二层数据链路层,所以交换机也称为二层设备。

2. 路由器:

路由器有两种口:LAN口、WAN口。

        当我们忽略路由器的WAN口时,路由器就是一台交换机。

        加上WAN口后,就引入了网关的概念。

        为了了解网关的作用,我们需要先了解一下子网是如何划分的:

        首先,我们将子网掩码和IP按位与,当结果相同时,我们就认为它们属于一个子网。

        可以看到,其实只要掩码为1的位置上,两个IP的对应位相同,那么就属于一个子网。

        当子网掩码减小时,对应X可以各种情况可变位数就越多,那么对应的IP个数就越多。

        TCP/IP协议规定,不同子网之间是不可以直接通信的,如果需要通信,需要通过网关来转发。

        网关上有两张网卡,分别配置了属于两个子网的IP地址,可以在两个网关之间转发数据包,这样,我们就拥有了连接两个子网的网络。

        子网1中的计算机a发送数据包时,首先计算机a根据目标ip判断是否跟自己属于同一个子网如果是一个子网,则直接从网卡发出。否则,则需要将数据包的MAC地址改为网关MAC,然后发送给网关,网关拿到这一包数据后,再通过路由表查询这一包数据属于子网2,网关修改目标MAC地址为计算机b的MAC地址,修改源MAC为自己的MAC,然后从子网2的网卡发出。

过程中多次出现的:根据目标IP判断如何发送的行为,就叫做路由。

LAN口与WAN口互相发送数据,它们分别属于两个不同的子网,所以从内网访问互联网就属于跨网络行为,这时候,就需要路由器担任网关的角色了。

代理 - bilibili_http代理是什么原理?如何搭建http代理服务器

隧道 - bilibili_Shadowsocks源码解读——什么是代理?什么是隧道?

网关 - bilibili_交换机和路由器有什么区别?

以上是关于代理隧道网关的主要内容,如果未能解决你的问题,请参考以下文章

与HTTP协作的Web服务器——代理网关隧道

红蓝对抗之隧道技术第二篇(reGeorg内网穿透SSH隧道本地Socks代理SSH远程转发Earthworm Socks5代理Tunna正向代理ICMP隧道DNS隧道Frp穿透)

红蓝对抗之隧道技术第二篇(reGeorg内网穿透SSH隧道本地Socks代理SSH远程转发Earthworm Socks5代理Tunna正向代理ICMP隧道DNS隧道Frp穿透)

快代理的隧道代理使用教程

集成点:网关隧道及中继

集成点:网关隧道及中继