30.4 OpenBSD Packet Filter (PF) ºÍ ALTQ

Revised and updated by John Ferrell.

¡¡¡¡2003 Äê 7 Ô£¬ OpenBSD µÄ·À»ðǽ£¬ Ò²¾ÍÊdz£ËµµÄ PF ±»³É¹¦µØÒÆÖ²µ½ÁË FreeBSD ÉÏ£¬ ²¢¿ÉÒÔͨ¹ý FreeBSD Ports Collection À´°²×°ÁË£» µÚÒ»¸ö½« PF ¼¯³Éµ½»ù±¾ÏµÍ³Öеİ汾ÊÇ 2004 Äê 11 Ô·¢ÐÐµÄ FreeBSD 5.3¡£ PF ÊÇÒ»¸öÍêÕûµÄÌṩÁË´óÁ¿¹¦ÄܵķÀ»ðǽÈí¼þ£¬ ²¢ÌṩÁË¿ÉÑ¡µÄ ALTQ (½»´í¶ÓÁУ¬ Alternate Queuing) ¹¦ÄÜ¡£ ALTQ ÌṩÁË·þÎñÆ·ÖÊ (QoS) ´ø¿íÕûÐι¦ÄÜ¡£

¡¡¡¡OpenBSD ÏîÄ¿·Ç³£½Ü³öµÄά»¤×ÅÒ»·Ý PF FAQ¡£ ¾ÍÆä±¾Éí¶øÑÔ£¬ÕâÒ»½Ú×¢ÖØÓÚ FreeBSD µÄ PF ºÍÌṩһЩ¹ØÓÚʹÓ÷½ÃæµÄÒ»°ã³£Ê¶¡£¸üÏêϸµÄʹÓÃÐÅÏ¢Çë²ÎÔÄ PF FAQ¡£

¡¡¡¡¸ü¶àµÄÏêϸÐÅÏ¢£¬ ¿ÉÒÔÔÚ FreeBSD °æ±¾µÄ PF ÍøÕ¾ÉÏÕÒµ½£º http://pf4freebsd.love2party.net/¡£

30.4.1 ʹÓà PF ¿É¼ÓÔØµÄÄÚºËÄ£¿é

¡¡¡¡Òª¼ÓÔØ PF ÄÚºËÄ£¿é£¬ ¿ÉÒÔÔÚ /etc/rc.conf ÖмÓÈëÏÂÃæµÄÉèÖãº

pf_enable="YES"

¡¡¡¡È»ºóʹÓÃÆô¶¯½Å±¾À´¼ÓÔØÄ£¿é£º

# /etc/rc.d/pf start

¡¡¡¡ÐèҪ˵Ã÷µÄÊÇ£¬ Èç¹ûϵͳÖÐûÓйæÔò¼¯ÅäÖÃÎļþ£¬ ÔòÉÏÊö²Ù×÷²»»á¼ÓÔØ PF Ä£¿é¡£ ÅäÖÃÎļþµÄĬÈÏλÖÃÊÇ /etc/pf.conf¡£ Èç¹û PF ¹æÔò¼¯ÔÚÆäËûλÖ㬠¿ÉÒÔÓÃÏÂÃæµÄ /etc/rc.conf ÅäÖÃÀ´¸æËß PF£º

pf_rules="/path/to/pf.conf"

¡¡¡¡pf.conf µÄÀý×Ó¿ÉÒÔÔÚ /usr/share/examples/pf/ ÕÒµ½¡£

¡¡¡¡PF Ä£¿éÒ²¿ÉÒÔÊÖ¹¤´ÓÃüÁîÐмÓÔØ£º

# kldload pf.ko

¡¡¡¡PF µÄÈÕÖ¾¼Ç¼¹¦ÄÜÊÇÓÉ pflog.ko ÌṩµÄ£¬ ͨ¹ýÔÚ /etc/rc.conf ÖмÓÈëÏÂÃæµÄÉèÖãº

pflog_enable="YES"

¡¡¡¡È»ºóʹÓÃÆô¶¯½Å±¾À´¼ÓÔØÄ£¿é£º

