亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺(tái) 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 75102 | 回復(fù): 118
打印 上一主題 下一主題

[網(wǎng)絡(luò)管理] 構(gòu)建一臺(tái)大容量的NAT服務(wù)器 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2008-07-07 21:36 |只看該作者 |倒序?yàn)g覽
構(gòu)建一臺(tái)大容量的NAT服務(wù)器
Ippen Yang
(
ippen@21cn.com)


1.前言
本文檔主要描述如何利用Linux構(gòu)建一臺(tái)能力比較強(qiáng)的NAT服務(wù)器,并發(fā)連接數(shù)大約16萬,流量200M-300M,如果你需要一個(gè)流量更高的NAT設(shè)備,請考慮購買專業(yè)廠商的設(shè)備。

2.許可協(xié)議
本文的許可協(xié)議遵循GNU Free Document License。協(xié)議的具體內(nèi)容請參見http://www.gnu.org/copyleft/fdl.html。在遵循GNU Free Document License的基礎(chǔ)上,可以自由地轉(zhuǎn)載或發(fā)行本文,但請保留本文的完整性。

3.準(zhǔn)備工作
CentOS 4.6光盤一套(4張CD)

PC
服務(wù)器一臺(tái),P4 CPU,速度越快越好,256M內(nèi)存(有沒聽錯(cuò)?沒錯(cuò)! 256M內(nèi)存就夠了,如果資金充裕,可以用512M;如果你用1G內(nèi)存,那叫浪費(fèi)),2G或以上的硬盤(可以用CF電子盤)


兩個(gè)高性能千兆網(wǎng)卡,到目前為止,我測試過幾種網(wǎng)卡,Intel的PCI-X服務(wù)器網(wǎng)卡,Intel的PCI服務(wù)器網(wǎng)卡,Marvell PCI-E,3COM,前面三種網(wǎng)卡都不錯(cuò),反而是3COM的網(wǎng)卡不行。


網(wǎng)卡最好用兩個(gè)不同的接口,我現(xiàn)在用的主板,通常都是一張PCI-X網(wǎng)卡,一張PCI-E網(wǎng)卡,這樣能避免內(nèi)部接口速度影響轉(zhuǎn)發(fā)效率


