网络操作系统VyOS应用实践(四)

前言

本文会紧接着《网络操作系统VyOS应用实践(三)》进一步在模拟环境中体验VyOS的功能。

NAT

NAT即网络地址转换,最常见的就是各种虚拟机工具的NAT模式,让虚拟机以宿主的网络地址与外网通讯,内网主机发送数据时,内网的地址将会被转换为运行NAT服务的主机的地址,内网主机都以该主机地址为代表与外界沟通。

原理的确很简单,接下来将会通过实验,操作VyOS进行NAT实验。

下图为本实验的基本拓扑:

SNAT

SNAT是把内网的地址转换为NAT服务的宿主的地址进行对外访问,在实际运作时,SNAT修改离开internal的包的源地址,VyOS支持两种配置方式,一种是用出口接口(上图VyOS连接external的接口)上的地址作为全局的外网地址,另一种方式是手动设置,可以设置一个范围,出口时用其中一个地址。

在DHCP环境下,SNAT应该选择前者,即设置为MASQUERADE。

下面的实验会使用MASQUERADE方式,设置完毕后,会通过发送ICMP包,然后通过wireshark抓包验证SNAT的配置。

在VMware上配置好4个虚拟机后,登陆VyOS开始设置:

一般,配置SNAT需要知道以下内容(或者说设置SNAT的步骤):

1.我们想转换的内网IP
2.使用哪个接口作为出口接口
3.使用哪个外网地址作为转换目标

对于上面的问题,本实验中的答案是:

1.需要转换的源地址为192.168.225.3与192.168.225.4
2.使用VyOS的eth1接口作为出口接口(我的设置中,eth1连接到192.168.10.3/24)
3.使用MASQUERADE

——————————分隔线——————————————

下面是实验的具体操作:

先为vm1设置一个rule(和防火墙类似,以rule定义规则):

再用类似的方法为vm2设置rule:

commit并且保存,这样一来就完成了SNAT的设置,接着,我们通过wireshark进行验证,证明SNAT起了作用:

这幅图是启用了SNAT的单个ICMP包的抓包结果:

上图左边的是internal的抓包结果,右边的是external的结果。

可以看到,由vm1发出的ICMP包,一开始的source是192.168.225.3,然后在external区域抓到的包是已经被修改过source的包,因为使用了MASQUERADE,所以external中抓到的包的source是192.168.10.2,即vyos的eth1接口。然后在返回的包中(即右图第二行),destination是192.168.10.2而不是192.168.225.3,最后通过转换,internal区域中抓到的包的destination是192.168.225.3。

下图没有启用SNAT,vyos仅仅起到路由的作用:

可以看到在external区域抓到的包的source(右图第一行)还是192.168.225.3,而返回的包中,destination也还是192.168.225.3。这就是启用SNAT和不启用SNAT的区别。

关于设置NAT时的注意事项:
如果内部网络有很多节点需要使用SNAT,VyOS官方建议每256个节点就使用一个外部IP地址进行NAT。如果有8000个节点,那么就需要32个外部IP地址才够。

另外,VyOS支持所谓的NAT Reflection(发夹转换),这里只简单地引用官方的例子:

关于什么是NAT Reflection,读者可以看看这篇文章:www.nycnetworkers.com/real-world/nat-reflectionnat-loopbacknat-hairpinning/
请自备梯子。

DNAT

DNAT主要是用于隐藏内部网络的机器的真实地址,DNAT的原理是修改目标地址和端口。外部节点访问内部节点时,目标地址是运行NAT服务的节点的外网地址,DNAT接受数据后,会修改数据包的目标地址,改为内网节点的地址。

接下来的实验目标:
假设在我的internal网络里有一个节点运行xmlrpc服务,但为了安全,我不想直接把该节点暴露给external区域,此时,可以使用防火墙加DNAT实现我的目的。

思路:
vm2运行xmlrpc服务,vm3运行客户端。使用防火墙,限制vm3只能通过端口1800访问XMLRPC服务器,同时启用DNAT,隐藏vm2的地址,只暴露vyos的eth1接口的地址。

首先,我们先进行防火墙设置。先划分区域,创建internal和external区域:

然后把eth0划分给区域IN,eth1划分给EX:

然后开始根据目的设置防火墙规则,这里,默认的规则为reject:

再设置一个返回数据的规则:

应用两组规则:

xmlrpc客户端可以正确运作:

计数器也有所变化:

