snat和dnat实验
三台vm虚机,1台hostonly作为内网 1台hostonly+bridge 做路由 1台bridge 做外网
内网
image.png
路由
image.png
外网
image.png
1.内网节点设置默认路由为路由节点内网地址
route add default gw 192.168.183.130
实验1、内网ping外网节点172.20.45.224,此时因为路由节点未开启路由转发,ping包无法到达外网节点
实验2、路由节点开启转发echo 1 > /proc/sys/net/ipv4/ip_forward
假设从内网节点发送http请求,此时外网节点已经收到数据包
image.png
三次握手过程中传送的包里不包含数据,三次握手完毕后,客户端与服务器才正式开始传送数据。
上图中为SYN包到达外网节点,外网节点在回包时发现目的地址非同网段,因此需要交给默认网关,而默认网关的mac地址无法获得(公司开启了802.1认证),因此无法构造回包,即使获得网关mac,此回包也无法到达内网节点
实验3、路由节点开启snat,开启源地址转换
iptables -t nat -A POSTROUTING -s 192.168.183.0/24 -j SNAT --to-source 172.20.45.44
此时内网可正常访问外网服务,此时回包时,目标节点为172.20.45.44,,可直接通过arp获得路由节点172.20.45.44 mac地址
image.png
外网节点抓包
内网节点抓包
效果:实现内网可以访问外网,外网不可以访问内网
注意:snat的目的地址不是路由节点自身地址!!!!
实验4,:dnat
增加如下规则:
iptables -t nat -I PREROUTING 1 -d 172.20.45.44 -j DNAT --to-destination 192.168.183.129
此时从外网节点ping 路由节点
外网ping路由
,其实是在ping内网节点
内网节点抓包ping
内网节点抓包http
外网节点抓包http