推荐给好友 上一篇 | 下一篇

利用pf+relayd搭建OpenBSD4.3负载均衡防火墙

一,OpenBSD-4.3安装和准备BSD爱好者乐园p W OGpSV]9G+h
安装方法精化贴上很多,这里不作重复介绍。BSD爱好者乐园'e(`5v ~G@
准备设备:BSD服务器一台、负载均衡测试服务器3台、压力测试服务器2台BSD爱好者乐园C}vK:TB X8Px
BSD服务器选购了Lenovo R515 1U机架式服务器
t z;VlfoCPU:4核 *2
7k%o8k$jLx&zK内存:1G *4BSD爱好者乐园?)yJ"Hr`C;\ j
硬盘:73G 1.5K转速 * 3 (做raid 6)BSD爱好者乐园;g"iCwT&b ~
测试服务器均为Dell GX620个人电脑BSD爱好者乐园f)P?d'u#q~.|7f

;p X~!N&^二,OpenBSD系统优化
@K)S9^D0~0N1,关闭无用服务,如sendmail,inetd等BSD爱好者乐园z4avOIplru(l
修改rc.conf关闭不需要启动的服务BSD爱好者乐园S*Hc:u6sk
#vi /etc/rc.conf   BSD爱好者乐园4I S~%nTju-d |
sendmail_flags=NO
'wz @sv|Cinetd=NO
S^F}#^ D:lC+b其他如yp也可以关闭。
[)IT'njHJ6C1Xy
'a2c~V|&WC+q{!V NS2,优化系统内核参数(参考,视自身情况而定)BSD爱好者乐园8rj/S#?De U jPB\
#vi /etc/sysctl.confBSD爱好者乐园)f4b,A4[KZ s3?4[
打开forwarding
3\(d;{1W$`3gaW P7ynet.inet.ip.forwarding=1      BSD爱好者乐园%OE+_X+J~m9vx8e)S
net.inet.ip.mforwarding=1
l[ _bX|Z%bnet.inet6.ip6.forwarding=1
~%e"c&qQ3X&^net.inet6.ip6.mforwarding=1BSD爱好者乐园S8Q#|o?ID2d!u4V

zF3g&{u优化内核参数
Q'vC%r mS'?#*** Edit by sunwaylove *****#BSD爱好者乐园Y k}1Bwpv(Z
#net.inet.ip.sourceroute=0BSD爱好者乐园i&H3TR C"w`
net.inet.tcp.drop_synfin=1BSD爱好者乐园!Ju]?8Z@
kern.maxvnodes=32768BSD爱好者乐园{Y;E%S~~E,m
kern.shminfo.shmall=32768BSD爱好者乐园~&}9zP&cZ
kern.somaxconn=65535BSD爱好者乐园5_ G9^#E ]8VE
kern.sominconn=2048
gJ2Q2]q*OR+gkern.maxproc=65535
@~n0}eZ(| pkern.maxfiles=65535BSD爱好者乐园c8f6_/X(T? P
kern.maxclusters=32768BSD爱好者乐园F `mr#g-d \V
#kern.securelevel=3
ygHf5Pvnet.inet.tcp.sendspace=65535BSD爱好者乐园$s6OIRl3a^\!_
net.inet.tcp.recvspace=65535BSD爱好者乐园7~_'BT-F
net.inet.udp.sendspace=65535BSD爱好者乐园wZp9|jV5Ck)f&V
net.inet.udp.recvspace=65535
;A6P q c'xAP
1^+k5t{ tP@D'l$I@三,系统安全配置BSD爱好者乐园 {^%[1A ThJq
1,安装SSH2
7S8x+mco@安装最新的SSH2,替换自带OpenSSH
Pj y#oa3F7v3MR#tar zxf ssh-3.2.9.1.tar.gz
wwBxT0c R6O#cd ssh-3.2.9.1BSD爱好者乐园v)ei~1[ j
#./configure
3l1wh3P;H#makeBSD爱好者乐园PW_2y:PSS2A
#make install

TMw{ }tB*p`
u*zQ\'O U4KY[2,配置sshd2服务BSD爱好者乐园5?-A\7m'A V:n\3C0f
禁止root用户登录,修改端口为2222。BSD爱好者乐园?Nb'd4Sn
#cd /etc/ssh2;vi sshd2_config
6V+UwfATW {:Y        Port                            2222BSD爱好者乐园7j;VL;pN?%H3Ew
        PermitRootLogin                 nopwd
;e8\9St,_ ^BSD爱好者乐园:M)b0AK \x S
配置sshd2为默认启动
kbA.M6R.\e;TU#vi /etc/rc
x"x4D ~ P&r~*M@if [ X"${sshd_flags}" != X"NO" ]; then
.c F]x-E        echo -n ' sshd2';               /usr/local/sbin/sshd2 ${sshd_flags};BSD爱好者乐园 @MLJ3N [-Cl
fiBSD爱好者乐园2mr3f8D5};](x
BSD爱好者乐园IZ4b1W4]jW
重起后,上传个人证书,修改为只允许证书方式登陆
\0r:{8h,Z*h){-zh#vi /etc/ssh2/sshd2.confBSD爱好者乐园T&L+SVc l&O
        AllowedAuthentications          publickey

四,PF防火墙+NAT负载均衡BSD爱好者乐园6J,Q/j%P5D:P ]
网络介绍:
l5]*uGY$sk0^}rP内网均衡设备(3台)----------em0| OpenBSD |em1---------外网测试设备(2台)BSD爱好者乐园*{N6s6B9e2_%JG(T/r
BSD爱好者乐园m|+h5r%?xL
内网均衡设备:{ 10.1.222.95, 10.1.222.97, 10.1.222.98 } port 7777
(g#zT2m)Rx外网测试设备:{ 192.168.251.10, 192.168.251.11 }
#u+u,u-F xzOpenBSD—内网卡em0:10.1.222.105
/LW jO^ Gl KcOpenBSD—外网卡em1:192.168.251.6BSD爱好者乐园7wuMZ;aJ:oShW
外网均衡地址:192.168.251.2 绑定在em1网卡上BSD爱好者乐园hP6NY0]E$z
测试的应用名称为webjy 端口为 7777
6z0MqZt v/e&_ sBSD爱好者乐园6Z1s PD^`;B4K+W/sD
配置外网卡多IP
X4n#vIl-j%p0rbash-2.04# vi /etc/hostname.em1BSD爱好者乐园9jtY$Q"`"L&`
inet 192.168.251.6 255.255.255.0 NONEBSD爱好者乐园opm2c7u2^!h
inet alias 192.168.251.2 255.255.255.255
/z4Pz4UA'gfinet alias 192.168.251.3 255.255.255.255
y t:L#h5?&Noinet alias 192.168.251.4 255.255.255.255
)RV/t\p'E{^inet alias 192.168.251.5 255.255.255.255BSD爱好者乐园8B2uy/S!C!F

4a!|j3Xvb] E:n设置rc.conf中pf为yes
j^8Kg4L~8O配置pf
5lKaHZlY#vi pf.confBSD爱好者乐园3y"yS-^R