上面的实验内容仅仅满足了安全性,只允许来自192.168.10.3这个可信节点的客户端访问1800端口,但是连接的时候还是直接用vm2的真实地址的,我们还需要设置DNAT进行地址隐藏。

————————-分隔线————————————-

然后进行DNAT的设置。

在vyos中,设置DNAT和SNAT的方法和步骤略有不同,其步骤一般是:
1.知道数据会从哪个接口进来
2.要转发的是什么协议,端口号是什么
3.要转发的目标内网节点地址

对于上面的问题,本实验中的答案是:
1.从eth1接口进入
2.端口为1800,TCP协议
3.目标地址为vm2的地址,即192.168.225.4

登陆vyos进行DNAT的设置:

现在,登入vm3,改变serverproxy的地址,调用XMLRPC并抓包:

上图,我使用了vyos暴露在外的192.168.10.2这个地址,xmlrpc服务也成功地返回了结果。

检查抓包结果:

我们先分析右图,第4行,源地址为192.168.10.3,目标地址为192.168.10.2,可以看到客户端先把数据发到vyos的eth1接口上,然后看左图第四行,现在,destination已经变成了192.168.225.4。

左图第6行开始返回数据,source是vm2的地址,然而到了右图,source已经不再是192.168.225.4而是192.168.10.2。可以看到,DNAT的确是起到了隐藏vm2的真实地址的作用,那么一来,最初的目的就达到了。

可以看到,DNAT其实有点接近防火墙的功能,不是单单地进行地址转换,还对协议和端口进行了限制。

还可以基于DNAT和SNAT设置一对一NAT,一对一NAT必须有一个外部IP去对应内部IP,这里就简单地引用官方的例子提供给读者参考:

上面的例子就是使用了1.2.3.4/24这个外部IP地址对应192.168.1.1/24这个内部地址,一般情况下,还是使用一对多的NAT。

QoS

VyOS支持控制指定网络接口的网速,我们可以通过配置Traffic Policy以进行QoS。

在没有设置QoS之前,通过iperf工具,我测试了vm3与vm2之间的网络速度:

从图中可以看到,一般情况下,VMware的vmnet间的传输速度大概是773Mbits/s,现在尝试对连接vm3的eth1接口进行限速到100Mbits/s。

其实这个设置和进行其他设置类似,都是先创建规则或者分组,然后应用到具体的接口之类:

这个策略是应用到eth1的出口网速的:

把这个策略应用到eth1上:

验证这个QoS策略是否生效。需要在vm3上启动iperf作为server,vm2上启动iperf作为client,用UDP测速,验证QoS策略是否生效:

上图是server端反馈的结果,在87.5Mbits/s左右,如果你设置为50Mbits,实际测速大概也是47Mbits左右,比设置的值小一点。

对于流量限制,VyOS还支持多种演算法,读者可以参考这里:http://vyos.net/wiki/QoS

关于演算法,可以看看这个:http://rambo.blog.ustc.edu.cn/?p=238

结语

本文通过实验,介绍了VyOS的NAT的配置方式并对SNAT和DNAT的处理流程进行分析,最后介绍了VyOS的QoS设置。望能为各位VyOS研究者或潜在的使用者提供帮助。在后面的文章还会介绍它的其他功能。本人水平有限,如有缺点和漏洞,还请各位读者指出。

参考资料:
http://blog.itpub.net/29867/viewspace-702622/

http://www.linuxidc.com/Linux/2013-08/88536p2.htm

http://blog.csdn.net/ustcgy/article/details/5655050

http://vyos.net/wiki/User_Guide#NAT

http://rambo.blog.ustc.edu.cn/?p=238

https://www.slyar.com/blog/iperf-measure-network-performance.html

作者简介:
何智刚,2015至今,暨南大学经济统计学专业16届新生,主要研究云计算、SDN、机器学习,对各种领域都有所涉猎,目标是迈向full stack。
qq:1097225749
github:https://github.com/Hochikong


  • 本站原创文章仅代表作者观点,不代表SDNLAB立场。所有原创内容版权均属SDNLAB,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用,转载须注明来自 SDNLAB并附上本文链接。 本站中所有编译类文章仅用于学习和交流目的,编译工作遵照 CC 协议,如果有侵犯到您权益的地方,请及时联系我们。
  • 本文链接https://www.sdnlab.com/17348.html
分享到:
相关文章
条评论

登录后才可以评论

Hochikong 发表于16-07-08
22