# /etc/rc.d/pflog start

¡¡¡¡Èç¹ûÄúÐèÒªÆäËû PF ÌØÐÔ£¬ ÔòÐèÒª½« PF Ö§³ÖÁª±à½øÄںˡ£

30.4.2 PF ÄÚºËÑ¡Ïî

¡¡¡¡ËäÈ»Äã²»±ØÇ××Ô°Ñ¶Ô PF µÄÖ§³Ö±àÒë½ø FreeBSD Äںˣ¬µ«ÊÇÓÐʱÄãÈÔÈ»ÐèÒªÕâô×öÀ´Ê¹Óõ½ PF µÄijЩûÓб»ÊÕ¼½ø¿É¼ÓÔØÄ£¿éµÄ¸ß¼¶ÌØÐÔ£¬±ÈÈç pfsync(4) αÉ豸ÓÃÀ´·¢ËÍijЩ¸Ä±äµ½PF ״̬±í¡£ ËüÄÜÅäºÏ carp(4) ʹÓà PF ½¨Á¢Ö§³Ö¹ÊÕÏ×ªÒÆµÄ·À»ðǽ¡£ ¸ü¶àÓÐ¹Ø CARP µÄÏêϸÐÅÏ¢¿ÉÒÔ²ÎÔı¾ÊÖ²áµÄ µÚ 31.13 ½Ú¡£

¡¡¡¡The PF kernel options can be found in /usr/src/sys/conf/NOTES and are reproduced below:

¡¡¡¡ÓÐ¹Ø PF µÄÄÚºËÑ¡Ïî¿ÉÒÔÔÚ /usr/src/sys/conf/NOTES ÖÐÕÒµ½£¬ ÒÔÏÂÒ²ÂÔÓвûÊö£º

device pf
device pflog
device pfsync

¡¡¡¡device pf Ñ¡ÏîÓÃÓÚÆôÓà ¡°Packet Filter¡± ·À»ðǽµÄÖ§³Ö £¨pf(4)£©¡£

¡¡¡¡device pflog ÆôÓÿÉÑ¡µÄ pflog(4) Î±ÍøÂçÉ豸£¬ ÓÃÒÔͨ¹ý bpf(4) ÃèÊö·ûÀ´¼Ç¼Á÷Á¿¡£ pflogd(8) ·þÎñ¿ÉÒÔÓÃÀ´´æ´¢ÐÅÏ¢£¬ ²¢°ÑËüÃÇÒÔÈÕÖ¾ÐÎʽ¼Ç¼µ½´ÅÅÌÉÏ¡£

¡¡¡¡device pfsync Ñ¡ÏîÆôÓÿÉÑ¡µÄ pfsync(4) Ö§³Ö£¬ÕâÊÇÓÃÓÚ¼àÊÓ ¡°×´Ì¬±ä¸ü¡± µÄÎ±ÍøÂçÉ豸¡£

30.4.3 ¿ÉÓÃµÄ rc.conf Ñ¡Ïî

¡¡¡¡The following rc.conf(5) statements configure PF and pflog(4) at boot:

¡¡¡¡ÒÔÏ rc.conf(5) ÖеÄÓï¾äÓÃÓÚÆô¶¯Ê±ÅäÖà PF ºÍ pflog(4)

pf_enable="YES"                 # ÆôÓà PF (Èç¹ûÐèÒªµÄ»°£¬ ×Ô¶¯¼ÓÔØÄÚºËÄ£¿é)
pf_rules="/etc/pf.conf"         # pf ʹÓõĹæÔò¶¨ÒåÎļþ
pf_flags=""                     # Æô¶¯Ê±´«µÝ¸ø pfctl µÄÆäËûÑ¡Ïî
pflog_enable="YES"              # Æô¶¯ pflogd(8)
pflog_logfile="/var/log/pflog"  # pflogd ÓÃÓڼǼÈÕÖ¾µÄÎļþÃû
pflog_flags=""                  # Æô¶¯Ê±´«µÝ¸ø pflogd µÄÆäËûÑ¡Ïî