!@.WCM |{mde{\# ******************************************** #BSD爱好者乐园,V?N Z+bTK
#            Edit By Sunwaylove         #
Y"CV1d z x-kL#             Support:010-8513XXXX             #BSD爱好者乐园)D4x/FDp${LD
#             Mail:sunwaylove@163.com          #BSD爱好者乐园3g{4cr4xDp8JJ.L
# ******************************************** #BSD爱好者乐园2s6b#m:V7qCR%AeK
# ********* Start Configure ******************* #
#Y.Bs-]_BL:e#{ext_if="em1"
Yzo:v5I&Oc/b/yint_if="em0"BSD爱好者乐园.|1t7dz%wu$y%L7s
ext_tc50="192.168.251.2"BSD爱好者乐园x+b X;jJKaz
tc50_hosts="{ 10.1.222.95, 10.1.222.97, 10.1.222.98 }"
VNH)y tnLJtable <testhost> { 10.1.222.0/24 }
Z1Z(qlp1S$^Stable <localhost> { 10.1.0.0/16 }
(cEdLYX
Lm NYE L]# ********* Better pf-network ******************* #
y9{K s xDDset timeout {interval 3,frag 10}BSD爱好者乐园 FJ)^T/v5^/b
set timeout {tcp.first 10,tcp.opening 2,tcp.established 600}BSD爱好者乐园#S_/Q(M"kZ)M
set timeout {tcp.closing 20,tcp.finwait 10,tcp.closed 10}
7v'z.O4D(G3fPs}K}set timeout {udp.first 20,udp.single 10,udp.multiple 10}BSD爱好者乐园WJ i[/|,Q
set timeout {icmp.first 10,icmp.error 5}BSD爱好者乐园9e&G MxUh N;F,X _"z G6c
set timeout {other.first 20,other.single 10,other.multiple 20}
,xi"S#w _4S%lHtSkset timeout {adaptive.start 0,adaptive.end 0}
:^a:I&l7k tXset limit states 1000000
I:U%r~${/G;_set limit frags1000000    #次数为单个node(IP)并发数量BSD爱好者乐园qb3Q;w RN
set limit src-nodes 1000000BSD爱好者乐园aDL^+i,|
set limit tables 100000
L{(a,y[Hset limit table-entries 1000000BSD爱好者乐园!m } `&?%v Q;q
set optimization aggressiveBSD爱好者乐园3A4BR_'uF(h$j'j
set block-policy drop
#_ C*@!_&f \s4xset require-order yes
'}z-u FkR |mset debug noneBSD爱好者乐园oHT RAe"t
set skip on loBSD爱好者乐园U6a_&Na*H3R#c|k
scrub in all
;[6zJ:Z9GOBSD爱好者乐园K!O5W7a(x_Z/X5G;Q
# ********** NAT Configure ******************* #
P knV*Gy{P#rdr-anchor "relayd/*"BSD爱好者乐园a5fh,}1k
#nat on $ext_if inet from any to $ext_tc50  -> 10.1.222.97BSD爱好者乐园JC2?/{:Z G9e2V8i3A
rdr on em1 proto tcp from any to $ext_tc50 port 7777 -> $tc50_hosts port 7777BSD爱好者乐园/sz.wB-E7j
# 以下NAT只是测试方便远程操作和传输文件方便而设置 正式场合无意义#BSD爱好者乐园6\io$D O e
rdr on em1 proto tcp from any to $ext_tc50 port 139 -> 10.1.222.97 port 139BSD爱好者乐园9B&i9z$eU
rdr on em1 proto tcp from any to $ext_tc50 port 445 -> 10.1.222.97 port 445BSD爱好者乐园7a+Apr/`-mT
rdr on em0 proto tcp from any to $int_if port 3389 -> 192.168.251.10 port 3389
fl#l:{w9Prdr on em0 proto tcp from any to $int_if port 3399 -> 192.168.251.11 port 3389BSD爱好者乐园.I?:C(M3I c1h*t

h(@7f7nKcbs!Q# ********** PF  Configure ******************* #BSD爱好者乐园/Suj;m4~2V_n l
# ***** Deny all *****
W$ktN$M%~5_3{block in allBSD爱好者乐园ZQ4Y4y8vyI
block out allBSD爱好者乐园 ] W9M\^ U_zr3Z

UGdk2ZJ# ***** Default Allow *****BSD爱好者乐园%\v8I9edQ\
pass quick on lo0 allBSD爱好者乐园,H]cN,oqN@V
antispoof quick for { lo, $int_if }BSD爱好者乐园2jhN#RN&t Ii8{#J
pass in on $ext_if inet proto 47 all
.j$@!o/?tpass in on $ext_if inet proto udp from any to any port 500BSD爱好者乐园RDH W c
pass in on $ext_if inet proto icmp from any to anyBSD爱好者乐园)h1USM;H9bZ1V2P
pass out on $ext_if inet proto 47 allBSD爱好者乐园sAa0iKiT
pass out on $ext_if proto tcp all modulate state flags S/SA
Y1ve*HV1ewupass out on $ext_if proto { udp, icmp } all keep state
a4Cgk3@g\X
\ xIx#c GZ# ***** Allow testhost to pass *****
yiS D%C3U dZ*upass in on $int_if inet from <localhost> to any
{RDK2K#F:A4J4?pass out on $int_if inet from any to <localhost>BSD爱好者乐园8b?/mf]z ^
#pass on $int_if inet from any to any
o-c({!W#dBSD爱好者乐园y'kq,dX
# ***** Allow sunwaylove to pass *****BSD爱好者乐园"^*k&] v2d\'G&r$g(sC M
pass in quick on $int_if inet from 10.1.242.123 to anyBSD爱好者乐园K7S+d"}`S0t
pass in quick on $int_if inet from 10.1.29.138 to anyBSD爱好者乐园)V|A7fF@!@
pass out quick on $int_if inet from any to 10.1.242.123
zZx0K H B/aQpass out quick on $int_if inet from any to 10.1.29.138
D#V)bKLBSD爱好者乐园b8dh H T
# ***** Allow Proc port to pass *****
L7W0O eu]pass in on $ext_if inet proto tcp from 218.247.130.0 to any port 2222 flags S/SA keep state
/`'rBY)b ~-Hpass in on $ext_if inet proto tcp from any to any port 7777BSD爱好者乐园Op:W3pO
pass in on $ext_if inet proto tcp from any to any port 139BSD爱好者乐园}*n7u2jkZS]
pass in on $ext_if inet proto tcp from any to any port 445
|,e{)D]BSD爱好者乐园 g@7y-D!L&dRFKI
测试PF-NAT均衡
:t },oG5D*U+qrdr on em1 proto tcp from any to $ext_tc50 port 7777 -> $tc50_hosts port 7777
(h6Q-UU/\9Vs,eBSD爱好者乐园/W.`8e)ci~|
2台测试机发送方:连接数最后各为10000,总共20000BSD爱好者乐园z}gsA7l
3台测试机接收方:均衡后连接数各为6666左右。
BSD爱好者乐园7fb-^ij
BSD爱好者乐园 h/q B"]4}?
这时OpenBSD的性能状态:
/R1uh!N \~"I Pl.W#top
ea1t9NAIload averages:  0.08,  0.10,  0.08                                                                            19:08:15BSD爱好者乐园vC.^1za4~
16 processes:  1 running, 14 idle, 1 on processor
I`;Dr]CPU0 states:  0.0% user,  0.0% nice,  0.0% system,  1.3% interrupt, 98.7% idleBSD爱好者乐园Q0J9@%cjY'L3I#{1y
CPU1 states:  0.0% user,  0.0% nice,  0.0% system,  0.0% interrupt,  100% idle
Nl(oB\3\3C:GLCPU2 states:  0.0% user,  0.0% nice,  0.0% system,  0.0% interrupt,  100% idleBSD爱好者乐园!?a8NcZ
CPU3 states:  0.0% user,  0.0% nice,  0.0% system,  0.0% interrupt,  100% idle
]2ef|&og-Fm$YXCPU4 states:  0.0% user,  0.0% nice,  0.0% system,  0.0% interrupt,  100% idleBSD爱好者乐园 {e9J\FM`e
CPU5 states:  0.0% user,  0.0% nice,  0.0% system,  0.0% interrupt,  100% idleBSD爱好者乐园7Y`#c0?B-BB
CPU6 states:  0.0% user,  0.0% nice,  0.0% system,  0.0% interrupt,  100% idleBSD爱好者乐园9On!f1wKQjj+D
CPU7 states:  0.0% user,  0.0% nice,  0.0% system,  0.0% interrupt,  100% idleBSD爱好者乐园QxBk8EQ5GF \
Memory: Real: 5804K/74M act/tot  Free: 2943M  Swap: 0K/1028M used/tot
$b'T+P'[R ^6xA5B_.PBSD爱好者乐园4N+c4{xw)t:n;~f
  PID USERNAME PRI NICE  SIZE   RES STATE    WAIT      TIME    CPU COMMANDBSD爱好者乐园p ]eF%JH_"?v
32611 root      28    0 1460K 1792K run/0    -         0:00  0.00% sshd2BSD爱好者乐园 Kv'cs*fY9ZM#~(s(Z
29775 root       2    0  532K  428K idle     netio     0:00  0.00% pflogdBSD爱好者乐园,Sa Wp lJ] v
23989 sunwei    10    0  584K 1196K idle     wait      0:00  0.00% bash
;w8CjB"A2@%sc16629 _syslogd   2    0  384K  748K sleep/0  poll      0:00  0.00% syslogd
d0w;D$E|19339 root      10    0  584K 1300K sleep/0  wait      0:00  0.00% bashBSD爱好者乐园w(Sg6^:O7s|
27134 root       2    0  564K  796K sleep/0  select    0:00  0.00% cron
6yu#^.f+v-@Ro'y32686 _pflogd    4    0  596K  340K sleep/0  bpf       0:00  0.00% pflogdBSD爱好者乐园 R2eF,kR
12036 root       3    0  320K  724K idle     ttyin     0:00  0.00% gettyBSD爱好者乐园 v7e @6L3h1u/a
16870 root       3    0  404K  708K idle     ttyin     0:00  0.00% gettyBSD爱好者乐园*^PT$BB
24894 root       3    0  288K  712K idle     ttyin     0:00  0.00% gettyBSD爱好者乐园~5Q}v5]!juh3U$FR-@
24227 root       3    0  356K  720K idle     ttyin     0:00  0.00% gettyBSD爱好者乐园.T5h d}XrY_'`
2902 root      28    0  516K 1416K onproc/0 -         0:00  0.00% top
b7d9[^:\ [H14010 root       3    0  348K  716K idle     ttyin     0:00  0.00% gettyBSD爱好者乐园u V#K_}0_,c$kY9}
    1 root      10    0  404K  332K idle     wait      0:00  0.00% init
pTZs*Y5123 root       2    0 1292K 1144K idle     select    0:00  0.00% sshd2BSD爱好者乐园qV_8}R}G@\
5822 root       2    0  340K  668K idle     netio     0:00  0.00% syslogdBSD爱好者乐园Ft(}9VE(n.i

[$|;kO8s"pq ^#vmstat –w 1
[q?!Q!Sprocs    memory       page                    disks    traps          cpuBSD爱好者乐园 UW6d(FC
r b w    avm     fre  flt  re  pi  po  fr  sr sd0 cd0  int   sys   cs us sy id
.R7~+gx&bU0 0 0   5520 3013824    7   0   0   0   0   0   0   0  839    49   16  0  0 100BSD爱好者乐园%s8S{N$]kT7wO
0 0 0   5520 3013824    7   0   0   0   0   0   0   0  840    23   17  0  0 100BSD爱好者乐园2w{-o#j3O1YLa
0 0 0   5520 3013824    7   0   0   0   0   0   0   0  855    23   12  0  0 100
7}Fnaj&E;^ g$t0 0 0   5520 3013824    7   0   0   0   0   0   0   0  848    23   12  0  0 100
UN8t0q6j2^8] \0 0 0   5520 3013824    7   0   0   0   0   0   0   0  838    23   12  0  0 100
X\&iq)X]p$YW0 0 0   5520 3013824    7   0   0   0   0   0   0   0  841    23   12  0  0 100
:S3A'g1y? YnK0 0 0   5520 3013824    7   0   0   0   0   0   0   0  836    23   13  0  0 100
f)R8? z `0J0 0 0   5520 3013824    7   0   0   0   0   0   0   0  863    23   13  0  0 100BSD爱好者乐园@k"e,L{E(R AU)H-h
0 0 0   5520 3013824    7   0   0   0   0   0   0   0  828    23   12  0  0 100BSD爱好者乐园`E"?8u6a1rs a;d

rVYn,eHCPU-8个内核 基本闲置BSD爱好者乐园p3M[(Bhd Um d;i
内存也基本闲置状态
\#Y"W}kTM(^ x3I测试成功!
BSD爱好者乐园#[a h1} I,A
五,Relayd负载均衡(3层)BSD爱好者乐园dH-q#_ l3G AM
1,配置PF的NAT策略
Y _'b!C HM-[ys/k#vi /etc/pf.conf
FG ~2Z:n&|)]将以上pf修改NAT规则,开启relayd的NAT,关闭原有RDR的均衡
4?%F1rdY m&X} P |# ********** NAT Configure ******************* #BSD爱好者乐园Fq6Eb)T
rdr-anchor "relayd/*"
(W#W+oy%F3o]? FM#nat on $ext_if inet from any to $ext_tc50  -> 10.1.222.97
,`)Vk pp y#rdr on em1 proto tcp from any to $ext_tc50 port 7777 -> $tc50_hosts port 7777BSD爱好者乐园+pI \8`*E4_8i

'YtV}H6b)ll2,配置relayd(3层)均衡功能BSD爱好者乐园x/Di[N5rP? v"k
#vi /etc/relayd.confBSD爱好者乐园+WV:Iy$qH"t*X
BSD爱好者乐园U)t&eu4]'l
# ******************************************** #BSD爱好者乐园;l iP+M1hV
#             Edit By Sunwaylove         #
e e$P?LV4[3r;i#             Support:010-8513XXXX             #BSD爱好者乐园'a*j6u_z7IJ
#             Mail:sunwaylove@163.com          #BSD爱好者乐园M;x+S7g/`"~6BL"E
# ******************************************** #BSD爱好者乐园;WyQB0Pp_9k
BSD爱好者乐园&N0}xSfC.O
#***** Macros *****
0N]Bh`uD,S#oext_addr="192.168.251.2"
Ed*E HF4u_tc50_hosts1="10.1.222.98"
^AUf,s#Eqtc50_hosts2="10.1.222.97"BSD爱好者乐园P0v2R[Y4OS%q!] xn
tc50_hosts3="10.1.222.95"BSD爱好者乐园dx3C x^l

n7rNA+^,|#***** Global Options *****BSD爱好者乐园+T `v5y*Z4xH'QD[j
interval 10BSD爱好者乐园)]yfd*yYY8V
timeout 1000
'zE"q:F6Yjsprefork 5
#|q5ca5YWJ0s
%G%b2_X@ c!o# Each table will be mapped to a pf table.
B*v `&WX:ftable <webjy> { $tc50_hosts1, $tc50_hosts2, $tc50_hosts3 }
#fhRP \\(dJ$p/ytable <fallback> { 127.0.0.1 }
6f4q MLf'h-j+V*xBSD爱好者乐园j1` aa+T
# Services will be mapped to a rdr rule.
yC?'[+Kb [c F(r4m M,f
R5j~4T`+k7waTredirect webjy {
x"|$__0{H'P        # Run as a simple TCP relay
(_'d3K*v2h7u-v        listen on $ext_addr port 7777BSD爱好者乐园'^So4P O;_k0^
        tag relayd
IEr@ZIBSD爱好者乐园Xu6B6D'v
        forward to <webjy> check tcp
,`,u*W7`0N#        forward to <webjy> port 7777 mode roundrobin check tcpBSD爱好者乐园n3f%Pq"Q
#       forward to <fallback> check icmp
E _O3]:mB?9I}
2?l?%LW
c`9Mb.bX启动relaydBSD爱好者乐园+e c?"{!t k[Q#i
#relayd –f relayd.confBSD爱好者乐园9[pW5~"n5A
BSD爱好者乐园]YFMx_k
观察启动状态BSD爱好者乐园q,H/U3_$\ c:?p%vp
#relayctl show summaryBSD爱好者乐园x.D%m!U n/wY#i+O
bash-2.04# relayctl show summary
S'yjA%_.XPId      Type            Name                            Avlblty Status
)ev/Z y'G~0       redirect        webjy                                   activeBSD爱好者乐园)r RO[1w
2       table           webjy:7777                              active (3 hosts up)
:u1D/y%oAHi6       host            10.1.222.98                   100.00% up
g,s+gh| ?5       host            10.1.222.97                   100.00% up
#Z HQ/G6t4       host            10.1.222.95                   100.00% upBSD爱好者乐园B|J0MB*Hj

