今天要讲的就是传统的SNAT,也就是源地址转换,可能有的同学又要问了,源地址转换跟IPSEC VPN又有什么关系?他俩一点边都不沾呀,各位看官别着急,请看下面的拓扑
怎么样,看到这是不是发现什么不一样的了,数据包从总部到分支用了4步,而从分支到总部却只用了3步,这样是不是来回路径就不一致了?
而解决方法又很多种,并不是只有NAT能够解决,而且使用NAT的解决方法也不是适用于所有场景,我只是将影响范围最小,配置成本最低的方法给大家分享出来而已
首先,我们分析一下数据包从总部走向分支的过程,为何回包会直接从总部的AF回给PC1,图上也说的很清楚了, AF和PC1是同一网段的地址,那既然是同一网段的地址,肯定就天大地大,直连路由最大,所以不管你路由如何写,直连路由永远是第一位,它不会再去找网关去转发数据了,而是直接向网络广播PC1的地址,将数据包直接转发给PC1,而前面提到的NAT技术恰巧可以很好的解决这一问题,至于如何解决,各位先思考思考。
首先,要解决问题,就要在出问题的地方下功夫,这个问题点出在哪呢,毫无疑问,就是总部的路由器上,数据包发出的时候经过了它,而回包时却没有经过,那我们是不是可以想个办法让回来的数据过一下它?
那具体要怎么操作呢?想想上面的图,数据包发出的源地址是哪个,目的地址是哪个,回包的源地址和目的地址又是什么?
是不是想明白了,数据包不管是发出还是回包,是不是都没有经过地址转换?也就是说,数据包的源跟目的都是一个,而且发包和回包都是可以到达总部/分支PC的,这也就反向证明了路由是没有问题的,那既然路由没有问题,我们是不是要考虑一下怎么才能让回来的数据过一下路由器呢?
其实很简单,就是利用路由器的SNAT技术,做一条源地址转换,将总部PC的地址转换为路由器的地址,这样两端AF和分支PC收到的数据包的源地址就是路由器的IP地址了,路由器收到数据包后再进行拆包,将NAT协议剥离后转发给真实PC也就是PC1,这不就大功告成了吗,是不是很简单?
可是只是总部访问分支不行呀,分支也是要访问总部的呀,那又得分析数据包了,分支到总部的数据显而易见,数据包发出只用了3步,而回包却用了4步,结合上面总部访问分支的案例,我们是不是要考虑一下让总部给分支的回包也走3步,当然这个问题就不能再在总部路由器上配置了,因为数据包只要到路由器就一定是4步了,所以咱们得给它提前就把地址转换掉,那要在哪台设备上做呢?肯定也不能是分支的AF,因为太早了,数据还没有经过隧道呢,这时候做了也没啥用您说是不是,所以只能在总部AF上做一条SNAT策略来保证回包的路径。
经过上面的分析,各位是不是发现一点,就是访问方向不同,那么实现功能的设备也得跟着变,所以各位如果碰到此类问题的话不妨沉下心来,将拓扑图画出来,通过绘制数据的来回路径来查看一下是否存在以上问题?
当然,最早的时候也提到了,解决方案不止这一种,我所知道的其实还有两种方案
第一种自然是将总部AF的地址与总部PC分离,使其不在一个网段,自然也就不会出现这种问题了,而且大型公司都有严格的网络要求,一般不会出现VPN设备与内网PC处于同一网段的。
而第二种则是在内网PC上写一条永久静态路由,使其到分支PC的路由的网关指向总部AF,这样也可以保证数据包来回路径的一致性
Windows添加永久静态路由的命令(需要管理员身份)
route –p add 192.168.2.0 mask 255.255.255.0 192.168.1.2
Linux添加永久静态路由的命令
route add –net 192.168.2.0 netmask 255.255.255.0 gw 192.168.1.2 –p
MACOS添加静态路由的命令(重启失效)
sudo route –n add –net 192.168.2.0 –netmask 255.255.255.0 192.168.1.2
上面三条命令是针对不同的系统所使用的同的命令,各位根据实际情况进行修改即可
好了,接下来说一下这三种方法的优缺点
1. NAT方式:
优点:配置简单方便,工作量小
缺点:比较吃技术能力,初级工程师可能无法理解,且无法满足所有场景,如需要校验源地址或限制源地址访问的场景无法满足
2. 更改网络部署方式
优点:一劳永逸,适用所有场景
缺点:涉及改动点较大,需要更改网络或网线,严重的可能造成网络故障
3. 系统添加路由方式
优点:适用所有场景,不影响网络
缺点:现场有几台PC就需要写几条路由,枯燥乏味,而且如果客户后期加点则还需再新加机器上增加路由,无灵活性,不推荐
综上所述,可以根据实际情况选择第1种和第2种方式,至于第3种方式,我个人及其不推荐此种场景,后期运维难度及其复杂,请各位慎重考虑。
好了,今天的分享就到这里,各位走过路过不要错过,点个赞再走呗~