4.安裝
首先安裝CentOS,如果考慮編譯內(nèi)核,安裝時(shí)記住要安裝開發(fā)工具,因?yàn)橐{(diào)整系統(tǒng)內(nèi)核模塊的一些參數(shù),要編譯系統(tǒng)模塊。安裝時(shí)要注意,不要建立交換區(qū),切記!。≡蚝竺娼忉
安裝完成后,運(yùn)行setup,在system service中將不需要用的程序全部停止,基本上只需要保留ssh,iptables,network,snmpd,syslog幾個(gè),設(shè)置完后重新啟動(dòng)服務(wù)器。
編輯/etc/sysctl.conf,查找行“net.ipv4.ip_forward = 0,然后將這行按下面的內(nèi)容進(jìn)行更改,原文件中沒有的內(nèi)容請自己添加
# Controls IP packet forwarding
net.ipv4.ip_forward = 1
net.ipv4.netfilter.ip_conntrack_max = 262144
net.ipv4.netfilter.ip_conntrack_tcp_timeout_established = 300
net.ipv4.route.max_size=2097152
net.ipv4.tcp_window_scaling=1
kernel.shmmax=268435456
kernel.shmall=268435456



編輯/etc/rc.local如下:

#!/bin/sh

touch /var/lock/subsys/local
/root/nat



編輯/root/nat如下:

# eth0 is internet interface
# eth1 is intranet interface
INCOMING=eth0
OUTGOING=eth1
ip addr add 222.222.222.8 dev $OUTGOING
ip addr add 222.222.222.9 dev $OUTGOING
ip addr add 222.222.222.10 dev $OUTGOING
ip addr add 222.222.222.11 dev $OUTGOING
IPPOOL=222.222.222.8-222.222.222.11

iptables -t nat -F
iptables -t nat -A POSTROUTING -s 內(nèi)部IP地址/子網(wǎng) -o $OUTGOING -j SNAT --to $IPPOOL

iptables-save -c >/etc/sysconfig/iptables





注意,這里假定互聯(lián)網(wǎng)IP是222.222.222.8-222.222.222.11(上面黑色字體),請用真正使用的IP范圍將黑色字體替換。內(nèi)網(wǎng)地址也請根據(jù)實(shí)際環(huán)境變更。這個(gè)腳本只是NAT用,如果需要增加安全策略,請參考其它的iptables的腳本。

如果服務(wù)器的CPU是雙核的,編輯/etc/grub.conf
#boot=/dev/sda1
default=1
timeout=1
#splashimage=(hd0,0)/boot/grub/splash.xpm.gz
hiddenmenu
title CentOS-4 i386 (2.6.9-34.ELsmp)
        root (hd0,0)
        kernel /boot/vmlinuz-2.6.9-34.ELsmp ro root=LABEL=/
        initrd /boot/initrd-2.6.9-34.ELsmp.img

title CentOS-4 i386-up (2.6.9-34.EL)
        root (hd0,0)
        kernel /boot/vmlinuz-2.6.9-34.EL ro root=LABEL=/
        initrd /boot/initrd-2.6.9-34.EL.img




將服務(wù)器調(diào)整為單核方式運(yùn)作,為什么?之前與CU的高手討論過這個(gè)問題,也進(jìn)行過測試,單核方式下運(yùn)行的NAT效率的確比雙核高,也更穩(wěn)定,所以只用單核,不過現(xiàn)在只能買到雙核的CPU,只好浪費(fèi)一點(diǎn)了。

5.高級(jí)配置

由于linux系統(tǒng)內(nèi)部的一些參數(shù)在NAT環(huán)境中并不合理,因此在一些情況下需要作些修改,由于涉及內(nèi)核,建議不熟悉的朋友忽略這個(gè)部分。


這部分的調(diào)整對系統(tǒng)的優(yōu)化有限,如果你的并發(fā)連接數(shù)不是非常高,也可以忽略這個(gè)部分。


首先下載linux的內(nèi)核源文件,請上http://mirror.be10.com下載,下載后解包到硬盤中。


系統(tǒng)調(diào)整主要是三個(gè)默認(rèn)的參數(shù),參數(shù)buckets、ip_conntrack_max和tcp_timeout_established。


參數(shù)tcp_timeout_established 位于文件net/ipv4/netfilter/ip_conntrack_proto_tcp.c中,用vi打開文件,查找

unsigned long ip_ct_tcp_timeout_established = 5 DAYS;

原來的tcp_timeout_established是5天,這個(gè)數(shù)值太大了,很容易造成內(nèi)存過度占用,導(dǎo)致系統(tǒng)死機(jī),將其改為如下,
unsigned long ip_ct_tcp_timeout_established = 5 MINS;


參數(shù)buckets、ip_conntrack_max位于文件net/ipv4/netfilter/ip_conntrack_core.c中,vi打開文件,查找如下的一段代碼,可以看出,系統(tǒng)默認(rèn)的buckets數(shù)值是內(nèi)存數(shù)的1/16384,ip_conntrack_max是buckets的8倍,即時(shí)你有大于1G的內(nèi)存,buckets也只是8192。


/* Idea from tcp.c: use 1/16384 of memory.
On i386: 32MB


* machine has 256 buckets.
>= 1GB machines have 8192 buckets. */


if (hashsize) {


ip_conntrack_htable_size = hashsize;


} else {


ip_conntrack_htable_size


= (((num_physpages << PAGE_SHIFT) / 16384)


/ sizeof(struct list_head));


if (num_physpages > (1024 * 1024 * 1024 / PAGE_SIZE))


ip_conntrack_htable_size = 8192;


if (ip_conntrack_htable_size < 16)



ip_conntrack_htable_size = 16;


}


調(diào)整可以在這段代碼后面直接對buckets和ip_conntrack_max賦值即可

/* Idea from tcp.c: use 1/16384 of memory.
On i386: 32MB


* machine has 256 buckets.
>= 1GB machines have 8192 buckets. */


if (hashsize) {


ip_conntrack_htable_size = hashsize;


} else {


ip_conntrack_htable_size


= (((num_physpages << PAGE_SHIFT) / 16384)


/ sizeof(struct list_head));



if (num_physpages > (1024 * 1024 * 1024 / PAGE_SIZE))


ip_conntrack_htable_size = 8192;


if (ip_conntrack_htable_size < 16)


ip_conntrack_htable_size = 16;


}


ip_conntrack_htable_size = 32768;


ip_conntrack_max = 8 * ip_conntrack_htable_size;


參數(shù)改好后,編譯modules,然后用編譯后產(chǎn)生的文件ip_conntrack.ko代替系統(tǒng)中的同名文件(位于/lib/modules/2.6.9……),重新啟動(dòng)即可。

調(diào)整內(nèi)核參數(shù)buckets的效果不是特別明顯,在初始測試中,使用默認(rèn)的buckets數(shù)值,但并發(fā)連接數(shù)到12.8萬時(shí),CPU的使用率有明顯上升,穩(wěn)定性變差,調(diào)整buckets數(shù)值后并發(fā)連接數(shù)能到16萬,但流量上升不多,所以對系統(tǒng)編譯不熟悉的朋友不必考慮這個(gè)方法,增加一臺(tái)服務(wù)器就是了。


常見問題

Q
.服務(wù)器空載時(shí)速度很快,但一加載流量就有明顯的丟包,并且只有幾兆流量,但實(shí)際流量遠(yuǎn)遠(yuǎn)不止幾兆


A
.請檢查網(wǎng)線以及交換機(jī)端口、linux服務(wù)器網(wǎng)卡端口的全雙工、半雙工狀態(tài),用ethertool,這個(gè)現(xiàn)象非常明顯和常見,通常都是全雙工、半雙工匹配問題。


Q
.我的網(wǎng)內(nèi)有2千用戶,要什么樣的服務(wù)器才能正常運(yùn)作?


A
.其實(shí)完全不必關(guān)心又多少用戶,關(guān)鍵是系統(tǒng)的并發(fā)連接數(shù),系統(tǒng)并發(fā)連接數(shù)最好不要超過16萬并發(fā)連接數(shù),超過了系統(tǒng)會(huì)有些不穩(wěn)定,所以建議連接數(shù)高的用戶采用增加服務(wù)器的方式。

目前的優(yōu)化只能到這個(gè)程度了,如果有更好的優(yōu)化方案,我會(huì)第一時(shí)間高訴各位的。

Q
.使用更快的CPU和更大的內(nèi)存能否提高并發(fā)連接數(shù)?


A
.開始我也這樣認(rèn)為,但實(shí)際測試中,發(fā)現(xiàn)這個(gè)觀點(diǎn)完全錯(cuò)誤,NAT使用的內(nèi)存量比較固定,我監(jiān)測的結(jié)果,基本上在200M左右,所以在開始建議大家買的內(nèi)存也是256M而已,更快的CPU對NAT是有幫助,但隨著并發(fā)連接數(shù)的增加,NAT的效率越來越低,反而效果更差。


Q
.是否一定要將互聯(lián)網(wǎng)IP設(shè)置到OUT網(wǎng)卡上?


A
.不一定,但這樣設(shè)置,NAT服務(wù)器的CPU利用率會(huì)明顯降低,強(qiáng)烈建議這樣配置。


Q
.為什么不使用交換區(qū)?


A
.這個(gè)服務(wù)器只是用于NAT,不是代理服務(wù)器,為了提高NAT轉(zhuǎn)發(fā)速率,就要完全避免讀寫硬盤,而物理內(nèi)存使用完了后,系統(tǒng)就會(huì)使用交換區(qū)來存儲(chǔ)數(shù)據(jù),整個(gè)服務(wù)器速度就會(huì)被拖慢,直至死機(jī)。因此在這里完全不要使用交換區(qū)。


Q
.其他linux版本能否使用?


A
.Sure,推薦CentOS主要是方便不熟悉Linux系統(tǒng)的朋友,避免朋友們盲目地找不同的linux版本測試。這里仍然強(qiáng)調(diào)一下,使用2.6的內(nèi)核,不要使用2.4內(nèi)核,2.6的內(nèi)核能查看并發(fā)連接數(shù),并且NAT效率比2.4高。


Q
.為什么我的NAT服務(wù)器不行?


A
.這個(gè)問題很復(fù)雜,我現(xiàn)在回答不了^_^,請上CU的論壇(http://www.72891.cn)發(fā)帖子。發(fā)郵件給我的話,就要有點(diǎn)耐心等回復(fù)了


感謝

所有在CU的朋友,特別是Platinum和JohnBull,給我提出很多有用的參考意見。


[ 本帖最后由 ippen 于 2008-7-7 23:38 編輯 ]

論壇徽章:
0
2 [報(bào)告]
發(fā)表于 2008-07-07 21:36 |只看該作者
其實(shí)這個(gè)帖子去年就寫好了,因一些個(gè)人原因,一直沒有發(fā)布,現(xiàn)在將做過的測試總結(jié)一下,希望能幫助有需要的TX

[ 本帖最后由 ippen 于 2008-7-7 21:39 編輯 ]

論壇徽章:
0
3 [報(bào)告]
發(fā)表于 2008-07-07 22:01 |只看該作者
謝謝 ippen 的激情奉獻(xiàn)!
不過我對里面的幾個(gè)地方有些疑問,還請多指教 ^_^

1、盲目加大 net.ipv4.netfilter.ip_conntrack_max 會(huì)有副作用嗎?
經(jīng)過測試發(fā)現(xiàn),如果 iptables 里面加了過多規(guī)則的話,max 數(shù)量過大,連接數(shù)非常多的時(shí)候會(huì)造成內(nèi)存溢出,不知道 ippen 是否遇到過?

2、修改 buckets 數(shù)量是否有效,是否有副作用?
代碼里如果 > 1GB 就分配一定數(shù)量的 buckets,(我的內(nèi)核 2.6.23 是 16384)
這個(gè)改大會(huì)減少 hash 表碰撞,但是過大會(huì)有多大用處不是很清楚,不知會(huì)不會(huì)溢出(內(nèi)存小于 1GB 的時(shí)候也賦值為 8192)
另外不知道內(nèi)核為什么在內(nèi)存 > 1GB 的時(shí)候?qū)懰,而不是根?jù)內(nèi)存繼續(xù)算下去