;RD-B#xb$t"B*X4EN开启测试压力工具,连接并发数总共20000BSD爱好者乐园]1XV$?w0a8}
这时候BSD状态:
4IB#U[5E^9Ci g:}4D#top
1X-jW`'W y-g'xmL@load averages:  0.12,  0.18,  0.15                                                                            19:20:55
t!} [@0w32 processes:  1 running, 30 idle, 1 on processorBSD爱好者乐园"dB5j [2RU2~f+a7^
CPU0 states:  0.0% user,  0.0% nice,  0.0% system,  0.6% interrupt, 99.4% idleBSD爱好者乐园(^w4M;G`Lg
CPU1 states:  0.0% user,  0.0% nice,  0.0% system,  0.0% interrupt,  100% idle
6y5[2dh'U.VCPU2 states:  0.0% user,  0.0% nice,  0.0% system,  0.0% interrupt,  100% idle
Ys7\z@M*^fCPU3 states:  0.0% user,  0.0% nice,  0.0% system,  0.0% interrupt,  100% idleBSD爱好者乐园Zi/` R!n4U
CPU4 states:  0.0% user,  0.0% nice,  0.0% system,  0.0% interrupt,  100% idle
r1p'{@ [`'h3N$xQ+mZCPU5 states:  0.0% user,  0.0% nice,  0.0% system,  0.0% interrupt,  100% idleBSD爱好者乐园7Y\/f1T"Q)M'i
CPU6 states:  0.0% user,  0.0% nice,  0.0% system,  0.0% interrupt,  100% idleBSD爱好者乐园`3Q1@0p{v4p
CPU7 states:  0.0% user,  0.0% nice,  0.0% system,  0.0% interrupt,  100% idleBSD爱好者乐园[0jB1D8T
Memory: Real: 12M/84M act/tot  Free: 2933M  Swap: 0K/1028M used/totBSD爱好者乐园Tp:\i V prt*s

{)Ip sDd!t%P+O$Q1s  PID USERNAME PRI NICE  SIZE   RES STATE    WAIT      TIME    CPU COMMANDBSD爱好者乐园8R o;F(u I)k7d
32611 root      28    0 1460K 1792K run/0    -         0:00  0.00% sshd2
'o!bc aV`N29775 root       2    0  532K  428K idle     netio     0:00  0.00% pflogdBSD爱好者乐园H?Q0_!d&d3Z-v4X
23989 sunwei    10    0  584K 1196K idle     wait      0:00  0.00% bash
F8w;] @([o SkJc16629 _syslogd   2    0  384K  748K sleep/0  poll      0:00  0.00% syslogdBSD爱好者乐园-_R*^9w)L7H4f
19339 root      10    0  584K 1304K sleep/0  wait      0:00  0.00% bash
!H3b|Y r w DmB&[27134 root       2    0  564K  796K idle     select    0:00  0.00% cronBSD爱好者乐园s7Jf#^MCo
32686 _pflogd    4    0  596K  340K sleep/0  bpf       0:00  0.00% pflogdBSD爱好者乐园 L-InU;g/` PXq
27664 _relayd    2    0  712K 1208K idle     kqread    0:00  0.00% relayd
$\+v5R1J,D20595 _relayd    2    0  712K 1292K idle     kqread    0:00  0.00% relaydBSD爱好者乐园t DMD_4b7yqkR
31953 _relayd    2    0  708K 1256K sleep/0  kqread    0:00  0.00% relayd
H!aAl9s&zjz.M]9744 _relayd    2    0  604K 1204K idle     kqread    0:00  0.00% relaydBSD爱好者乐园h$H(~*K6bHT{
12731 _relayd    2    0  604K 1320K idle     kqread    0:00  0.00% relaydBSD爱好者乐园@/Zuw*g
19210 _relayd    2    0 1084K 1608K sleep/0  kqread    0:00  0.00% relayd
1r,K9P#_8{},`'X0x16058 _relayd    2    0  608K 1224K idle     kqread    0:00  0.00% relayd
^ aGz1aT9807 _relayd    2    0  708K 1196K idle     kqread    0:00  0.00% relayd
.~2\5K,~5f$VTNE@r28725 _relayd    2    0  712K 1208K idle     kqread    0:00  0.00% relaydBSD爱好者乐园N/o QHV1Rww _
  840 _relayd    2    0  604K 1288K sleep/0  kqread    0:00  0.00% relayd
"W[ON3g18995 root       2    0 1032K 1536K sleep/0  kqread    0:00  0.00% relayd
Vg&y0iG3~6dA22692 root       2    0  936K 1572K sleep/0  kqread    0:00  0.00% relayd
%d&H#C0bQ y:Q12036 root       3    0  320K  724K idle     ttyin     0:00  0.00% getty
'Y ^%v7he15104 root      28    0  620K 1400K onproc/0 -         0:00  0.00% top  
o8L,^4v:j@CBSD爱好者乐园/zr m7n~p
#vmstat –w 1BSD爱好者乐园 x}YWSu$f7obb"y
procs    memory       page                    disks    traps          cpu
lZ&n)_:yr b w    avm     fre  flt  re  pi  po  fr  sr sd0 cd0  int   sys   cs us sy idBSD爱好者乐园8b:D2g%^b
0 0 0   7200 3011256    7   0   0   0   0   0   0   0  471    49   17  0  0 100BSD爱好者乐园4I G7X"{:jL8uVY
0 0 0   7200 3011256    7   0   0   0   0   0   0   0  477   129   29  0  0 100
C5m}'oYV9BObF7f;O0 0 0   7200 3011256    7   0   0   0   0   0   0   0  476    23   12  0  0 100
!P^$z[ W8a0 0 0   7200 3011256    7   0   0   0   0   0   0   0  468    23   12  0  0 100BSD爱好者乐园 G.Z|#XN.K&O#V
0 0 0   7200 3011256    7   0   0   0   0   0   0   0  479    23   12  0  0 100BSD爱好者乐园"E'WNyp(lT6Gi
0 0 0   7200 3011256    7   0   0   0   0   0   0   0  459    26   14  0  0 100BSD爱好者乐园5J\ZFU)g8i[O
0 0 0   7200 3011256    7   0   0   0   0   0   0   0  475    26   15  0  0 100BSD爱好者乐园OD_#se5ly5E5_3\e)g
0 0 0   7200 3011256    7   0   0   0   0   0   0   0  475    23   12  0  0 100
Z"W6aQ4[2mZl}/pBSD爱好者乐园)y-Ec,h4M
CPU-8个内核 基本闲置
Ly&iy/Rz'thK内存也基本闲置状态BSD爱好者乐园ZX'zA3y!?7|1] f
测试成功!

