王 石,楊懷江,董 琰,李向龍
(1.中國(guó)科學(xué)院長(zhǎng)春光學(xué)精密機(jī)械與物理研究所,吉林 長(zhǎng)春 130033;2.中國(guó)科學(xué)院大學(xué),北京 100039;3.東北師范大學(xué)信息化管理與規(guī)劃辦公室,吉林 長(zhǎng)春 130024)
百萬(wàn)級(jí)并發(fā)連接的NAT關(guān)鍵技術(shù)研究
王石1,2,3,楊懷江1,董琰3,李向龍3
(1.中國(guó)科學(xué)院長(zhǎng)春光學(xué)精密機(jī)械與物理研究所,吉林 長(zhǎng)春 130033;2.中國(guó)科學(xué)院大學(xué),北京 100039;3.東北師范大學(xué)信息化管理與規(guī)劃辦公室,吉林 長(zhǎng)春 130024)
[摘要]利用Linux服務(wù)器iptables工具實(shí)現(xiàn)了NAT功能.通過(guò)對(duì)Linux內(nèi)核參數(shù)的修改使NAT形成百萬(wàn)級(jí)并發(fā)連接,利用bonding技術(shù)聚合塊網(wǎng)卡提升了數(shù)據(jù)的轉(zhuǎn)發(fā)能力.啟用路由功能后,將服務(wù)器應(yīng)用到某高校校園網(wǎng)出口,可以作為邊界設(shè)備代替路由器,而且運(yùn)行穩(wěn)定.
[關(guān)鍵詞]NAT;Linux bonding;Linux內(nèi)核參數(shù)優(yōu)化
2011年2月,全球互聯(lián)網(wǎng)地址分配機(jī)構(gòu)IANA宣布IPv4地址已經(jīng)分配完畢,這意味著新入網(wǎng)用戶將使用網(wǎng)絡(luò)地址轉(zhuǎn)換技術(shù)(NAT)實(shí)現(xiàn)互聯(lián)網(wǎng)接入.NAT技術(shù)采用多對(duì)一的動(dòng)態(tài)映射方式實(shí)現(xiàn)了園區(qū)網(wǎng)可重用本地地址的功能,在IPv4地址資源有限的情況下無(wú)限拓展了其適用范圍,因而得到了廣泛應(yīng)用.目前,對(duì)NAT技術(shù)的研究主要在NAT-PT及NAT穿越等方面.利用有限資源構(gòu)建大容量NAT服務(wù)的實(shí)際應(yīng)用研究很少,本文利用Linux服務(wù)器iptables工具使NAT實(shí)現(xiàn)了功能級(jí).通過(guò)對(duì)Linux內(nèi)核參數(shù)的修改使NAT的并發(fā)連接達(dá)到百萬(wàn)級(jí);利用bonding技術(shù)聚合塊網(wǎng)卡提升數(shù)據(jù)轉(zhuǎn)發(fā)能力;啟用路由功能后,將服務(wù)器應(yīng)用到某高校校園網(wǎng)出口,在不限制具體網(wǎng)絡(luò)應(yīng)用的前提下,可以作為邊界設(shè)備代替路由器,而且運(yùn)行穩(wěn)定.
1NAT的工作原理
NAT英文全稱Network Address Translation,即網(wǎng)絡(luò)地址轉(zhuǎn)換.于1994年在RFC1631中[1]首次被提出,是目前為解決IPv4地址枯竭和放大應(yīng)用問(wèn)題最廣泛的解決方案[2],優(yōu)點(diǎn)是不需要更改主機(jī)和路由器而進(jìn)行增量安裝.IP地址按使用范圍可分為本地地址和全局地址[3].本地地址即可重用地址,包括10.0.0.0/8、172.16.0.0/12和192.168.0.0/16;全局地址即全球唯一地址.一個(gè)地址要么是本地地址,要么是全局地址,沒有重疊.NAT的類型可以分為多種形式,本文選取應(yīng)用廣泛的NAPT類型[4-5],也稱為“多對(duì)一”的NAT,NAPT英文全稱Network Address Port Translation,即網(wǎng)絡(luò)端口地址轉(zhuǎn)換,是一種動(dòng)態(tài)轉(zhuǎn)換,可以完成多個(gè)本地地址轉(zhuǎn)換成同一全局地址,使用不同的端口號(hào)來(lái)區(qū)分不同的主機(jī)、不同的進(jìn)程.NAT的基本原理是改變IP包頭,使目的地址、原地址或2個(gè)地址在包頭中被不同地址替換.
NAT的基本操作過(guò)程[6]如圖1所示.當(dāng)PC 1(10.10.10.3)希望發(fā)送數(shù)據(jù)包到Internet節(jié)點(diǎn)(61.138.177.1)時(shí),數(shù)據(jù)包經(jīng)過(guò)Switch(網(wǎng)關(guān))轉(zhuǎn)發(fā)至NAT SERVER, NAT SERVER檢查數(shù)據(jù)包的IP包頭,得到數(shù)據(jù)包的IP源地址、源端口,從NAT POOL中選取一個(gè)全局地址61.138.177.3分配給PC 1,將10.10.10.3和61.138.177.3的映射關(guān)系及相應(yīng)端口信息存儲(chǔ)于內(nèi)存的NAT映射表中,同時(shí)將數(shù)據(jù)包上的本地地址10.10.10.3 替換成全局地址61.138.177.3.此時(shí)PC 1的數(shù)據(jù)包以源地址61.138.177.3與Internet節(jié)點(diǎn)61.138.177.1進(jìn)行通信.61.138.177.1的回應(yīng)數(shù)據(jù)包查找NAT SERVER映射表及IP地址的替換過(guò)程并發(fā)送到PC 1,從而完成數(shù)據(jù)通信.映射表中的映射信息會(huì)有一定的生命周期,以防止映射表過(guò)大,超過(guò)生命周期相應(yīng)的映射信息會(huì)被自動(dòng)刪除.PC 1在生命周期內(nèi)發(fā)送數(shù)據(jù)包至Internet節(jié)點(diǎn)時(shí),會(huì)使用之前分配的全局地址61.138.177.3,超過(guò)生命周期時(shí)NAT SERVER會(huì)分配新的全局地址,形成新的映射信息.
圖1 NAT的基本操作過(guò)程
2bonding技術(shù)實(shí)現(xiàn)
實(shí)際使用NAT SERVER作為邊界設(shè)備布置于某高校校園網(wǎng)出口,出口聯(lián)通帶寬為2 GB/s.而啟用NAT服務(wù)的Linux服務(wù)器一般為千兆網(wǎng)卡,這就需要進(jìn)行網(wǎng)卡捆綁操作配合交換機(jī)的端口聚合以倍增數(shù)據(jù)轉(zhuǎn)發(fā)能力.本文利用了Linux bonding驅(qū)動(dòng)提供一個(gè)把多個(gè)網(wǎng)絡(luò)接口設(shè)備捆綁為單個(gè)的網(wǎng)絡(luò)接口的功能,實(shí)現(xiàn)了網(wǎng)絡(luò)負(fù)載均衡[7].Linux服務(wù)器需要配置4塊物理網(wǎng)卡eth0、eth1、eth2和eth3,其中eth0和eth1綁定后的虛擬口是bond0,物理線路上聯(lián)是聯(lián)通2G出口;eth2和eth3綁定后的虛擬口是bond0,物理線路下聯(lián)是交換機(jī)聚合端口.當(dāng)NAT POOL中地址數(shù)量超過(guò)物理網(wǎng)卡數(shù)量,需使用虛擬網(wǎng)卡技術(shù)[8].實(shí)現(xiàn)步驟如下(以圖1為例):
(1)綁定物理網(wǎng)卡eth0、eth1至虛擬口bond0.
編輯/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=bond0
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
編輯/etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=bond0
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
(2)配置虛擬口bond0,并設(shè)置一網(wǎng)卡多地址.
編輯/etc/sysconfig/network-scripts/ifcfg-bond0:3
DEVICE=bond0:3
BOOTPROTO=static
ONBOOT=yes
IPADDR=61.138.177.3
NETMASK=255.255.255.224
…
編輯/etc/sysconfig/network-scripts/ifcfg-bond0:30
DEVICE=bond0:30
BOOTPROTO=static
ONBOOT=yes
IPADDR=61.138.177.30
NETMASK=255.255.255.224
(3)綁定物理網(wǎng)卡eth2、eth3至虛擬口bond1.
步驟與綁定物理網(wǎng)卡eth0、eth1類似.
(4)配置網(wǎng)關(guān).
編輯/etc/sysconfig/network
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=Nat.localdomain
GATEWAY=61.138.177.1
(5)配置bonding功能.
編輯/etc/modprobe/bonding.conf
alias bond0 bonding
alias bond1 bonding
options bonding max_bonds=2 miimon=200 mode=0
其中:miimon=200表示監(jiān)視網(wǎng)絡(luò)連接的頻度,單位是ms;mode=0表示提供負(fù)載均衡功能,按順序輪流把數(shù)據(jù)包發(fā)送給包含在bonding口內(nèi)物理網(wǎng)卡.
3百萬(wàn)級(jí)并發(fā)連接的NAT技術(shù)實(shí)現(xiàn)
Linux下NAT功能是通過(guò)netfilter網(wǎng)絡(luò)架構(gòu)下NAT模塊實(shí)現(xiàn)的[9].netfilter是Linux 2.4.x引入的一個(gè)子系統(tǒng),它作為一個(gè)通用的、抽象的框架,提供一整套的hook函數(shù)的管理機(jī)制,為內(nèi)核模塊參與IP層數(shù)據(jù)包處理提供了很大的方便,內(nèi)核的防火墻模塊(ip_tables)正是通過(guò)把自己所編寫的一些鉤子函數(shù)注冊(cè)到netfilter所監(jiān)控的5個(gè)關(guān)鍵點(diǎn)中,以這種方式介入到對(duì)數(shù)據(jù)包的處理.鉤子函數(shù)按功能可分為連接跟蹤、數(shù)據(jù)包過(guò)濾、網(wǎng)絡(luò)地址轉(zhuǎn)換(NAT)和數(shù)據(jù)包的修改.在Netfilter下conntrack模塊維護(hù)連接狀態(tài)信息代表了NAT轉(zhuǎn)換能力.為了更充分地利用netfilter下NAT模塊功能,需要對(duì)ip_conntrack_max和hashsize等參數(shù)進(jìn)行優(yōu)化.ip_conntrack_max代表netfilter模塊能夠同時(shí)處理最大conntrack條目.hashsize 代表存儲(chǔ)conntrack條目的hash表大小.查看/proc/net/ip_conntrack里的conntrack記錄,這些記錄表示當(dāng)前被跟蹤的連接,如:
tcp6117SYN_SENTsrc=61.138.177.3dst=61.138.177.1sport=32 775 dport=22[UNREPLIED]src=61.138.177.1dst=61.138.177.3sport=22 dport=32 775 use=2.
這個(gè)例子體現(xiàn)了conntrack模塊維護(hù)的某個(gè)連接狀態(tài).其中使用協(xié)議tcp,文中6表示協(xié)議類型代碼,177代表生存時(shí)間,然后是源地址、源端口、目的地址、目的端口等.
參數(shù)修改依據(jù)以下理論:以圖1為例,NAT POOL中包含25個(gè)IP地址,內(nèi)網(wǎng)主機(jī)訪問(wèn)外網(wǎng)服務(wù)器,每次訪問(wèn)經(jīng)過(guò)NAT做地址轉(zhuǎn)換,以NAPT方式實(shí)現(xiàn),分配的IP:Port必須各不相同,此時(shí)NAT轉(zhuǎn)換的上限次數(shù)為NAT POOL中IP地址數(shù)乘以可以轉(zhuǎn)換的端口數(shù),即:25×(65 536-1 024)=1 612 800.需要NAT SERVER的轉(zhuǎn)換能力在1.6×106以上.而對(duì)超過(guò)1 GB RAM的系統(tǒng),默認(rèn)conntrack_max值不超過(guò)65 536,實(shí)驗(yàn)環(huán)境下未進(jìn)行參數(shù)調(diào)優(yōu)前,NAT轉(zhuǎn)換條目也確實(shí)無(wú)法超過(guò)65 536.為實(shí)現(xiàn)大容量并發(fā)的NAT功能,需要對(duì)linux內(nèi)核的一些參數(shù)進(jìn)行修改,主要涉及3個(gè)默認(rèn)的參數(shù)為ip_conntrack_max、hashsize和tcp_timeout_established.
在i386架構(gòu)下的conntrack_max的計(jì)算方法為conntrack_max=(x/32)×RAM容量(單位為B)/16 384,x表示處理器位數(shù).Hashsize=conntrack_max/8.以64位CPU和16 GB內(nèi)存為例:
ip_contrack_max=(64/32)×16×1 024^3/16 384=2 097 152;
Hashsize=ip_contrack_max/8=262 144.
查看內(nèi)核文件net/ipv4/netfilter/ip_conntrack_proto_tcp.c,可知系統(tǒng)默認(rèn)設(shè)置tcp_timeout_established是5 d,其數(shù)值過(guò)大將占用大量?jī)?nèi)存,導(dǎo)致系統(tǒng)死機(jī),故改為300 s.同時(shí)調(diào)整內(nèi)核所允許的最大路由條目為
route.max_size=2 097 152.
通過(guò)以上調(diào)整,Linux SERVER理論上可以完成2×106并發(fā)連接的NAT轉(zhuǎn)換,并具備相應(yīng)的數(shù)據(jù)轉(zhuǎn)發(fā)能力.
4仿真實(shí)驗(yàn)
實(shí)驗(yàn)環(huán)境為某高校校園網(wǎng),部署NAT SERVER于網(wǎng)絡(luò)邊界以替代路由器.NAT SERVER配置64位4核CPU 2個(gè)、16 GB內(nèi)存、4塊PCI-E千兆獨(dú)立網(wǎng)卡,操作系統(tǒng)為CentOS6.4,內(nèi)核版本為2.6.32,網(wǎng)絡(luò)拓?fù)淙鐖D1.操作步驟如下:
(1)配置NAT,回指路由,hashsize參數(shù)優(yōu)化.
編輯/root/nat
IPPOOL=61.138.177.3-61.138.177.30
iptables-t nat-F
iptables-t nat-A POSTROUTING-s 10.10.10.0/24-o bond0-j SNAT —to $IPPOOL
iptables-save-c >/etc/sysconfig/iptables
route add-add-net 10.10.10.0/24 gw 10.10.10.1
echo“2097152”> /sys/module/nf_conntrack/parameters/hashsize
sysctl-p.
(2)使/root/nat開機(jī)自動(dòng)執(zhí)行.
編輯/etc/rc.local
/root/nat.
(3)使能ip轉(zhuǎn)發(fā)功能、參數(shù)優(yōu)化.
編輯/etc/sysctl.conf
net.ipv4.ip_forward = 1
net.netfilter.nf_conntrack_max = 2 097 152
net.netfilter.nf_conntrack_tcp_timeout_established = 300
net.ipv4.route.max_size = 2 097 152.
(4)依據(jù)第2節(jié)bonding技術(shù)實(shí)現(xiàn)配置網(wǎng)卡.
校園網(wǎng)聯(lián)通、電信出口分別架設(shè)一臺(tái)NAT SERVER,聯(lián)通出口帶寬1.4 GB/s,電信出口帶寬1 GB/s,校園網(wǎng)用網(wǎng)高峰同時(shí)在線10 000人,單臺(tái)NAT SERVER最高并發(fā)連接數(shù)達(dá)到1.7×106.發(fā)現(xiàn)NAT SERVER運(yùn)行穩(wěn)定,校園網(wǎng)整體狀況未見明顯異常,滿足使用需求.
5結(jié)束語(yǔ)
Linux系統(tǒng)自帶的NAT功能強(qiáng)大,但是系統(tǒng)默認(rèn)的參數(shù)配置并沒有完全發(fā)揮其使用能力.本文通過(guò)對(duì)Linux系統(tǒng)NAT相關(guān)參數(shù)的優(yōu)化大大擴(kuò)充了NAT轉(zhuǎn)換能力,同時(shí)應(yīng)用bonding技術(shù)解決了常用NAT SERVER數(shù)據(jù)轉(zhuǎn)發(fā)能力存在瓶頸的問(wèn)題.通過(guò)實(shí)際網(wǎng)絡(luò)環(huán)境的驗(yàn)證,證明了NAT SERVER的有效性和實(shí)用性.值得注意的是NAT SERVER最好與流控設(shè)備互相配合使用,這樣可以使基于應(yīng)用層的網(wǎng)絡(luò)管理更加智能與靈活.另外,由于校園網(wǎng)在線人數(shù)多,出口帶寬高,數(shù)據(jù)量大,選用的獨(dú)立網(wǎng)卡的質(zhì)量和工作能力決定整個(gè)NAT SERVER的性能,針對(duì)網(wǎng)卡的參數(shù)優(yōu)化和選取標(biāo)準(zhǔn)將是今后的研究?jī)?nèi)容.
[參考文獻(xiàn)]
[1]EGEVANG K,F(xiàn)RANCIS P.The IP Network Address Translator(NAT)[S].IETF RFC 1631,May 1994[2015-03-01].http://www.rfc-editor.org/rfc/rfc1631.txt.
[2]孫中廷.NAT技術(shù)解決IP地址短缺問(wèn)題的實(shí)現(xiàn)[J].辦公自動(dòng)化,2013,14:42-44.
[3]EDWARDS W,PADJEN R,SKANDIERT.CCNP四合一:學(xué)習(xí)指南(中文版)[M].張波,謝琳,譯.北京:電子工業(yè)出版社,2005:58-77.
[4]王秀欣,戚宇林,王鼎.基于目前NAPT的一種改進(jìn)算法[J].微型電腦應(yīng)用,2008,9:18-20.
[5]SRISURESH P,EGEVANG K.Traditional IP network address translator[S].IETF RFC 3022,January 2001[2015-03-01].http://www.rfc-editor.org/rfc/rfc3022.txt.
[6]包亮,潘金貴.網(wǎng)絡(luò)地址翻譯系統(tǒng)的原理和應(yīng)用[J].計(jì)算機(jī)科學(xué),2001,28(7):36-41.
[7]李騫,彭海云.基于bonding技術(shù)的負(fù)載均衡研究[J].計(jì)算機(jī)與數(shù)字工程,2011,12:151-153,170.
[8]魏華,鄒鵬.虛擬網(wǎng)卡及設(shè)備別名的配置[J].數(shù)字技術(shù)與應(yīng)用,2013,12:216.
[9]馮富霞,李森貴.基于Netfilter改善網(wǎng)絡(luò)性能的研究與實(shí)現(xiàn)[J].安徽工程科技學(xué)院學(xué)報(bào)(自然科學(xué)版),2008,23(3):61-64.
(責(zé)任編輯:石紹慶)
Research on the key technologies for million concurrent connections of NAT
WANG Shi1,2,3,YANG Huai-jiang1,DONG Yan3,LI Xiang-long3
(1.Changchun Institute of Optics,F(xiàn)ine Mechanics and Physics,Chinese Academy of Sciences,Changchun 130033,China;2.University of Chinese Academy of Sciences,Beijing 100039,China;3.Office of Information Management and Planning,Northeast Normal University,Changchun 130024,China)
Abstract:NAT technology has been widely applied for alleviating the shortage of IPv4 address.In this paper,the NAT function is achieved by using the Linux server iptables tools.Million concurrent connections of NAT are reached via modifing Linux kernel parameters.The bonding technology of polymerization NIC is used in order to improve data forwarding capability.The NAT server is applied to the campus network as boundary router and stable after enabling routing function.
Keywords:NAT;Linux bonding;Linux kernel parameters optimization
[文章編號(hào)]1000-1832(2016)02-0089-04
[收稿日期]2015-03-08
[基金項(xiàng)目]吉林省自然科學(xué)基金資助項(xiàng)目(20140101189JC,20140101190JC);吉林省教育廳“十二五”社會(huì)科學(xué)研究項(xiàng)目(2014B053).
[作者簡(jiǎn)介]王石(1979—),男,工程師,主要從事信息安全研究.
[中圖分類號(hào)]TP 393[學(xué)科代碼]520·3040
[文獻(xiàn)標(biāo)志碼]A
[DOI]10.16163/j.cnki.22-1123/n.2016.02.019