¡¡¡¡Èç¹ûÄúµÄ·À»ðǽºóÃæÓÐÒ»¸ö LAN£¬ ¶øÇÒÐèҪͨ¹ýËüÀ´×ª·¢ LAN Éϵİü£¬ »ò½øÐÐ NAT£¬ »¹ÐèҪͬʱÆôÓÃÏÂÊöÑ¡Ï

gateway_enable="YES"            # ÆôÓÃΪ LAN Íø¹Ø

30.4.4 ½¨Á¢¹ýÂ˹æÔò

¡¡¡¡PF »á´Ó pf.conf(5) (ĬÈÏΪ /etc/pf.conf) ÎļþÖжÁÈ¡ÅäÖùæÔò£¬ ²¢¸ù¾ÝÄÇÀïµÄ¹æÔòÐ޸ġ¢¶ªÆú»òÈÃÊý¾Ý°üͨ¹ý¡£ ĬÈϰ²×°µÄ FreeBSD ÒѾ­ÌṩÁËһЩ¼òµ¥µÄÀý×Ó·ÅÔÚ /usr/share/examples/pf/ Ŀ¼Ï¡£ Çë²ÎÔÄ PF FAQ »ñÈ¡ÍêÕûµÄ PF ¹æÔòÐÅÏ¢¡£

¾¯¸æ: ÔÚä¯ÀÀ PF FAQ ʱ£¬ Çëʱ¿Ì×¢Òⲻͬ°æ±¾µÄ FreeBSD ¿ÉÄÜ»áʹÓò»Í¬°æ±¾µÄ PF¡£ Ŀǰ£¬ FreeBSD ʹÓõÄÊÇÓë OpenBSD 4.1 ÏàͬµÄ PF°æ±¾¡£

¡¡¡¡FreeBSD packet filter ÓʼþÁбí ÊÇÒ»¸öÌáÓйØÅäÖÃʹÓà PF ·À»ðǽÎÊÌâµÄºÃµØ·½¡£ÇëÔÚÌáÎÊ֮ǰ²éÔÄÓʼþÁбíµÄ¹éµµ£¡

30.4.5 ʹÓà PF

¡¡¡¡Ê¹Óà pfctl(8) ¿ÉÒÔ¿ØÖÆ PF¡£ ÒÔÏÂÊÇһЩʵÓõÄÃüÁî £¨Çë²éÔÄ pfctl(8) »ñµÃÈ«²¿¿ÉÓõÄÑ¡Ï:

ÃüÁî ×÷ÓÃ
pfctl -e ÆôÓÃ PF
pfctl -d ½ûÓÃ PF
pfctl -F all -f /etc/pf.conf Çå³þËùÓйæÔò (nat, filter, state, table, µÈµÈ¡£) ²¢¶ÁÈ¡ /etc/pf.conf
pfctl -s [ rules | nat | state ] Áгö filter ¹æÔò, nat ¹æÔò, »ò״̬±í
pfctl -vnf /etc/pf.conf ¼ì²é /etc/pf.conf ÖеĴíÎ󣬵«²»¼ÓÔØÏà¹ØµÄ¹æÔò

30.4.6 ÆôÓÃ ALTQ

¡¡¡¡ALTQ Ö»ÓÐÔÚ×÷Ϊ±àÒëÑ¡Ïî¼ÓÈëµ½ FreeBSD ÄÚºËʱ²ÅÄÜʹÓá£ALTQ Ŀǰ»¹²»ÊÇËùÓеĿÉÓÃÍø¿¨Çý¶¯¶¼Äܹ»Ö§³ÖµÄ¡£ Çë²Î¼û altq(4) Áª»úÊÖ²áÁ˽âÄúÕýʹÓÃµÄ FreeBSD °æ±¾ÖеÄÇý¶¯Ö§³ÖÇé¿ö¡£

¡¡¡¡ÏÂÃæÕâЩѡÏÆôÓà ALTQ ÒÔ¼°Ò»Ð©¸½¼ÓµÄ¹¦ÄÜ£º