3、不知道 ippen 兄是否用 sar 觀察過每秒的包數(shù)

4、不知道當(dāng)時(shí)測試時(shí) iptables 的規(guī)則數(shù)量有多少,除了 NAT 以外是否還做了繁重的過濾工作


去年 ippen 兄寫了一篇關(guān)于 iptables 不能完美支持雙 CPU 的貼子,從中就提到了大負(fù)載狀況的 NAT 架設(shè),一直很感興趣,今日又見此大作,萬分高興:)

[ 本帖最后由 platinum 于 2008-7-7 22:03 編輯 ]

論壇徽章:
1
2015元宵節(jié)徽章
日期:2015-03-06 15:50:39
4 [報(bào)告]
發(fā)表于 2008-07-07 23:00 |只看該作者
又長見識(shí)了,測試一把

論壇徽章:
0
5 [報(bào)告]
發(fā)表于 2008-07-07 23:32 |只看該作者
原帖由 platinum 于 2008-7-7 22:01 發(fā)表
謝謝 ippen 的激情奉獻(xiàn)!
不過我對里面的幾個(gè)地方有些疑問,還請多指教 ^_^

1、盲目加大 net.ipv4.netfilter.ip_conntrack_max 會(huì)有副作用嗎?
經(jīng)過測試發(fā)現(xiàn),如果 iptables 里面加了過多規(guī)則的話,max 數(shù) ...

