兩種NAT實(shí)現(xiàn)方法
雖然在VPN環(huán)境下使用NAT很困難,但有大量應(yīng)用的確需要在VPN系統(tǒng)中使用NAT,現(xiàn)有兩種方法供廣大網(wǎng)絡(luò)管理員參考。一是在路由器之外引入專用的NAT設(shè)備,如防火墻。由于是在路由器之外進(jìn)行NAT轉(zhuǎn)換,因而避免了上述的NAT/VPN難題。另一種方法則是采用Cisco的SLB技術(shù)。Server Load Balancing (SLB)是Cisco公司基于Cisco IOS的提供服務(wù)器負(fù)載均衡的解決方案,該方案允許管理員定義一個(gè)虛擬服務(wù)器來代表一組真實(shí)服務(wù)器。當(dāng)一個(gè)客戶端發(fā)起一個(gè)與虛擬服務(wù)器的連接時(shí),IOS的SLB會(huì)根據(jù)配置的算法連接到某個(gè)真實(shí)服務(wù)器上去,從而實(shí)現(xiàn)負(fù)載均衡,當(dāng)然也就實(shí)現(xiàn)了NAT。由于SLB是網(wǎng)絡(luò)設(shè)備本身的功能,與具體接口無關(guān),故在VPN環(huán)境下使用SLB沒有問題。不過目前SLB技術(shù)只能用于Cisco 6000系列交換機(jī)和Cisco 7000系列路由器。
具體實(shí)現(xiàn)
在實(shí)現(xiàn)中,我們把SLB方案作為防火墻方案的替代方案,即當(dāng)系統(tǒng)中除去防火墻時(shí)(如因故障等原因),通過在中心系統(tǒng)設(shè)定使用SLB方案,而使客戶端不需要進(jìn)行任何改動(dòng)。這種替代方案對(duì)網(wǎng)絡(luò)系統(tǒng)的設(shè)計(jì)提出了更高的要求。
1. 采用防火墻實(shí)現(xiàn)NAT
本系統(tǒng)使用VPDN建立企業(yè)專用網(wǎng),Cisco 7120作為VPDN的LNS,系統(tǒng)采用若干個(gè)服務(wù)器處理遠(yuǎn)程客戶端請(qǐng)求。為了在網(wǎng)絡(luò)上隱藏內(nèi)部地址,該系統(tǒng)采用了一個(gè)Netscreen硬件防火墻用于實(shí)現(xiàn)NAT和負(fù)載均衡,系統(tǒng)如圖1所示(圖中地址僅供參考,非系統(tǒng)真實(shí)地址)。
遠(yuǎn)程客戶端采用虛擬地址192.168.1.10與中心系統(tǒng)的服務(wù)器發(fā)起TCP連接。該連接需經(jīng)過防火墻,防火墻根據(jù)預(yù)設(shè)的負(fù)載均衡算法將虛擬地址變換為某個(gè)服務(wù)器的真實(shí)地址,從而實(shí)現(xiàn)了NAT以及負(fù)載均衡。
防火墻的設(shè)置步驟如下:
使用瀏覽器,用管理員口令進(jìn)入防火墻管理界面,先在Interface菜單中設(shè)定Trusted和Untrusted接口的IP地址。在Service菜單中定義服務(wù)器提供的服務(wù),系統(tǒng)服務(wù)器在8000端口提供自定義TCP服務(wù),故應(yīng)在Service/Custom欄中增加一個(gè)service SVC8000,Dst Port 選擇為8000,Transport為TCP。為了限制客戶端的源地址,在Address/Untrusted菜單中增加名為SRC172的172.16.0.0/24地址段。在Virtual IP菜單設(shè)置Virtual IP1,將Server Virtual IP 設(shè)為192.168.1.10,注意Virtual IP必須和Untrusted端口位于同一網(wǎng)段,Service選擇為SVC8000,Virtual Port為8000,在Server Pool中將10.1.1.1等幾個(gè)真實(shí)服務(wù)器地址加入,Load Balance算法可選擇Least Conns,并可根據(jù)各服務(wù)器的處理能力選擇各服務(wù)器的權(quán)重值。在Policy菜單中設(shè)置服務(wù)SVC8000的訪問策略,在Policy/Incoming建立一個(gè)新策略,設(shè)Service為SVC8000,Destination為VIP(192.168.1.10), 設(shè)Source為SRC172用以限制客戶端的地址。
設(shè)置完成后,客戶端即可先撥號(hào)建立客戶端與路由器的連接。然后使用192.168.1.10:8000與中心建立TCP Socket連接,經(jīng)過防火墻負(fù)載均衡,即可與某一個(gè)服務(wù)器建立連接。
2. 采用SLB實(shí)現(xiàn)NAT
在上述方案中,如果除去防火墻,由于遠(yuǎn)端客戶數(shù)量眾多,而且也不方便做任何參數(shù)修改,就需要由路由器來實(shí)現(xiàn)NAT和負(fù)載均衡。由于在前文中所述原因,路由器無法實(shí)現(xiàn)VPN下的NAT。本文系統(tǒng)使用的是Cisco7000系列路由器,可以使用SLB功能來替代防火墻。網(wǎng)絡(luò)結(jié)構(gòu)修改如圖2所示。
為了保證在不改動(dòng)服務(wù)器IP地址和客戶端目標(biāo)地址的條件下保持通信暢通,路由器的SLB功能需要負(fù)責(zé)NAT和負(fù)載均衡。具體實(shí)施如下:
路由器的以太網(wǎng)口連接到可信任的內(nèi)部網(wǎng),與服務(wù)器處于相同網(wǎng)段,并將以太網(wǎng)地址改為原防火墻Trusted口的地址。路由器應(yīng)啟動(dòng)SLB功能,配置如下:
!
ip slb serverfarm REAL_HOST # REAL_HOST是真實(shí)服務(wù)器族的名字。
predictor leastconns #選用最小連接數(shù)均衡算法。
!
real 10.1.1.1 # 這里填入幾個(gè)真實(shí)服務(wù)器的IP地址。
real 10.1.1.2
real 10.1.1.3
inservice #啟動(dòng)該服務(wù)。
!
ip slb vserver VIRTUAL_HOST # VIRTUAL_HOST是虛擬服務(wù)器的名字。
virtual 192.168.1.10 tcp 8000 # 虛擬服務(wù)器的IP地址,tcp 8000表示自定義服務(wù)。
serverfarm REAL_HOST #表示該虛擬服務(wù)器使用的真實(shí)服務(wù)器族。
client 172.16.0.0 255.255.255.0 #限制客戶端源地址。
inservice #啟動(dòng)該服務(wù)。
!
路由器設(shè)置完成后,由于SLB負(fù)載均衡是工作在Dispatched模式下的,要求每個(gè)真實(shí)服務(wù)器把虛擬服務(wù)器的地址作為本機(jī)回環(huán)地址。這個(gè)看似簡(jiǎn)單的要求實(shí)現(xiàn)起來相當(dāng)困難。一般系統(tǒng)默認(rèn)的Loopback地址為127.0.0.1/8。目前,我們還沒找到在Windows操作系統(tǒng)下修改Loopback地址的方法,好在我們使用的是Linux系統(tǒng),可以方便地修改Loopback地址,修改方法如下:
#vi /etc/sysconfig/network-scripts/ifcfg.lo
DEVICE=lo
IPADDR=192.168.1.10
NETMASK=255.255.255.0
NETWORK=192.168.1.0
……
修改后重新開機(jī),Loopback地址就修改完成了。
如上修改后,如客戶端仍不能通過虛擬服務(wù)器連接到真實(shí)服務(wù)器,則是因?yàn)锳RP緩存不能正確地自動(dòng)更新網(wǎng)關(guān)10.1.1.10的MAC地址,造成IP通信不暢。為了通信穩(wěn)定,最好在每個(gè)真實(shí)服務(wù)器中的ARP表中加入永久的網(wǎng)關(guān)MAC地址項(xiàng)目; 當(dāng)然,同時(shí)要求不要輕易修改路由器以太網(wǎng)接口的位置(MAC地址)。

