三台vm虚机,1台hostonly作为内网 1台hostonly+bridge 做路由 1台bridge 做外网
内网
![](https://img.haomeiwen.com/i12437179/e281509d41a90746.png)
路由
![](https://img.haomeiwen.com/i12437179/25b62a164e06c458.png)
外网
![](https://img.haomeiwen.com/i12437179/a80f64e79c04cce9.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请求,此时外网节点已经收到数据包
![](https://img.haomeiwen.com/i12437179/2ef58bbb04ba2a86.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地址
![](https://img.haomeiwen.com/i12437179/84bdd0d8124f8374.png)
![](https://img.haomeiwen.com/i12437179/76ebca95ad33b111.png)
![](https://img.haomeiwen.com/i12437179/16b9635d9a975d77.png)
效果:实现内网可以访问外网,外网不可以访问内网
注意:snat的目的地址不是路由节点自身地址!!!!
实验4,:dnat
增加如下规则:
iptables -t nat -I PREROUTING 1 -d 172.20.45.44 -j DNAT --to-destination 192.168.183.129
此时从外网节点ping 路由节点
![](https://img.haomeiwen.com/i12437179/868dc9d8247e0972.png)
,其实是在ping内网节点
![](https://img.haomeiwen.com/i12437179/b8ab408b47ae498d.png)
![](https://img.haomeiwen.com/i12437179/e8bab312e97aacaa.png)
![](https://img.haomeiwen.com/i12437179/a9670fe8643ae5e9.png)
网友评论