哈哈,platinum兄的記性真好

對于platinum兄的問題,我盡量回答,因?yàn)橛行﹩栴}我也是同樣存在疑問的

1.加大 net.ipv4.netfilter.ip_conntrack_max 確實(shí)會(huì)有副作用,規(guī)則過多造成內(nèi)存溢出的問題我遇到過,控制這個(gè)值的大小能避免內(nèi)存溢出。目前這個(gè)數(shù)值是經(jīng)過我測試,認(rèn)為設(shè)備能夠承受的,實(shí)際使用中也能到達(dá)這個(gè)最大值,系統(tǒng)也是正常的。
2.修改buckets的大小作用似乎不明顯,增大一些,系統(tǒng)的穩(wěn)定性要好一點(diǎn),副作用目前還沒發(fā)現(xiàn)。源代碼里,內(nèi)存〉1GB,將buckets寫死為8192(centos 4.6內(nèi)核),我也不知道是什么原因,也想找個(gè)高手了解一下。我推斷可能是一個(gè)系統(tǒng)設(shè)計(jì)的考慮,即Linux不只是用作網(wǎng)絡(luò)用途,所以要保留內(nèi)存給其他應(yīng)用,和限制網(wǎng)絡(luò)部分使用內(nèi)存量,基于我的使用方式,完全只作為網(wǎng)絡(luò)設(shè)備使用,讓網(wǎng)絡(luò)占大部分內(nèi)存應(yīng)該是可行的。當(dāng)然,只是我的猜測而已,希望有高手能回答這個(gè)問題。
3.sar沒有用過
4.目前使用的NAT服務(wù)器,大約有50條規(guī)則,30條在forward表,20條在postrouting表,主要都是針對ip地址的accept和drop,設(shè)備只做nat,沒有其他繁重的過濾工作

