场景:云上的vm主机用户作为客户端访问外网服务器
vm(client)—>SNAT(将数据包中的内网源IP转换为外网IP)—>Internet(服务器)—>SNAT(将数据包内的目的IP转换为内网IP)—>vm(client)
场景:云上的VM主机作为服务器端为外网提供服务
Internet(client用户)—>DNAT(将数据包中的目的公网IP转换为目的内网IP)—>VM(server)—>DNAT(将数据包中的源内网IP转换为外网IP)—>Internet(client用户)
SNAT: Source Network Address Translation,是修改网络包源ip地址的。
DNAT: Destination Network Address Translation,是修改网络包目的ip地址的。
明白了这些后,要再知道使用它们的原因,也就是你什么时候要修改源ip地址,什么时候修改目的ip地址。我拿iptables举个例子。
修改源ip地址的目的一般都是为了让这个包能再回到自己这里,所以在iptables中,SNAT是在出口,也即POSTROUTING链发挥作用。
修改目的ip地址的原因一般就是为了改变包发送的目的地,让包走出去,而不是留下来,所以在iptables中,DNAT是在入口,也即PREROUTING链中发挥作用,以便让包进入FORWARD表。
SNAT和DNAT的区别