摘要:Diameter MIPv6擴展模型改變了MIPv6家鄉代理綁定更新流程,移動節點在完成認證和授權的同時完成MIPv6家鄉代理綁定更新,這樣可縮短移動切換時延。為實現上述過程,提出了一種在Linux下利用Netfilter框架和Netlink套接字的Diameter移動IPv6 AAA系統中移動IPv6家鄉代理綁定更新解決方案,并給出了方案的詳細實現。
關鍵詞:認證、授權和計費;Diameter協議;Diameter 移動IPv6協議;移動IPv6;Netlink套接字;Netfilter
中圖分類號:TP393文獻標志碼:A
文章編號:1001-3695(2007)05-0290-03
移動IPv6(Mobile IPv6,MIPv6)技術很好地解決了無縫移動漫游問題,但隨之帶來的漫游管理以及如何保證用戶和網絡資源提供商的合法權益等諸多問題,需要AAA(認證、授權和計費)技術來保證。因此,AAA技術和MIPv6技術的結合勢在必行。針對上述需求,IETF制定了Diameter移動IPv6擴展協議[1]。該協議目前沒有正式標準,還有很多不成熟之處。因此,研究和實現Diameter MIPv6 AAA系統具有重要的意義。
在實現基于Diameter MIPv6 AAA系統的過程中注意到,該系統基本模型改變了移動IPv6協議家鄉代理綁定更新流程,它將綁定更新嵌入到AAA初始認證和授權流程中,在移動用戶完成認證授權接入網絡的同時完成了家鄉代理綁定更新工作,這就縮短了移動切換時延。系統中如何實現MIPv6的綁定更新就成了一個技術關鍵。
1背景介紹
1.1Diameter MIPv6 AAA系統描述
為了解決移動IPv6環境下的認證、授權和計費問題,支持用戶無縫漫游及漫游接入,實現域管理和跨域無縫切換,采用Diameter協議設計并實現了一個MIPv6 AAA系統。它采用無狀態地址自動配置,用戶無須配置網絡信息就可快捷透明地接入,并提供強大的審計功能。
1.2Diameter MIPv6 AAA系統基本模型
目前,Diameter協議還沒有正式的MIPv6 AAA標準。文獻[1]給出了一個Diameter MIPv6的基本模型,如圖1所示。
其中,MN是移動節點;HA是家鄉代理;AAAv是訪問域AAA服務器;AAAh是家鄉AAA服務器;AAA客戶端同時充當接入路由器的角色。
(1)路由器定期發送路由公告,其中包括質詢。MN據此可實現移動檢測,并形成轉交地址。
(2)MN獲得轉交地址,向AAA客戶端發送請求消息。其中包含認證授權信息和MIPv6綁定更新信息。
(3)AAA客戶端提取以上信息,生成AAA請求(ARR)發送給AAAv。
(4)AAAv收到AAA認證請求報文后,判斷MN是否屬于本域。如果不是,就轉發給MN家鄉域的AAAh。
(5)AAAh根據認證授權信息對 MN進行認證授權。若成功,則將MIPv6綁定更新信息提取出來,生成HA移動IPv6請求(HOR),發給指定的HA;否則,返回認證失敗消息。
(6)HA提取出HOR信息中的MIPv6信息,完成HA綁定更新,并將綁定更新應答放入AAA應答(HOA)返回給AAAh。
(7)(8) AAAh收到HA移動IPv6應答后,生成認證應答(ARA),通過AAAv發往AAA客戶端。
(9)AAA客戶端將收到的認證應答轉發給MN。若成功,則接入路由完成MN接入,同時移動節點已經完成HA綁定更新。
綜上可知,該模型改變了MIPv6綁定更新流程,避免了MN在完成認證后才開始綁定更新流程,使得認證和綁定更新同時完成,這樣縮短了切換時延。但該模型沒有描述任何具體的實現。
1.3MIPv6 家鄉綁定更新
當MN漫游到另一個網絡時,通過接入路由器的路由公告形成一個新的轉交地址。此時,MN必須向家鄉代理(HA)發送綁定更新,在家鄉代理上對它進行注冊。HA在收到MN綁定更新請求后,會根據其內容為MN創建或更新綁定緩存表項,同時把該表項標記為家鄉注冊;然后通過綁定確認消息對MN的請求進行應答。隨后,HA使用代理鄰居發現機制,在家鄉鏈路上截取目的地址時MN家鄉地址的所有IPv6分組,并通過隧道將它們轉發到MN的主轉交地址。當MN回到家鄉網絡時,會給HA發送注銷綁定請求,HA在收到該請求后,刪除綁定緩存中的任何相關選項,并向MN發送綁定確認,不再截取目的地址時MN家鄉地址的所有IPv6分組。MIPv6通過這種機制,實現了MN的無縫漫游[2]。
2方案描述
2.1設計思想
由于MIPv6是IP層協議,而Diameter MIPv6擴展協議屬于應用層,且前者運行在內核態而后者運行在用戶態,內核態與用戶態之間信息的交互就成了技術關鍵。
在AAA客戶端,筆者使用Netfilter機制截取MN的認證請求信息和綁定信息;通過Netlink套接字傳遞給AAA客戶端,AAA客戶端負責開啟AAA和綁定更新流程,等待應答并將其通過Netlink套接字傳遞給內核接入控制模塊,完成MN認證和綁定工作。
在HA端,同樣使用Netlink套接字將綁定信息傳遞給內核態的綁定更新模塊。該模塊通過調用MIPv6相應的綁定更新函數完成綁定更新工作。
2.2系統平臺
目前,Linux系統對IPv6的支持是最好的,同時目前最成熟的移動IPv6實現——MIPL也是基于Linux系統,再加上Linux系統源碼的開放性、系統穩定性等諸多特性,使其成為本文首選的系統平臺。
2.3AAA客戶端實現方案
在AAA客戶端,由兩大模塊協同完成MN的接入控制和綁定更新工作。
2.3.1接入控制模塊
接入控制模塊加載階段先在內核空間創建一個 Netlink 套接字,再將一個函數掛接在 Netfilter 框架的 NF_IP6_FORWARD鉤子點上,截取所有IPv6數據包[3]。如果數據包源地址沒有通過認證且包含報頭類型為綁定更新消息的移動報頭,則查看綁定更新消息是否包含自己定義的AAA請求標志位。如果是,在移動選項中提取出相應的AAA信息和綁定更新信息,通過Netlink套接字傳遞給AAA客戶端模塊,等待認證、綁定應答。一旦應答到,將認證應答發送給MN的同時將綁定應答組裝成MIPv6綁定應答數據包發送給MN,MN完成認證接入和綁定更新工作。該模塊流程圖如圖3所示。
2.3.2客戶端模塊
該模塊負責從接入控制模塊接收認證請求和綁定更新信息,組裝成AAA認證請求,開啟AAA流程,等待認證、綁定應答。一旦應答到,將應答通過Netlink套接字返回給接入控制模塊。
2.4HA端實現方案
此端同樣由兩大模塊協同實現MIPv6 HA綁定更新工作。其中AAA模塊負責接收從AAA家鄉服務器發送過來的AAA MIPv6綁定更新請求,提取出綁定更新信息,通過Netlink套接字發送到運行在內核態的綁定更新模塊;綁定更新模塊通過調用MIPv6相應的綁定更新函數完成綁定更新后生成綁定應答;通過Netlink套接字將應答返回給AAA模塊;AAA模塊再將綁定應答包含在AAA應答中發送給AAA家鄉服務器。
3實現
3.1數據結構
下面是兩大模塊之間傳遞數據的數據結構:
aaa_bu_rqt_msg結構體定義了綁定更新請求信息,包括MN的家鄉地址、轉交地址、綁定生存期等信息。
struct aaa_bu_rqt_msg
{ struct in 6_addr *saddr,*daddr,*haddr,*coa;
//源地址、目的地址、家鄉地址、轉交地址
_u32 ba_lifetime; //綁定生存期限
_u16 sequence; //序列號
_u8 flags; //標志位
};
aaa_bu_ack_msg結構體定義了綁定應答,包括綁定狀態、綁定生存期等信息:
struct aaa_bu_ack_msg
{ _u8 status;// 綁定狀態
_u8 reserved; // 保留位
_u16 sequence; // 序列號
_u32 lifetime;// 綁定生存期
};
msg_to_kernel結構體定義了AAA模塊發送給綁定更新模塊的數據結構:
struct msg_to_kernel
{ struct nlmsghdr hdr;// Netlink Socket頭
struct aaa_bu_rqt_msg bu_rqt_msg;// 綁定請求信息
};
msg_to_user結構體定義了綁定更新模塊發送給AAA模塊的數據結構:
struct msg_to_user
{ struct nlmsghdr hdr;//Netlink Socket頭
struct aaa_bu_ack_msg bu_ack_msg; //綁定應答信息
};
3.2AAA模塊處理流程
該模塊處理流程如下:
(1)AAAHORHandler()函數接收AAA家鄉服務器發送過來的消息,提取出綁定更新信息。
(2)創建一個可分離的線程,負責處理以下步驟。
(3)利用socket()函數創建一個套接字。
(4)并用bind()函數完成套接字的綁定。
(5)將Netlink Socket頭信息和綁定更新信息填充到msg_to_kernel消息結構體中。
(6)調用sendto()函數將消息傳遞給綁定更新模塊。
(7)Recvfrom()函數阻塞等待綁定應答。一旦應答到,調用SendHOAMessage()函數將綁定應答返回給AAA家鄉服務器。
3.3綁定更新模塊處理流程
該模塊處理流程如下:
(1)模塊初始化module_init()。
(2)調用netlink_kernel_create()函數創建Netlink Socket,指定消息接收函數為kernel_receive()。
(3)在kernel_receive()函數中按序取出Socket消息隊列中的消息,交由receive_bu_rqt()函數處理。
(4)receive_bu_rqt()函數調用MIPL模塊的綁定更新函數mipv6_bcache_add()完成綁定更新工作。
(5)生成綁定應答并填充到msg_to_user消息結構體中。
(6)調用netlink_unicast()函數將應答返回給AAA模塊。
3.4實驗結果
在實驗中,網絡信息配置如下:
MN Home Address: 2001:251:1a05:1::2
HA Address: 2001:251:1a05:1::1
Foreign network prefix: 2001:251:1a05:2/64
MN開始在家鄉域以合法的用戶身份通過MIPv6 AAA系統認證授權接入網絡,開啟Ping6服務,然后漫游到外地網絡。當MN切換到外地網絡時,MN發起認證請求,Ping6服務暫停。在HA端利用MIPL的用戶空間工具mipdiag-c查看綁定更新選項,待HA端已建立起綁定選項(圖4),即MN已完成綁定更新工作之后,等待片刻(認證和綁定應答返回所需時間), AAA客戶端接收到攜帶BA(綁定更新應答)的認證應答(圖5),MN端Ping 6服務恢復正常。此時MN已經接入新網絡。試驗中MN Ping6服務丟失約十個包。
結果分析:
(1)圖4顯示, MN漫游到外地網絡后獲得了一個轉交地址;通過綁定更新,在HA端綁定列表里建立起MN家鄉地址2001:251:1a05:1::2和轉交地址2001:251:1a05:2:260:b3ff:fe6b:738d的關聯選項,完成了綁定更新工作。
(2)圖5顯示, AAA客戶端接收到了攜帶BA的認證應答,然后再將BA返回給MN。至此,MN在完成認證接入的同時已經完成綁定更新工作。
實驗結果證明,該設計方案很好地解決了基于Diameter的 MIPv6 AAA系統中MIPv6家鄉綁定更新問題。
4結束語
本文提出了一種在Linux環境下采用Netfilter框架和Netlink套接字來解決Diameter MIPv6 AAA系統中MIPv6家鄉代理綁定更新的方案,并給出了方案的詳細設計和實現。實驗結果證明,此方案很好地解決了上述問題。
參考文獻:
[1]STEFANO F, FRANCK L, BASAVARAJ P, et al. draft-le-aaa-diameter-mobileipv6[EB/OL].(2004-11).http://ietfreport.isoc.org/idref/draft-le-aaa-diameter-mobileipv6/.
[2]孫利民,闞志剛,鄭健平,等. 移動IP技術[M]. 北京:電子工業出版社,2003:69-71.
[3]MSKE M.IPv6 packet handling in Linux 2.4[EB/OL].(2002-07).http://www.linuxforum.net/forum/files/550072-IPv6%20Packet%20Handling%20in%20Linux%202.4.pdf.[4]陳鑫. Linux 系統內核空間與用戶空間通信的實現與分析[EB/OL].(2004-07).http://www-128.ibm.com/developerworks/cn/linux/l-netlink/?ca=dwcn-newsletter-linux.
注:“本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文”