iptables之五iptables之nat (6)

    第二种特殊请形,假设都是80,这是没问题的,当客户端到达FIP 80端口时,请求的就是,内网中有两个主机SIP1SIP2,它们两个都监听在80端口上都提供了Web服务,此时NAT是转换成SIP1还是SIP2呢?都可以,这取决于你在iptables上所设置的DNAT规则。如果我们设置的是SIP1,于是,对FIP80端口的请求都转给SIP1了,如果要设置SIP2,一样的。那可否将两个都设置上呢?这带来的结果是,如果我们请求FIP的时候,内网有两台主机,明确告诉你,我都可以转发至内网中去,SIP1也可,SIP2也可,那两个都行就意味着两个都不行。于是我们不可能说一下发给两个主机的,只能发给其中一个,这是必然的,那发给谁呢?那就需要从二者中挑一个,那怎么挑呢?轮着来,第一次给第一个,第二次给第二个,第三次给第一个,第四次给第二个;或者随机,来一个请求我随机从里边挑一个等等。不管是哪一种,像轮询的这种就把来自互联网上的100个请求将其平均的分散给两个主机了,每一个主机可能只承载一半请求。这其实就叫做负载均衡,而iptables早些时候的确是能够实现负载均衡的效果的,不过现在iptablesDNAT中的负载均衡功能被舍去了。为什么要舍去呢?因为现在在内核中有一个更强大的机制叫ipvs,这是内核中直接自带的机制,能够实现基于10种方式来挑选后端的一个主机,不光是随机或者轮流,所以他实现的功能非常强大,而这些就是所谓的lvs

    所以说,lvs在出现之前,iptables自己要在DNAT上附带负载均衡功能,但由于有了lvs后,iptables的负载均衡功能就显得弱爆了,于是就用不上了,后来就被舍弃了。

    说到这,大家想象一下,DNAT应该发生在什么位置呢?NAT只有PREROUTINGOUTROUTINGPOSTROUTING,那DNAT应该发生在什么位置呢?应该在PREROUTING,因为路由转发以后一看它访问的是FIP,是本地地址就进INPUT了,一进INPUT就到本地内部去了,再转发就来不及了,所以应该在刚进入本机在路由发生之前就应该转好。本来访问的是FIP,在路由发生之前我改成SIP,于是一路由发现这是本地内网中的主机,于是转发了,通过FORWARD就走了。不过,在学完lvs后,你就会发现这并不是绝对的,我们也有其它方式实现,不过对于iptables而言,这必然也必须要发生在PREROUTING

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zzfgsz.html