1 单服务器主机托管解决方案(Windows 2003+ISA+VMware Server)
有一些单位在电信、网通或其他运营商的机房,放置了一台服务器进行托管,这些服务器一般会获得一个公网IP,并且用“主机头名”的方法,放置多个网站或论坛。
对于大部分人来说,如果只放一个网站,那么将服务器安装个Windows Server 2003或Linux,直接放网站就可以了。对于有些用户来说,需要放置多个网站,而这些网站中,有的是一些个人网站,有的是企业的网站。当网站的“来源”不一的时候,可能有的网站代码有“漏洞”,有的可能在这样、那样的问题,这样,如果所有的网站还像以前一样,都放在同一个服务器中,就可能被***通过“跨站***”的方式,修改同一服务器上的其他网站,甚至***整个系统。
为了解决这个问题,我曾经提出过一个解决方案,主机安装32位Windows Server 2003企业版(最多可以支持8GB内存),在主机上安装ISA Server 2006标准版与VMware Server 1.x版本,并在VMware Server中安装多个虚拟机。将网站分类,将不太重要的网站放在一个虚拟机中,将重新的网站单独放在别的虚拟机中,并且用ISA Server发布VMware Server虚拟机中的网站,这样达到了使用1台服务器、1个公网地址而实现了需要多台托管服务器才能解决的问题,并且提高了网站的安全性。这个方案,在很长的一段时间内使用,证明是非常成功的。
2 以前方案存在的问题
但现在计算机的发展越来越快,而用户需要放置的网站越来越多,这时候就需要更多的虚拟机,并且需要虚拟机具有更高的性能。但使用ISA Server加VMware Server的方案,有个“先天不足”的地方就是,当时ISA Server只能安装在32位的Windows Server 2003中,而32位的Windows Server 2003,最多只能使用8GB的内存,这是其一;其二,VMware Server虚拟机提供的性能,并不能让人满意(VMware ESX Server提供的虚拟机性能是很好的)。
在几年前,一个朋友的服务器(8GB内存、1个4核CPU、5块320GB硬盘做的RAID 5)托管在电信机房,使用的就是我提供的Windows Server 2003+ISA Server+ VMware Server的解决方案。随着这几年来服务器中网站的数量增加,网站访问量的增大,感觉到这种方案已经不适合现在的需求。
3 Windows Server 2008+TMG2010+Hyper-V Server不能共存
当Windows Server 2008发布的时候,其集成的Hyper-V Server虚拟机,经过测试,性能可以满足要求。同时Windows Server 2008可以支持更多的内存。但ISA Server 2006并不能在Windows Server 2008下运行,只能等ISA Server的下一个版本。虽然Windows Server 2008早已发布,但ISA Server 2006的下一个版本TMG2008直到2009年底才发布,发布时名称也改为了TMG2010,这个产品必须要64位的硬件、Windows Server 2008操作系统的支持。
那这样好了,那是不是可以借鉴Windows Server 2003+ISA Server 2006+VMware Server 1.x的经验呢?主机安装Windows Server 2008 R2+TMG2010+Hyper-V Server,让Hyper-V Server实现虚拟机用TMG2010转发呢?想法是美好的,但现实是残酷的,经过我的实验,这个方法是完全行不通的。
4 解决思路
现在来看条件与需求:单台托管的高性能物理服务器,使用Hyper-V虚拟机实现多台服务器。需要让每台虚拟机对外提供服务并能让用户远程管理。
要实现这个功能,简单来说,有两种方法:多IP地址方法与单IP地址方法。
4.1 多IP地址实现方法
主机安装Windows Server 2008 R2,并启用Hyper-V Server功能,创建多个虚拟机,每个虚拟使用一个公网的IP地址,每个用户可以使用“远程桌面”连接到其所在的虚拟机。这样可以保证每个虚拟机的独立性,而Hyper-V Server虚拟机的性能也足以满足需要。
例如:托管的服务器有1块网卡,具有一个公网地址。使用Hyper-V可以创建多个虚拟机,每个虚拟机给一个或多个用户使用。而每个用户主要是在托管的服务器上提供网站服务。而在只有一个公网IP地址的前提下,“路由和远程访问服务”是不能将网站服务所需要的默认端口TCP的80同时转发到多个不同的内网地址的。这时候,就需要借助域名服务中的URL转发功能。由于这个思路比较简单,所以不展开介绍。
4.2 单IP地址端口法
但是,IP地址虽然“不值钱”,托管服务器的人也“不差钱”,但IP地址并不是想要多少就有多少的,所以,许多时候只能使用1个公网IP地址。
要想使用1个公网地址,而又在此公网地址“之后”有多个虚拟机,每个虚拟机中又有多个网站,那必须需要一个类似ISA Server(现在称作TMG)的程序,进行“主机头名”或者“TCP端口”转发,才能实现多网站。而Windows Server 2003、Windows Server 2008中的“路由与远程访问服务”是可以实现TCP端口的转发功能的。
但是,虽然使用1个公网IP+多TCP端口实现多个网站,但采用“端口法”的网站,人们在访问的时候,还要键入相应的端口才能访问,例如http://www.wangchunhai.cn:8001等,这样一来,不利于网站的推广,也不利于用户记住网站。对于这个问题,可以使用某些商业DNS的URL转发功能解决。例如,对于刚刚提到的网站http://www.wangchunhai.cn:8001,完全可以将对www.wangchunhai.cn站点的访问,通过URL转发功能,转发到http://www.wangchunhai.cn:8001,目前许多DNS提供了这个功能。
如果你的网站没有进行备案,目前许多DNS服务器是不允许使用URL转发的,这时候,就可以由IIS中的“网站重定向(HTTP跳转)”功能,将对www.wangchunhai.cn的访问转到www.wangchunhai.cn:8001的网站。
下面将介绍这个思路的实现的步骤。
5 单公网IP地址、单Windows Server 2008托管服务器、多虚拟机解决方案
Windows Server 2008集成了Hyper-V Server与“路由和远程访问服务”,借助于这两个服务,可以将托管在电信机房的一台服务器,当成多台服务器使用,并对外提供服务。关键点如下:
ü 使用Hyper-V Server创建多个虚拟机,并让虚拟机使用“虚拟网络”
ü 使用“路由和远程访问服务”,采用“端口映射”功能,将主机的(外网)端口转发到需要的虚拟机中。
5.1 案例描述
A企业,在电信机房托管1台服务器,获得公网地址一个,假设该地址为123.182.242.12;在这台服务器上,创建了两个虚拟机,分别给B、C两个用户使用。
B用户,获得的虚拟机的IP地址是192.168.10.10。B想要在这个虚拟机中配置三个网站www.aa.com、www.a2.net、www.a3.cc;
C用户,获得的虚拟机的IP地址是192.168.10.11。B想要在这个虚拟机中配置2个网站www.ccc.com、www.ccd.net。
则A可以将TCP的801~813等端口映射给192.168.10.10的虚拟机使用,还可以将TCP的800映射给A的“远程桌面”所使用的TCP的3389端口,用于远程桌面管理。在实际分配中,还可以多映射一些端口,将来为用户B添加新网站使用,在本例中,映射了TCP的800~819端口给虚拟机B;将TCP的820~829映射给192.168.10.11的虚拟机,然后再通过相应的URL转发功能,将这些网站的访问重定向到真正的网站地址。如下表所示。
用户
|
网站
|
IP:端口
|
虚拟机IP
|
外网端口
|
用户B
|
www.aa.com
|
192.168.10.10:801
|
VM1,192.168.10.10
|
801~819→192.168.10.10
|
www.a2.net
|
192.168.10.10:802
|
|||
www.a3.cc
|
192.168.10.10:803
|
|||
用户B远程管理
|
3389
|
外网800→10.10:3389
|
||
用户C
|
www.ccc.com
|
192.168.10.11:821
|
192.168.10.11
|
821~829→192.168.10.11
|
www.ccd.net
|
192.168.10.11:822
|
|||
用户C的远程管理
|
3389
|
外网820→10.11:3389
|
下面介绍实现的主要步骤。
5.2 Hyper-V Server处设置
管理员A登录到托管的主机(安装的Windows Server 2008 X64+Hyper-V Server),进入“Hyper-V管理程序”,进行如下的操作:
(1)在Hyper-V中添加名为“内部网络”的虚拟网络,该虚拟网络的“连接类型”为“仅内部”,如图1所示。
图1 添加“仅内部”网络的虚拟网卡
添加之后,打开主机的“网络连接”,设置“内部网络”虚拟网卡的IP为192.168.10.1。
(2)为B、C用户创建的两台虚拟机,分配虚拟网卡时,使用图1中添加的“内部网络”的虚拟网卡,如图2所示。
图2 为虚拟机分配内部网卡
(3)进入B用户的虚拟机,设置IP地址为192.168.10.10、网关地址为192.168.10.1的IP地址,如图3所示。同样,对于C用户的虚拟机,设置IP地址为192.168.10.11,网关地址为192.168.10.1。
图3 为用户虚拟机设置IP地址、网关地址
(4)在Windows Server 2008主机上,添加“路由和远程访问服务”(如图4所示),此时主机外网IP是123.182.242.12;内网IP地址是192.168.10.1。
图4 添加“路由和远程访问服务”
(5)参照表1的要求,映射TCP的800~819到192.168.10.10的IP地址,映射TCP的820~829到192.168.10.11的IP地址。在映射的时候,“传入端口”与“传出端口”可以一样,也可以不一样。这可以根据自己的爱好,或者规定好的设置。其中,“传入端口”指的是公网的IP地址所使用的端口,是对Internet用户所公布的、允许Internet用户访问的端口,在此就是表1所规划的TCP的800~819;而“传出端口”指映射到的“专用地址”中的服务端口。例如,将TCP的800映射到192.168.10.10的3389端口(如图5所示),对于Internet中的用户来说,可以通过使用“远程桌面连接程序”连接“公网地址”与800端口,连接到B虚拟机的远程桌面。再举一例,假设将TCP的801映射到192.168.10.10的801,则可以在B的虚拟机中,创建IIS网站,该网站保存www.aa.com的站点内容,该网站使用TCP的801端口,而不是使用TCP的80端口。这样,Internet的用户,可以通过访问http:// 123.182.242.12:801访问www.aa.com的内容。
图5 映射端口到指定的内网计算机
5.3 用户B的操作
用户B,使用远程桌面,登录123.182.242.12:800到虚拟机中,添加IIS服务,创建三个网站,其中www.aa.com网站使用TCP的801端口(如图6所示),www.a2.net使用TCP的802端口,www.a3.cc网站使用TCP的803端口。这样就达到了创建多个网站的目的。
图6 使用TCP的801端口创建www.aa.com的网站
而用户C的操作与此类似:登录123.182.242.12:820到虚拟机中,在IIS中,创建两个网站,www.ccc.com网站使用TCP的821端口,www.ccd.net使用TCP的822端口。
5.4 远程测试
登录到远程的一台服务器,或者让Internet的用户,在IE中浏览http://123.182.242.12:801打开B虚拟机中的www.aa.com的网站,如图7所示。
图7 在外网打开虚拟机B的网站
5.5 用户DNS管理处
如果用户认为,http://123.182.242.12:801访问www.aa.com不容易“记住”,则可以采用DNS提供的“URL转发申请”功能,将用户对www.aa.com的访问,转到http://www.aa.com:801,这样比较符合大家的习惯。
不同的域名服务商,提供的URL转发功能不太一样,但都是在其提供的“DNS管理处”进行的设置,如图8、图9所示,这是将对rms.wangchunhai.cn的访问转发到http://rms.heuet.org:8001。
图8 URL转发申请
图9 URL转发设置
【说明】当然在提供这些功能的时候,需要在DNS管理处,将www.aa.com的A记录解析为托管的Windows Server 2008主机的公网的IP地址,在本例中为123.182.242.12。
5.6 使用IIS转发
如果DNS不支持“URL转发”的功能,或者你的域名没有通过“备案”,则不能提供URL转发申请,这时候,就可以利用IIS的“HTTP转发”功能,将对http://www.aa.com的访问转发到http://www.aa.com:801,此时,需要进行如下的操作(需要管理员A进行设置)。
(1)管理员A在Windows Server 2008主机上安装“Internet信息服务”,在安装的时候,要安装“HTTP重定向”功能(如图10所示)以及安装“IIS管理工具”。
图10 安装IIS并安装HTTP重定向功能
(2)在主机上,创建一个文件夹,并且在该文件夹创建多个目录,为了方便日后管理,目录的名称要与B、C用户的网站的名称相同或相似,例如,在D盘site目录中创建www.aa.com、www.aa.net目录。
(3)进入“Internet信息服务器”中,创建网站,其主机头为www.aa.com,目录为D盘对应的文件夹,本例为d:\site\www.aa.com,如图12所示。
图12 创建网站
(4)然后在“Internet信息服务管理器”中,选择新创建的网站www.aa.com,在右侧的“功能视图”中双击“HTTP重定向”, 选中“将请求重定向到此目标”,并且键入重定向后的网址http://www.aa.com:801,并且在“状态代码”下拉列表中选择“永久(301)”,然后单击右侧的“应用”链接,让设置生效,如图13所示。
图13 重定向到真正的网站
(5)在远程计算机上,在浏览器中键入www.aa.com的时候,会被定向到http://www.aa.com:801,测试完成,如图14所示。
图14 在远程主机上测试
【说明】因为aa.com是本次实验的域名,所以在你真正测试的时候,需要修改远程测试主机与Windows Server 2008本地主机的hosts文件,添加到www.aa.com的解析到正确的公网地址:
123.182.242.12 www.aa.com
这样才能完成整个测试。
而对于其他的需要转发的网站,在主机的“Internet信息服务管理器”中,创建每一个的“HTTP重定向”,这些就不一一介绍了。