最近用上了VMware的ESXi,需要在ESXi里面部署多个虚拟机,这些虚拟机均需要对外提供服务,然而公网IP资源不足,于是想到了NAT,可惜的是ESXi不提供NAT这项功能,后来在网上找到了一个解决方案:利用软路由来提供NAT和防火墙。

vSwitch0 <---> VM firewall <---> vSwitch1 <---> VMs

挑选软路由需考虑以下几个方面: 1. 易用性;因为维护人员质量良莠不齐,良好的图形管理界面有利于降低学习曲线 2. 稳定性;这是生产环境首要考虑的因素,原因无需累述 3. 功能;须具备最基本的防火墙和VPN功能。

基于以上几个方面,我首先找了m0n0wall进行试用,m0n0wall 1.32基于FreeBSD的4.11内核,性能优异,稳定性高,同时拥有良好的图形界面,很容易上手,加上对硬件(虚拟机资源)的要求非常低,非常适合在ESXi环境中担任防火墙功能。此外m0n0wall也提供了PPTP和IPsec这两种VPN。由于我早对IPSec的复杂有所耳闻,加上仅用于管理的话,PPTP也足以满足要求,因此我选择了PPTP,然而未曾想到它竟是如此难缠,花了3个小时的时间愣是配不好PPTP,频繁出现619错误(我的PPTP客户端采用的是微软自带的虚拟拨号)最后才发现是因为GRE的兼容性导致。

通过google发现,并不是说防火墙开放了1723端口就意味着GRE隧道就能顺利建立,还需要额外的配置,比如说cisco的PIX。果然,我换了一个外网环境之后,619错误消失,windows可以成功地跟m0n0wall建立PPTP连接。因此,我只好忍痛割爱,放弃了m0n0wall。

接着试用了IPCop,IPCop1.9.16基于2.6.32内核,同样具有优越的性能和稳定性,也有图形界面,而且提供了OpenVPN,OpenVPN是我非常喜欢的一款VPN,它简单,部署容易,经过测试,最终采用了IPCop作为ESXi的软路由。

实际上我还考虑了smoothwall express、Debian5.08、OpenBSD,smoothwall Express的年代过于久远,Debian和OpenBSD又过于庞大,因此本次先搁置,以后有机会再另行评测。