補(bǔ)充一點(diǎn),上面提到的這些參數(shù),都是通過實(shí)際使用總結(jié)出來的,現(xiàn)在nat服務(wù)器仍然在運(yùn)行。在實(shí)際使用中,服務(wù)器達(dá)到的最大值是:320Mb/s的nat流量,最大并發(fā)連接數(shù)26萬,這個(gè)數(shù)值在應(yīng)用中基本上維持了2個(gè)月,系統(tǒng)基本穩(wěn)定,但后來我認(rèn)為這個(gè)數(shù)值過分接近極限,出現(xiàn)突發(fā)流量時(shí)會(huì)出現(xiàn)假死現(xiàn)象,所以將流量和并發(fā)連接數(shù)下調(diào)了。
現(xiàn)在在nat系統(tǒng)中,唯一不好處理的就是突發(fā)小包沖擊,容易導(dǎo)服務(wù)器cpu過高,出現(xiàn)假死現(xiàn)象。

有空看能不能找到當(dāng)時(shí)最大值的MRTG圖貼給大家看看

[ 本帖最后由 ippen 于 2008-7-7 23:41 編輯 ]

論壇徽章:
5
IT運(yùn)維版塊每日發(fā)帖之星
日期:2015-08-06 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2015-08-10 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2015-08-23 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2015-08-24 06:20:00IT運(yùn)維版塊每日發(fā)帖之星
日期:2015-11-12 06:20:00
6 [報(bào)告]
發(fā)表于 2008-07-08 06:18 |只看該作者
首先感謝IPPER的大作。但是我也有如下疑問:

