自從全球地址分配機構(IANA)于2011年2月3日正式宣布,将其最後的IPv4地址平均分配到全球5個地區的互聯網絡信息中心後,目前僅剩下非洲互聯網信息中心(AFRINIC)可正常分配IPv4地址[1]。IPv4向IPv6的全面過渡更加緊迫,但由于互聯網的複雜性和多樣性,這個過渡必将是一個漫長的過程。由于IPv4協議和IPv6協議本質上不兼容,在過渡階段如何快速有效的向純IPv4和純IPv6用戶提供支持IPv4/IPv6的服務,最終實現平滑過渡,是必須要考慮和解決的問題。
本文首先介紹了IPv6過渡階段的Web服務過渡機制,然後設計了采用雙棧反向代理服務實現同時支持IPv4/IPv6的Web服務方案,并針對IPv6過渡的4個階段制定了雙棧反向代理的過渡策略,最後對基于雙棧反向代理的方案與其他常用過渡機制進行比較并得出結論。
IPv6過渡階段的Web服務過渡策略介紹
文獻[2]将IPv6過渡分為4個階段:純IPv4(階段0),IPv4為主、存在少量的IPv6(階段1),IPv6為主、存在少量的IPv4(階段2)和純IPv6(階段3)。由于階段0和階段3通信需求僅限于IPv4、IPv6同協議訪問,其中階段1和階段2的不同點在于純IPv4網絡、雙棧網絡、純IPv6網絡接入類型所占比例的多少。本文主要讨論階段1和階段2的場景,需要同時滿足終端IPv4/IPv6用戶訪問IPv6/IPv4Web服務的需求。見表1,隻有雙棧方式接入的終端用戶能夠訪問所有的IPv4/IPv6服務,純IPv4用戶不能訪問純IPv6服務,純IPv6用戶不能訪問純IPv4服務。要滿足所有終端用戶同時能夠訪問IPv4/IPv6服務,需要終端用戶通過IPv4-over-IPv6或IPv6-over-IPv4隧道的方式建立另外一種協議的通信通道,隧道的建立需要終端用戶做一定的配置,對于情況各異的用戶來說難以大規模使用。
因此,需要從Web服務端實現純IPv4和純IPv6用戶的訪問,通常有以下兩種方法:(1)服務器基于雙棧提供Web服務,原生支持IPv4/IPv6;(2)IPv4-IPv6翻譯,通過一個翻譯模塊将IPv4數據包和IPv6數據包互相轉換,翻譯機制可以分為無狀态翻譯,如SIIT(statelessIP/ICMPtranslation)和IVI(IVstandsfor4andVIstandsfor6),以及有狀态翻譯,如NAT-PT(NAT-protocoltranslation)和NAT64。[3-5]
Web服務本身采用雙棧方式是首選,它可避免因轉換導緻的任何複雜性,并為服務器提供最多信息。[6]雙棧方式需要整個鍊路上的設備均支持雙棧,包括服務器和應用本身,這意味着可能涉及到網絡改造和軟硬件設備更新,且公網雙棧需要消耗公網IPv4地址。IPv4-IPv6翻譯機制需要在邊界部署路由或網關,無狀态翻譯機制不需要維護會話的狀态,具有一定的靈活性,但它是以消耗IPv4地址空間的代價來實現雙向通信,有狀态翻譯機制需要翻譯器維護一個動态的地址(地址和端口)映射和一個IPv4地址資源池。
由于公網雙棧方式和無狀态翻譯機制Web服務本身需要消耗公網IPv4地址空間,他們沒有解決IPv6協議主要解決的地址空間的問題;私網雙棧雖然不消耗公網IPv4地址但仍然需要鍊路上設備的支持;另外,私網雙棧和有狀态翻譯機制需要部署路由或網關并維護會話狀态,增加了網絡複雜性。因此,為了降低IPv6過渡期間Web服務部署實施的複雜度,本文提出采用雙棧反向代理的方式實現過渡時期對Web服務的訪問,通過将反向代理服務器部署在雙棧環境中,Web服務可以隻接入純IPv4或純IPv6,不需要對現有網絡結構做任何改變,進而逐步完成向IPv6的過渡。
圖1IPv6過渡階段雙棧反向代理部署網絡結構示意雙棧反向代理服務方案的設計
反向代理是指由代理服務器來接收來自互聯網的訪問請求,再把訪問請求轉發到對應的網站服務器,并從對應網站服務器獲取結果返回給訪問用戶。[7]對于終端用戶來說,用戶正常訪問網頁即可,不需要做任何改變或配置。文獻[7-10]介紹了反向代理在Web服務中的應用,并介紹了在安全、負載均衡、公網地址消耗等方面的優勢,但這些文獻均未涉及IPv4/IPv6雙棧環境的場景。
雙棧反向代理的方式是指将反向代理服務器部署在雙棧環境中,同時分别監聽IPv4和IPv6服務端口,Web服務可以隻接入純IPv4或純IPv6網絡,純IPv4和純IPv6終端用戶可以通過反向代理服務器進行代理訪問另一協議的Web服務。由于采用雙棧代理後Web内容可能存在跨協議的資源引用問題,本文設計采用在反向代理服務内設置過濾轉換器和通用代理器來實現跨協議訪問。
1.雙棧反向代理服務的網絡設計
IPv6過渡階段雙棧反向代理部署網絡結構如圖1所示。雙棧反向代理服務器部署在雙棧網絡中,同時監聽IPv4/IPv6的服務端口:
(1)對于純IPv4用戶,在一側作為IPv4服務器,另一側作為IPv6客戶端,将來自IPv4客戶端的請求代理到IPv6服務器。
(2)對于純IPv6用戶,在一側作為IPv6服務器,另一側作為IPv4客戶端,将來自IPv6客戶端的請求代理到IPv4服務器。
雙棧反向代理服務器部署比較靈活,部署的位置取決于網絡的哪個部分可以支持雙棧,不需要對現有網絡結構做任何變更,又實現了雙棧Web服務。即使整個網絡沒有IPv6或IPv4,也可以在外部支持雙棧的數據中心托管自己的反向代理服務器,實現IPv4/IPv6的服務。由于跨協議訪問服務是由反向代理服務器中轉完成的,因此服務内容的管理維護與之前沒有變化,不需要考慮IPv4和IPv6不同的情況。
2.雙棧反向代理服務的域名服務設計
在反向代理服務的部署實施過程中,結合DNS(域名服務)配置可以更好地實現Web服務的快速部署。本文中Web服務域名設計如下:域名為example和example6,其中example域下的子域名同時配置A記錄和AAAA記錄,example6域下的子域名僅配置AAAA記錄,在實際應用中可以選擇不使用example6域名。其中A記錄是用來創建到IPv4地址的記錄,AAAA記錄是用來創建到IPv6地址的記錄。
假定雙棧反向代理服務器的IPv4和IPv6的地址分别為222.204.33.99和2001:250:6c00::3:99,以處于純IPv4網絡中域名為lib.example(ipv4地址為222.200.3.200)和處于純IPv6網絡中域名為6.example(IPv6地址為2001:250:6c00::210:201)的Web服務站點為例介紹域名設置方式。具體域名配置時将原本純IPv4服務域名lib.example和lib.example6的AAAA記錄指向反向代理服務器的IPv6地址2001:250:6c00::3:99,将原本純IPv6服務域名6.example對應的A記錄指向反向代理服務器的IPv4地址222.204.33.99。當純IPv4或純IPv6用戶訪問原本隻有另一協議網絡的Web服務時,域名将解析至反向代理服務器進行代理訪問。
3.雙棧反向代理服務的數據處理流程
雙棧反向代理服務部署後,純IPv4用戶可以通過反向代理服務器進行代理訪問原本IPv6的Web服務,純IPv6用戶也可以通過反向代理服務器進行代理訪問原本IPv4的Web服務,圖2為用戶通過雙棧反向代理訪問Web服務的數據流向示意圖。
IPv6用戶通過反向代理訪問原本IPv4服務lib.example的主要過程如下。
步驟1:用戶發起訪問請求,DNS解析出該域名對應的AAAA記錄2001:250:6c00::3:99,訪問請求被定位至反向代理服務器的IPv6監聽端口,這個過程基于IPv6協議;
步驟2:反向代理服務器得到用戶訪問請求,将訪問請求轉發至原本IPv4的Web服務,請求IP為反向代理的IPv4地址222.204.33.99,服務的IP地址為222.204.31.200,這個過程基于IPv4協議;
步驟3:Web服務器接收到轉發的訪問請求,将響應内容反饋至反向代理服務器,這個過程基于IPv4協議;圖2雙棧反向代理數據流向示意
圖3雙棧反向代理跨站跨協議資源訪問數據流向示意步驟4:反向代理服務器通過IPv6地址2001:250:6c00::3:99的服務監聽端口将内容返回給用戶,這個過程基于IPv6協議。
類似的,IPv4用戶通過反向代理訪問原本IPv6服務6.example的過程如下。
步驟1:用戶發起訪問請求,DNS解析出該域名對應的A記錄222.204.33.99,訪問請求被定位至反向代理服務器的IPv4監聽端口,這個過程基于IPv4協議;
步驟2:反向代理服務器得到用戶訪問請求,将訪問請求轉發至原本IPv6的Web服務,請求IP為反向代理的IPv6地址2001:250:6c00::3:99,服務的IPv6地址為2001:250:6c00::210:201,這個過程基于IPv6協議;
步驟3:Web服務器接收到轉發的訪問請求,将響應内容反饋至反向代理服務器,這個過程基于IPv6協議;
步驟4:反向代理服務器通過IPv4地址222.204.33.99的服務監聽端口将内容返回給用戶,這個過程基于IPv4協議。
由于雙棧用戶訪問Web服務時隻會選擇其中一種協議進行通信,在此不另做考慮。
從反向代理訪問Web服務的過程可以看到,對于用戶來說反向代理服務器就是目的服務器,用戶并不知道位于反向代理服務器之後的Web服務的真實IP地址,這樣就很好地保護了後端Web服務的資源安全。
4.雙棧反向代理服務跨站跨協議資源的處理
雙棧反向代理使得原本在單一網絡的Web服務有了雙棧服務能力,但是當純IPv4/IPv6用戶通過代理訪問Web服務時,如果被代理的Web服務内容中引用了外站的資源,使用代理服務後可能會遇到跨站、跨協議不能訪問的問題。例如常用的jquery的官網提供的CDN服務code.jquery僅支持IPv4,當IPv4服務lib.example頁面内容引用了腳本“http://code.jquery/jquery-3.2.1.min.js”,IPv6用戶通過反向代理訪問lib.example時就會遇到因引用失敗而導緻頁面功能失效的問題。
為提高用戶體驗,解決此類跨站跨協議資源引用的問題,本文在反向代理服務器中設置了過濾轉換器和一個通用代理Proxy模塊,過濾轉換器主要實現對Web服務返回的内容進行處理,通用代理Proxy模塊主要用于實現代理訪問過濾轉換後的URL資源。通用代理Proxy同時監聽IPv4和IPv6端口,同時配置域名proxy.example的A記錄和AAAA記錄指向反向代理服務器。
反向代理服務器處理跨站跨協議資源處理步驟如下。
步驟1:反向代理服務器接收到返回的服務内容;
步驟2:判斷是否為“text/html”格式,如果是進入步驟3,否則進入步驟5;
步驟3:檢測内容中是否包含絕對URL地址的資源引用,通常格式如src=http://a.b.c和href=http://a.b.c;
步驟4:将絕對URL地址替換為本地代理訪問的URL,如将src=http://a.b.c替換為src=http://proxy.example/?url=http://a.b.c;
步驟5:反向代理服務器将過濾後的内容返回終端用戶;步驟6:用戶浏覽器接收到返回的内容進行展示,其中的跨站跨協議的資源由于URL地址已經替換,訪問請求将自動解析至反向代理服務器中的通用代理Proxy;
步驟7:通用代理Proxy代理訪問并将訪問結果返回用戶浏覽器。
完成處理後,終端用戶對這部分跨站跨協議的資源訪問也通過雙棧反向代理訪問,如圖3所示。
5.雙棧反向代理的過渡策略設計
根據Web服務區域的IPv6過渡的4個階段,可制定如下雙棧反向代理過渡策略,最終實現IPv6的過渡:
(1)階段0(純IPv4):這個階段網絡中沒有IPv6網絡,此時可以将反向代理部署在外部支持雙棧的數據中心,将AAAA記錄指向反向代理服務器,IPv4用戶直接訪問原有網站服務,IPv6用戶通過反向代理訪問。
(2)階段1(IPv4為主、存在少量的IPv6)和階段2(IPv6為主、存在少量的IPv4):這兩個階段部署策略是一樣的,在雙棧區域部署反向代理,通過代理訪問純IPv6和純IPv4的Web服務。當新建Web服務或升級改造時部署至雙棧或純IPv6區域,通過改變域名的A記錄和AAAA記錄的指向,使得IPv4用戶訪問時通過反向代理訪問,IPv6用戶直接訪問,這樣逐步完成向IPv6的過渡。
(3)階段3(純IPv6):這個階段網絡中沒有IPv4網絡,如果需要可以将反向代理部署在外部支持雙棧的數據中心,将A記錄指向反向代理服務器,IPv6用戶直接訪問網站服務,IPv4用戶通過反向代理訪問。
基于雙棧反向代理過渡方式對網絡、設備和應用程序本身的要求不高,向IPv6過渡的Web應用可以成熟一個遷移一個,漸進式完成向IPv6的過渡。
圖4ab-n1000-c10時代理前後服務響應時間
與常用過渡機制評價比較
在IPv6過渡的前面三個階段,通過雙棧反向代理的部署,可以将原本純IPv4的Web服務快速擴展至IPv6,使得IPv4/IPv6用戶均可訪問。該方案僅需要少量配置和代碼,目前在筆者單位已經應用近百個二級站點并正常運行多年,反向代理服務器采用開源軟件Nginx部署,過濾轉換器采用ngx_lua模塊編寫代碼實現,在Nginx的配置文件中配置二級域名的泛域名解析,可以實現在站點調整或IPv6切換時時僅需要對DNS設置進行變更。圖4是采用Apache的ab工具對代理前後壓力測試時的響應情況:可以看到由于加入了過濾轉換器,代理後響應時間稍微有些增加,1000次的請求最高響應時間為8ms,在可以接受的範圍之内。
文獻[2]提出了針對IPv6過渡機制的統一評價指标體系,主要體現在功能、應用、性能、部署和安全5個方面,表2是與其他常用過渡機制在部署方面的評價指标的對比。
從表2可以看出,采用基于雙棧反向代理方式對于Web應用的IPv6過渡有明顯的優勢,可無需對現有網絡進行任何變更,對設備沒有特殊要求,可以不需要公網雙棧和無狀态網絡翻譯機制所要求的公網地址,而且在用戶和服務之間增加了隔離屏障,提高了服務的安全性。
本文設計了IPv6過渡階段雙棧反向代理的Web服務方案和過渡機制,通過在雙棧環境下部署反向代理服務,結合DNS域名設置,為純IPv4和純IPv6環境下的Web服務快速實現提供雙棧服務的能力。該方案的優點是:無需對現有網絡和設備做改變即可實現原本純IPv4和純IPv6的Web服務的雙棧訪問;在後端Web服務向IPv6切換時僅需要對DNS設置進行變更,易于管理和維護;反向代理服務的存在使得用戶和Web服務之間增加了一道隔離屏障,提高了服務的安全性。本文在反向代理服務中設置增加了過濾轉換器和通用代理器,用于解決代理訪問後Web内容中跨站、跨協議資源不能訪問的問題,目前過濾轉換器對于各被代理網站的處理都使用統一的代碼,後續将對過濾轉換器進行優化和擴展,以提高過濾器的性能和實現對被代理的站點更細力度的處理。
(責編:楊潔)
(作者單位1為南昌大學網絡中心;2為南昌大學軟件學院)基金項目:賽爾下一代互聯網技術創新項目(NGII20150105);江西省教育廳科學技術項目(GJJ150291)
參考文獻:
[1]HustonG,IPv4addressreport.TechnicalReport,2017.http://www.potaroo/tools/ipv4
[2]葛敬國,弭偉,吳玉磊.IPv6過渡機制:研究綜述、評價指标與部署考慮[J].軟件學報,2014,25(4):896-912.
[3]WuJ,WangJH,YangJ.CNGI-CERNET2:AnIPv6deploymentinChina.ACMSIGCOMMComputerCommunicationReview,2011,41(2):48?52.[doi:10.1145/1971162.1971170]
[4]WuP,CuiY,WuJ,LiuJ,MetzC.TransitionfromIPv4toIPv6:Astate-of-the-artsurvey.IEEECommunicationsSurveys&Tutorials,2012,PP(99):1?18.
[5]AazamM,HuhEN.Impactofipv4-ipv6coexistenceincloudvirtualizationenvironment[J].AnnalsofTelecommunications,2016,69(9-10):485-496.
[6]NetzeH.IPv6GuidanceforInternetContentProvidersandApplicationServiceProviders[J].WorkinProgress,2013.
[7]徐華宇.APACHE反向代理在校園網絡中的應用[J].通訊世界,2015(23):298-299.
[8]馮貴蘭,李正楠.Nginx反向代理在高校網站系統中的應用研究[J].網絡安全技術與應用,2017(6).
[9]劉振昌,陳詩明,焦寶臣,等.網站安全管理難題用反向代理技術巧應對[J].中國教育網絡,2017(Z1):92-93.
[10]徐長君,林濤.基于Nginx的負載均衡方式優化[J].河北工業大學學報,2016,45(6):48-52.