6U$O0ja1v)NBSD爱好者乐园Mo%Oz,x+v O0t-X
六,Relayd负载均衡(7层)BSD爱好者乐园)~l{t'Qi'i7{
1,配置PF的NAT策略BSD爱好者乐园0sFf,AUI W3z)\
#vi /etc/pf.conf
4x'F"X0e0Es{ }将以上pf修改NAT规则,开启relayd的NAT,关闭原有RDR的均衡BSD爱好者乐园4r#yiT8e,v
# ********** NAT Configure ******************* #BSD爱好者乐园6?"Qh$z%R+t
rdr-anchor "relayd/*"
M qI"V,Ddd@Jq#nat on $ext_if inet from any to $ext_tc50  -> 10.1.222.97BSD爱好者乐园1PvUOO p
#rdr on em1 proto tcp from any to $ext_tc50 port 7777 -> $tc50_hosts port 7777
7b9aR5i_4onGBSD爱好者乐园O!{'z;@$r1O x3i
2,配置relayd(7层)均衡功能
IA#{+gC+rh#vi /etc/relayd.conf
,C}5Gf*`g oBSD爱好者乐园+ruPwh5V1LWdYf7U
# ******************************************** #BSD爱好者乐园z+g-E7R;Q,n
#             Edit By Sunwaylove         #
;V"B(VT)M!ikcV4O^#             Support:010-8513XXXX             #
@3O4h1pR#             Mail:sunwaylove@163.com          #BSD爱好者乐园2q!J7Uhy l\ ^ia
# ******************************************** #BSD爱好者乐园9@%AG!c$f[.\7K7KH
BSD爱好者乐园~/b(bX:lO&B6@']/k7H
# MacrosBSD爱好者乐园0J"j i/APl6X[W
ext_addr="192.168.251.2"BSD爱好者乐园#KN7b-j;j
tc50_hosts1="10.1.222.98"BSD爱好者乐园MAum,|.{?
tc50_hosts2="10.1.222.97"
@7Z(H dX l2ftc50_hosts3="10.1.222.95"
6S*Kw0j p"?c*ab
a+qx X'@K'}R# Global Options
(^f#]\?b,hm8xinterval 10
?{ N`^`+l Stimeout 1000
#u)V MY,PNQZtaprefork 5
3Q%X"uGL"L D
W;p u.D ` a4L# Each table will be mapped to a pf table.BSD爱好者乐园-V(OM$H3c%~'N+I
table <webjy> { $tc50_hosts1, $tc50_hosts2, $tc50_hosts3 }
7KP4UeVj-|V4Q
~/D EP1JY+x6w# Services will be mapped to a rdr rule.
mE-EF*F&yprotocol tc50 {BSD爱好者乐园IBip!]6V$P,v
        # The TCP_NODELAY option is required for "smooth" terminal sessionsBSD爱好者乐园2knl'w u_6?mX
        tcp nodelayBSD爱好者乐园 QpfR,E
}BSD爱好者乐园/{cG0CkI aF

u\V$l6~!Brelay webjy {BSD爱好者乐园7Ms,FVOw
        # Run as a simple TCP relay
?$~9r"a;])kz!g W0y        listen on $ext_addr port 7777
Gu*a:Q8Y        protocol tc50
? O1ZM0S+hc-V
K|(d{w        # Forward to the shared carp(4) address of an internal gateway
!cq~_? M XN3?2h&N        forward to <webjy> port 7777 mode roundrobin check tcpBSD爱好者乐园:n"S Z~!xP&J*lH$p[
}
)B1oh_mBSD爱好者乐园}?1d1T(xp
启动relayd
t.PW;R`sD bi/E#relayd –f relayd.conf
L.iAp.s4v ]u)j4w
dr&iJ5h:fF观察启动状态BSD爱好者乐园SO#V$g9T%WG(f'u
#relayctl show summaryBSD爱好者乐园]@(n)E3y]0kx
bash-2.04# relayctl show summaryBSD爱好者乐园9R L0U Nl } Z
Id      Type            Name                            Avlblty StatusBSD爱好者乐园x_ i.k a:ay [
0       realy        webjy                                   active
t0^:V*\n$G2       table           webjy:7777                              active (3 hosts up)BSD爱好者乐园)eu6wQqFp4@
6       host            10.1.222.98                   100.00% upBSD爱好者乐园G'o%m O)A'w
5       host            10.1.222.97                   100.00% upBSD爱好者乐园$L [GhB8k-n
4       host            10.1.222.95                   100.00% upBSD爱好者乐园4BPju8|e{
BSD爱好者乐园N:AyE6i
开启测试压力工具,连接并发数总共20000
pipa4s这时候BSD状态:BSD爱好者乐园3aeM(N'RC
#topBSD爱好者乐园KlR;N'HdB{
load averages:  0.12,  0.18,  0.15                                                                            19:20:55BSD爱好者乐园1qX2Y"xD+C#^,U"j
32 processes:  1 running, 30 idle, 1 on processor
*H(h#QUg2i`i7gCPU0 states:  0.0% user,  0.0% nice,  0.0% system,  0.6% interrupt, 99.6% idle
7c3p9w)r%kw6f%|&h+{CPU1 states:  0.0% user,  0.0% nice,  0.0% system,  0.0% interrupt,  100% idle
!i~+_&L7ElrCPU2 states:  0.0% user,  0.0% nice,  0.0% system,  0.0% interrupt,  100% idle
miF-n*r D4WF-yCPU3 states:  0.0% user,  0.0% nice,  0.0% system,  0.0% interrupt,  100% idle
!l#M uL(AyCPU4 states:  0.0% user,  0.0% nice,  0.0% system,  0.0% interrupt,  100% idleBSD爱好者乐园_Lx3u `|qOb
CPU5 states:  0.0% user,  0.0% nice,  0.0% system,  0.0% interrupt,  100% idle
5yFD ?/B|ZCPU6 states:  0.0% user,  0.0% nice,  0.0% system,  0.0% interrupt,  100% idle
E3obf/gQ!o9F(c'ECPU7 states:  0.0% user,  0.0% nice,  0.0% system,  0.0% interrupt,  100% idleBSD爱好者乐园beq%U)G i6R
Memory: Real: 12M/84M act/tot  Free: 2933M  Swap: 0K/1028M used/totBSD爱好者乐园+lM y5F6R#r

^e ZD&f+MhdZI*a  PID USERNAME PRI NICE  SIZE   RES STATE    WAIT      TIME    CPU COMMAND
3} nxdPXm32611 root      28    0 1460K 1792K run/0    -         0:00  0.00% sshd2
9OB:yu:bn Sj)S29775 root       2    0  532K  428K idle     netio     0:00  0.00% pflogdBSD爱好者乐园 n6z wr Ob0F*F9zzN
23989 sunwei    10    0  584K 1196K idle     wait      0:00  0.00% bash
p9y.^Aa16629 _syslogd   2    0  384K  748K sleep/0  poll      0:00  0.00% syslogd
V)K(qyA%G19339 root      10    0  584K 1304K sleep/0  wait      0:00  0.00% bashBSD爱好者乐园5^ S8Y%BQ.m!Ob2s U8}
27134 root       2    0  564K  796K idle     select    0:00  0.00% cron
:u|\r p^G h2K4O5w32686 _pflogd    4    0  596K  340K sleep/0  bpf       0:00  0.00% pflogdBSD爱好者乐园D y'z/m8yT1M-w!H
27664 _relayd    2    0  712K 1208K idle     kqread    0:00  0.00% relaydBSD爱好者乐园`3B.pa3J1u ]EY
20595 _relayd    2    0  712K 1292K idle     kqread    0:00  0.00% relayd
N^ v7C,T?zl31953 _relayd    2    0  708K 1256K sleep/0  kqread    0:00  0.00% relayd
8s H1n _#Y(G!G4`9744 _relayd    2    0  604K 1204K idle     kqread    0:00  0.00% relaydBSD爱好者乐园|0|9Iq `@ qRf
12731 _relayd    2    0  604K 1320K idle     kqread    0:00  0.00% relayd
O l9X\6iM&L3O19210 _relayd    2    0 1084K 1608K sleep/0  kqread    0:00  0.00% relaydBSD爱好者乐园;?if4L"qbh:OsW
16058 _relayd    2    0  608K 1224K idle     kqread    0:00  0.00% relaydBSD爱好者乐园 ID} A-f5aJ$S
9807 _relayd    2    0  708K 1196K idle     kqread    0:00  0.00% relayd
BD_ j4^ o L28725 _relayd    2    0  712K 1208K idle     kqread    0:00  0.00% relayd
NTn M$i  840 _relayd    2    0  604K 1288K sleep/0  kqread    0:00  0.00% relaydBSD爱好者乐园C^nmV&Hh
18995 root       2    0 1032K 1536K sleep/0  kqread    0:00  0.00% relaydBSD爱好者乐园)Pe3tKs7pS
22692 root       2    0  936K 1572K sleep/0  kqread    0:00  0.00% relaydBSD爱好者乐园,b-l"Qx1vI$Kk
12036 root       3    0  320K  724K idle     ttyin     0:00  0.00% gettyBSD爱好者乐园!VF0Pn%|&U/L
15104 root      28    0  620K 1400K onproc/0 -         0:00  0.00% top  BSD爱好者乐园}:G DN!a)`[O
BSD爱好者乐园NH6n6oD2u@2m R
#vmstat –w 1BSD爱好者乐园C&]!u}*E @a\Q9y
procs    memory       page                    disks    traps          cpu
Aa:L9g+g ~Nr b w    avm     fre  flt  re  pi  po  fr  sr sd0 cd0  int   sys   cs us sy id
SJf Qm$WX*r0f x0 0 0   7200 3011256    7   0   0   0   0   0   0   0  471    49   17  0  0 100BSD爱好者乐园1W;JLk*J2\
0 0 0   7200 3011256    7   0   0   0   0   0   0   0  477   129   29  0  0 100
3p{a,@P.G0 0 0   7200 3011256    7   0   0   0   0   0   0   0  476    23   12  0  0 100BSD爱好者乐园9DPb7ZC r
0 0 0   7200 3011256    7   0   0   0   0   0   0   0  468    23   12  0  0 100
!n |T5~ _I wIh0 0 0   7200 3011256    7   0   0   0   0   0   0   0  479    23   12  0  0 100
'h'];HZ$fTcw0 0 0   7200 3011256    7   0   0   0   0   0   0   0  459    26   14  0  0 100BSD爱好者乐园eG$oS$m'wy
0 0 0   7200 3011256    7   0   0   0   0   0   0   0  475    26   15  0  0 100
|r f?d7zSU:c0 0 0   7200 3011256    7   0   0   0   0   0   0   0  475    23   12  0  0 100BSD爱好者乐园aWsG Lo
0 0 0   7200 3011256    7   0   0   0   0   0   0   0  471    23   12  0  0 100BSD爱好者乐园 e`1v[];i

CNVW'bI5KH.A#[CPU-8个内核 基本闲置
9Xi;io5_Dw^)Fh内存也基本闲置状态
7`9D}F3zc AG0K测试成功!
BSD爱好者乐园b zK o)\sNL
七,总结与Q&ABSD爱好者乐园 MA#Cf7xP
目前测试OpenBSD-4.3防火墙功能基本成功。
E%M9i7ah0?5_ H
!\)|h(E J"Mj1,为什么要用做此次防火墙负载均衡试验?BSD爱好者乐园 w.h,N c Z ? O-K
原因是 目前大多数主机托管业务IDC,均采用前端部署:一台硬件级防火墙 Juniper NS1000 (配置光纤模块后 单台 20万人民币)+硬件负载均衡 F5 (配上光纤模块 单台30万)。而且是不做HA的情况下,如果2台设备作HA,那就是总共2套4台设备,100万成本预算。
Zh5\5w PEW;E-y对于拥有多个IDC机房的金融企事业单位来说,每个站点光部署网络防火墙和负载均衡就需要投入50W~100W成本预算。而现在X86服务器+OpenBSD,成本才3~4万。BSD爱好者乐园$Spr8Wcs
BSD爱好者乐园N4[ U4rxX#We*d
此次测试的目的,是对现有硬件防火墙+负载均衡设备(standby,非HA的情况下)进行灾备准备。本人不赞成对正式环境,高并发量的情况下采用此方案,毕竟还不是很稳定、成熟,没有正式使用的先例,不确定因素太多。
9?@,I!w{*TT{BSD爱好者乐园 o U[w o
2,为什么采用OpenBSD做此次方案的?BSD爱好者乐园9T.G,cj C[t
原因是OpenBSD相对linux、Unixware、Unix来说,其内核代码是最稳定、整洁的,而且是开源的。OpenBSD安全漏洞也是最少的操作系统,近10年来查到的漏洞数总共才2个。对于内核级防火墙来说,安全性、和稳定性是排在首位的。并且最新的OpenBSD4.3推出新的负载均衡功能relayd,正好适用于此次测试。因此在开始测试前就选定OpenBSD为主选防火墙操作系统。BSD爱好者乐园\\8`ZgD,H'F1P|

1YQ,~U6z4Y3,OpenBSD中的负载均衡功能 NAT 、relayd(3层模式redirect)、relayd(7层模式relays)有什么区别?BSD爱好者乐园 m0A)A;oo
以下分别作说明:
1u.b.w&^zL ^a,pf的NAT-RDR负载均衡是基于PF下的NAT模式,基于network-3层结构上(4层也涉及),pf基于OpenBSD 内核级,因此效率理论上相对其他方式来说应该是最高的,但是这种模式的均衡系统无法检测后台系统的状况,也无法调整负载均衡的参数,优化负载均衡的功能。因此该模式,对于负载均衡要求不高的情况下可以满足,但对于后台负载设备很多,高网络流量的情况下,其负载均衡功能无法满足需求。BSD爱好者乐园6@I8EX^,}WjA
BSD爱好者乐园8K e*vOq.`8zI
b,Relayd 分为2种模式:3层和7层,效率来说 redirect模式基于3层,效率要比7层的relays高,比较适合简单的TCP应用负载均衡,提高效率。Relays模式基于7层,对HTTP/HTTPS/SSL等协议,有着多种方案的检验机制,功能更强更安全,适合HTTP 的网络负载均衡需求,相应的其开销要比3层模式多,效率较低。
#Thz,jr
j1K+i1w:V4,最后总结BSD爱好者乐园 O$~LE/@t UD
此次测试,由于OpenBSD所安装的设备过于强大,测试机的数量不多,连接数压力并发最多也就2万,以上测试下来,BSD服务器开销均不大。因此,本方案说明,仅供参考,待日后正式考证。
Dyz`W结论:如果是考虑实现防火墙+负载均衡功能,本人推荐首选OpenBSD4.3的 pf + relayd(3层模式redirect)方式。
?%A)qg v!QFPP(谢谢)
[重要提醒]对本篇资料有疑问,请到论坛讨论,尽量使文章准确无误>>>
[版权声明]BSD爱好者乐园站内文章,如来源不是互联网,则均系原创或翻译之作,可随意转载,或以此为基础进行演译,但务必以链接形式注明原始出处和作者信息,否则属于侵权行为。另对本站转载他处文章,俱有说明,如有侵权请联系本人,本人将会在第一时间删除侵权文章。
TAG: pf 负载均衡 防火墙 relayd
查看全部1条评论

最新评论

  • 删除 Guest (2010-4-09 19:12:52, 评分: -3 )

    -3
 

评分:0

我来说两句

seccode