1、并發(fā)連接數(shù)大約16萬。這個(gè)測試過嗎?外網(wǎng)的地址池配置了幾個(gè)地址。
2、后來IPPER說最大并發(fā)連接數(shù)達(dá)到26萬,這個(gè)又是怎么計(jì)算出來的哦。

論壇徽章:
0
7 [報(bào)告]
發(fā)表于 2008-07-08 11:53 |只看該作者
學(xué)習(xí)中。。。。。。

以前參考過這篇文章
http://www.wallfire.org/misc/netfilter_conntrack_perf.txt

論壇徽章:
0
8 [報(bào)告]
發(fā)表于 2008-07-08 12:06 |只看該作者
原帖由 ippen 于 2008-7-7 21:36 發(fā)表
構(gòu)建一臺(tái)大容量的NAT服務(wù)器
Ippen Yang
(ippen@21cn.com)

1.前言
本文檔主要描述如何利用Linux構(gòu)建一臺(tái)能力比較強(qiáng)的NAT服務(wù)器,并發(fā)連接數(shù)大約16萬,流量200M-300M,如果你需要一個(gè)流量更高的NAT設(shè)備,請 ...


對于大容量NAT服務(wù)器,發(fā)表一下個(gè)人看法,僅供大家拍磚。

1、主要思路還是加大hash表容量,縮短連接超時(shí)時(shí)間等等——因?yàn)槭O碌木褪莾?yōu)化hash表的建立、查找算法等等了,但是這些不是使用者做的,希望Netfilter的開發(fā)團(tuán)隊(duì)在性能方面下點(diǎn)功夫(曾經(jīng)我有想過,利用網(wǎng)絡(luò)訪問的親和性的特性,加一個(gè)cookie表,不過一直沒有時(shí)間來嘗試);

2、Netfilter對于大容量,例如樓主說的16W,表現(xiàn)確實(shí)不太好。因?yàn)檫B接跟蹤的效率的確不咋樣,再加上NAT,雪上加霜?焖俳鉀Q方法之一就是提升硬件配置。唉……

3、我用雙/多CPU(核),想過一個(gè)網(wǎng)卡綁死一個(gè)CPU(因?yàn)橹袛嘤H和性的問題),不知能不能進(jìn)一步提升效率。想過,但是還沒有試過。

3、個(gè)人認(rèn)為,像BSD那樣,NAT不依賴于連接跟蹤的實(shí)現(xiàn)而單獨(dú)實(shí)現(xiàn),也就是說,單使用NAT,不使用連接跟蹤,只有想用的時(shí)候再用,我想肯定會(huì)大大提升NAT的轉(zhuǎn)發(fā)效率的。

4、網(wǎng)上有很多對比Linux/BSD/Windows做網(wǎng)關(guān)時(shí)的網(wǎng)絡(luò)性能的,我認(rèn)為大都不太公平——因?yàn)長inux是使用了連接跟蹤的,單是開這一項(xiàng),性能下降30%-40%(在我的測試環(huán)境中)。

[ 本帖最后由 獨(dú)孤九賤 于 2008-7-8 12:07 編輯 ]

論壇徽章:
0
9 [報(bào)告]
發(fā)表于 2008-07-08 13:25 |只看該作者
問一下九賤兄
對于 TCP 來說,超時(shí)就意味著不再維護(hù)它的 seq,這里就不說了,說說 UDP
如果 udp 的 timeout 設(shè)置過小,的確 conntrack 表不會(huì)有過多 udp 信息存留,但對于 NAT 有什么負(fù)面影響嗎?
換言之,netfilter 的 timeout 判斷時(shí)間小于實(shí)際 app 的時(shí)間的話,netfilter 會(huì)不會(huì)判斷失誤而惘做處理?

[ 本帖最后由 platinum 于 2008-7-8 13:32 編輯 ]

論壇徽章:
0
10 [報(bào)告]
發(fā)表于 2008-07-08 14:42 |只看該作者
參看一下,看各位討論~~~
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號(hào)-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號(hào):11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會(huì)會(huì)員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP