iptables之五iptables之nat (4)

    而对于iptables来讲,要想实现SNAT功能,只需要在NAT表上添加一条规则即可。但是作为源地址转换,应该在iptables上的nat表上的哪个链上做呢?试想一种场景,当请求报文刚刚到达时,这叫PREROUTING,但是刚刚到达时我们不知道它到底是访问本机呢还是通过本地转发呢,如果对方访问的是本机没必要做地址转换,因此只有经由本机转发确定时才能做地址转换。到本机的就没必要做地址转换了,因为彼此之间能够直接通信。因此需要在POSTROUTING链上做,只有我们确定了它要转发而且也确定了它要通过哪一块网卡出去 ,我们将其转换成那个网卡地址,比如有三块网卡,他通过第二块网卡转发所以我们应该转换为第二块网卡的地址。所以我们也只有路由完成之后马上离开本机已经确定了从哪个网卡出去我们才应该知道才能确切的了解应该转发为哪一个地址的,因此源地址转发要在POSTROUTING上实现,这是我们SNAT实现的位置。

DNAT

   

iptables之五iptables之nat

  那什么是目标地址转换?为什么要用到目标地址转换呢?

    仍然是那种认证场景,我们公网上有很多主机,假设说内网中有一台主机,这台主机它提供了Web服务或其它服务,反正是它是提供能够让别人请求了的服务了的。但是由于SIP是一个私网地址,那么来自于互联网上的任何主机的请求就不能送达给SIP了,它也跟就收不到。那于是,我们就对外宣称,我们在FIP上有这么一个服务,仍然以Web服务为例,于是我们就在FIP上说我监听了80端口提供了Web服务,所以客户端的CIP访问时它的目标访问应该是FIP,因此通过路由器转发IP地址是公网地址没问题,层层转发送给了 FIP,但是FIP未提供这个服务,只是宣称说它有,于是就来访问了,到这以后我们本机上假设压根就没有任何一个进程监听在80上,那这时候怎么办呢?

    我们可以把来自于外网主机的所有请求都将其统统转给内网中的Server主机即可,那当请求处于公网路由器时,其源地址是CIP目标地址是FIP,于是NAT Server做完地址转换后就扔到内网中了,转发后的结果中源地址是CIP目标地址是SIP,所以我们只改变了目标地址再请求返回。因此,SIP收到请求后发现这的确是访问自己的,那接下来它处理完后需要响应,响应的时候发现CIP压根就不是本地网络中的地址,那就要交给自己所指向的网关即GIPGIP发现需要到互联网上响应给外网中的CIP主机的,但是我们又说过其实CIP主机访问的是FIPCIP压根就没访问SIPNAT Server必须要知道这种情况,那它还要将这个响应报文通过查找表后将这个地址改回去,那响应时源地址是SIP目标地址是CIP,但如果就这样发送过去了,CIP可能会觉得莫名其妙,因为它访问的是FIP不是SIP,那它能够拒收的。因此我们不能任由这种情况发生,NAT Server在这个报文扔回CIP之前要做地址转换,目标地址仍然为CIP源地址为FIP,我们发现此处改的是源地址,所以我们说任何一个目标地址转换都必然对应一个源地址转换。只不过后一段是由Server自动查找NAT会话表完成的。这种就叫做目标地址转换,而目标地址转换就是我们的服务器谎称或宣称自己拥有某个服务但是事实上并没有,它将其转给内网中的主机由内网中的主机进行响应了。像这种就叫做目标地址转换,目标地址转换的主要作用在于把内网中的主机映射进公网中能够让公网上的客户端来访问的

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

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