iptables之NAT基础

NAT
    启用网卡转发:
        将/proc/sys/net/ipv4_forward的值设置为1,永久生效编辑/etc/sysctl.conf。

    注意:linux的IP地址是属于主机而不是网卡的,所以各网卡对应的ip地址可以内部互相通信。

    假设有IP1 IP2 对应网关为GW1 GW2,GW1和GW2在一台Linux上。

    若IP1和IP2都为内网,只要设定好对应网关,就可以互相通讯,不需要nat。

    nat会话表:记录相关数据包源地址、目标地址、协议端口号等信息。

    NAT通过nat会话表和ip_conntrack完成对应的地址转换。

    SNAT
        源地址转换,目标地址不变。适用于内网多计算机通过外网地址访问外网资源。报文要在出网关时完成地址转换(POSTROUTING)。

        IP1(内网)访问IP2(外网)

        发送:数据包(IP1,IP2) --> GW1(数据包(IP1,IP2)) -->GW2(数据包(IP1,IP2) )-->SNAT(数据包(GW2,IP2) ) --> nat会话表(建立IP1 <--> GW2)--> GW2(数据包(GW2,IP2)) -->路由选择 --> IP2(数据包(GW2,IP2))

        响应:数据包(IP2,GW2)  --> 路由选择 --> GW2(数据包(IP2,GW2))  -->nat会话表 (内部自动目标地址转换)--> GW2(数据包(IP2,IP1)) --> GW1(数据包(IP2,IP1)) --> IP1(数据包(IP2,IP1))  

    DNAT
        目标地址转换,源地址不变。适用于外网用户通过网关的外网地址访问内网多个服务器。报文要在刚进入网关时完成地址转换(PREROUTING)。

        IP2(外网)访问IP1(内网)

        发送:数据包(IP2,GW2)  --> 路由选择 --> GW2(数据包(IP2,GW2))  -->DNAT(数据包(IP2,IP1) --> nat会话表(建立GW2 <--> IP1 ) --> GW2(数据包(IP2,IP1))  --> GW1(数据包(IP2,IP1) --> IP1(数据包(IP2,IP1))  

        响应:数据包(IP1,IP2) --> GW1(数据包(IP1,IP2)) -->GW2(数据包(IP1,IP2)) --> nat会话表(内部自动源地址转换) --> GW2(数据包(GW2,IP2)) --> 路由选择 --> IP2(数据包(GW2,IP2))

你可能感兴趣的:(iptables,NAT)