options         ALTQ
options         ALTQ_CBQ        # »ùÓÚ·ÖÀàµÄÅÅÁÐ (CBQ)
options         ALTQ_RED        # Ëæ»úÏÈÆÚ¼ì²â (RED)
options         ALTQ_RIO        # ¶Ô½øÈëºÍ·¢³öµÄ°ü½øÐÐ RED
options         ALTQ_HFSC       # ´øµÈ¼¶µÄ°üµ÷¶ÈÆ÷ (HFSC)
options         ALTQ_PRIQ       # °´ÓÅÏȼ¶µÄÅÅÁÐ (PRIQ)
options         ALTQ_NOPCC      # ÔÚÁª±à SMP ÄÚºËʱ±ØÐëʹÓ㬽ûÖ¹¶ÁʱÖÓ

¡¡¡¡options ALTQ ½«ÆôÓà ALTQ ¿ò¼ÜµÄÖ§³Ö¡£

¡¡¡¡options ALTQ_CBQ ÓÃÓÚÆôÓà »ùÓÚ·ÖÀàµÄ¶ÓÁÐ (CBQ) Ö§³Ö¡£ CBQ ÔÊÐíÄú½«Á¬½Ó·Ö³É²»Í¬µÄÀà±ð£¬ »òÕß˵£¬ ¶ÓÁУ¬ ÒÔ±ãÔÚ¹æÔòÖÐΪËüÃÇÖ¸¶¨²»Í¬µÄÓÅÏȼ¶¡£

¡¡¡¡options ALTQ_RED ½«ÆôÓÃ Ëæ»úÔ¤¼ì²â (RED)¡£ RED ÊÇÒ»ÖÖÓÃÓÚ·ÀÖ¹ÍøÂçÓµÈûµÄ¼¼Êõ¡£ RED ¶ÈÁ¿¶ÓÁеij¤¶È£¬ ²¢½«ÆäÓë¶ÓÁеÄ×î´óºÍ×îС³¤¶ÈãÐÖµ½øÐбȽϡ£ Èç¹û¶ÓÁйý³¤£¬ Ôòеİü½«±»¶ªÆú¡£ ÈçÃûËùʾ£¬ RED ´Ó²»Í¬µÄÁ¬½ÓÖÐËæ»úµØ¶ªÆúÊý¾Ý°ü¡£

¡¡¡¡options ALTQ_RIO ½«ÆôÓà ³öÈëµÄËæ»úÔ¤¼ì²â¡£

¡¡¡¡options ALTQ_HFSC ÆôÓà ²ã´Îʽ¹«Æ½·þÎñƽ»¬°üµ÷¶ÈÆ÷¡£ ÒªÁË½â¹ØÓÚ HFSC ½øÒ»²½µÄÐÅÏ¢£¬ Çë²Î¼û http://www-2.cs.cmu.edu/~hzhang/HFSC/main.html¡£

¡¡¡¡options ALTQ_PRIQ ÆôÓà ÓÅÏȶÓÁÐ (PRIQ)¡£ PRIQ Ê×ÏÈÔÊÐí¸ßÓÅÏȼ¶¶ÓÁÐÖеİüͨ¹ý¡£

¡¡¡¡options ALTQ_NOPCC ÆôÓà ALTQ µÄ SMP Ö§³Ö¡£ Èç¹ûÊÇ SMP ϵͳ£¬ Ôò±ØÐëʹÓÃËü¡£

±¾ÎĵµºÍÆäËüÎĵµ¿É´ÓÕâÀïÏÂÔØ£ºftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Èç¹û¶ÔÓÚFreeBSDÓÐÎÊÌ⣬ÇëÏÈÔĶÁÎĵµ£¬Èç²»Äܽâ¾öÔÙÁªÏµ<questions@FreeBSD.org>.
¹ØÓÚ±¾ÎĵµµÄÎÊÌâÇë·¢ÐÅÁªÏµ <doc@FreeBSD.org>.