pf queue без no state

Проблемы установки, настройки и работы Правильной Операционной Системы

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
zingel
beastie
Сообщения: 6204
Зарегистрирован: 2007-10-30 3:56:49
Откуда: Moscow
Контактная информация:

Re: pf queue без no state

Непрочитанное сообщение zingel » 2008-12-18 11:27:35

б?
Z301171463546 - можно пожертвовать мне денег

ppv17770
проходил мимо

Re: pf queue без no state

Непрочитанное сообщение ppv17770 » 2008-12-18 11:29:31

Не работают очереди pf.
Задача - огнаничить трафик на внутреннем le0 в подсеть 172.23.43.0/24.

Очереди:

Код: Выделить всё

altq on le0 cbq bandwidth 1Gb qlimit 100 queue { AAA, common }
queue AAA bandwidth 2Mb priority 0 qlimit 20 cbq
queue common bandwidth 500Mb priority 0 qlimit 100 cbq(default,borrow)
Не работающая конструкция 1:

Код: Выделить всё

pass all
pass out on le0 from any to 172.23.43.0/24 keep state queue AAA
pass out on le0 from any to 172.16.0.33 keep state queue AAA
Не работающая конструкция 2:

Код: Выделить всё

pass all
pass out on le0 from any to 172.23.43.0/24 queue AAA
pass out on le0 from any to 172.16.0.33 queue AAA
Работающая конструкция:

Код: Выделить всё

pass all no state
pass out on le0 from any to 172.23.43.0/24 no state queue AAA
pass out on le0 from any to 172.16.0.33 no state queue AAA
Почему обязательно необходимо употреблять "no state" (всего на двух сайтах встретил, что no state обязателен)?
В остальных случаях советуют употреблять "keep state", но у меня с ним или просто в его отсутствии - все кидается в default очередь.
Не скажется ли это (наличие "no state") на производительности, т.к. кроме фильтрации и очередей на этой машине выполняется NAT.

ppv17770
проходил мимо

Re: pf queue без no state

Непрочитанное сообщение ppv17770 » 2008-12-18 11:55:43

Код: Выделить всё

[root@FreeBSD-000 ~]# uname -a
FreeBSD FreeBSD-000.xyz.ru 7.0-RELEASE FreeBSD 7.0-RELEASE #23: Wed Apr  9 13:45:14 VLAST 2008     root@FreeBSD-000.xyz.ru:/usr/obj/usr/src/sys/FREEBSD-000  i386
Может ли быть глюк pf в этой версии ядра?
Всего в двух статьях было упоминание, что pf queue без no state - не работает.
Но в остальном интернете - свободно упоминается keep-state.
Последний раз редактировалось Alex Keda 2008-12-18 12:13:05, всего редактировалось 1 раз.
Причина: Товарищщи, юзайте кнопочку [code], цените чужое время...

Аватара пользователя
zingel
beastie
Сообщения: 6204
Зарегистрирован: 2007-10-30 3:56:49
Откуда: Moscow
Контактная информация:

Re: pf queue без no state

Непрочитанное сообщение zingel » 2008-12-18 14:23:55

Код: Выделить всё

pfctl -sa
Z301171463546 - можно пожертвовать мне денег

ppv17770
проходил мимо

Re: pf queue без no state

Непрочитанное сообщение ppv17770 » 2008-12-19 9:33:18

НЕ работающий pf.conf:

Код: Выделить всё

[root@FreeBSD-000 ~]# cat /etc/pf.conf

altq on le0 cbq bandwidth 1000Kb qlimit 100 queue { AAA, common }
queue AAA on le0 bandwidth 200Kb priority 0 qlimit 20 cbq
queue common on le0 bandwidth 650Kb priority 0 qlimit 100 cbq(default,borrow)

nat on vlan701 from 172.16.0.33 to any -> XXX.YYY.196.76

pass all

pass on le0 from any to 172.16.0.33 queue AAA

[root@FreeBSD-000 ~]# 
НЕ работающий результат:

Код: Выделить всё

[root@FreeBSD-000 ~]# pfctl -v -v -g -s all
TRANSLATION RULES:
@0 nat on vlan701 inet from 172.16.0.33 to any -> XXX.YYY.196.76
  [ Skip steps: i=end d=end f=end p=end sa=end sp=end da=end dp=end ]
  [ queue: qname= qid=0 pqname= pqid=0 ]
  [ Evaluations: 2735      Packets: 17808     Bytes: 16769032    States: 1     ]

FILTER RULES:
@0 pass all flags S/SA keep state
  [ Skip steps: d=end p=end sa=end sp=end dp=end ]
  [ queue: qname= qid=0 pqname= pqid=0 ]
  [ Evaluations: 5586      Packets: 35828     Bytes: 33599240    States: 8     ]
@1 pass on le0 inet from any to 172.16.0.33 flags S/SA keep state queue AAA
  [ Skip steps: i=end d=end f=end p=end sa=end sp=end da=end dp=end ]
  [ queue: qname=AAA qid=2 pqname= pqid=2 ]
  [ Evaluations: 5590      Packets: 0         Bytes: 0           States: 0     ]

ALTQ:
queue root_le0 on le0 bandwidth 1Mb priority 0 qlimit 100 cbq( wrr root ) {AAA, common}
  [ pkts:      20462  bytes:   19288896  dropped pkts:      0 bytes:      0 ]
  [ qlength:   0/100  borrows:      0  suspends:      0 ]
  [ qid=1 ifname=le0 ifbandwidth=1Mb ]
queue  AAA on le0 bandwidth 200Kb priority 0 qlimit 20 
  [ pkts:          0  bytes:          0  dropped pkts:      0 bytes:      0 ]
  [ qlength:   0/ 20  borrows:      0  suspends:      0 ]
  [ qid=2 ifname=le0 ifbandwidth=1Mb ]
queue  common on le0 bandwidth 650Kb priority 0 qlimit 100 cbq( borrow default ) 
  [ pkts:      20462  bytes:   19288896  dropped pkts:     37 bytes:  49074 ]
  [ qlength:  75/100  borrows:  18769  suspends:      0 ]
  [ qid=3 ifname=le0 ifbandwidth=1Mb ]

STATES:
all udp 255.255.255.255:67 <- 0.0.0.0:68       NO_TRAFFIC:SINGLE
   age 00:00:24, expires in 00:00:27, 6:0 pkts, 1968:0 bytes, rule 0
   id: 4949f3b300000058 creatorid: e64a1758
all tcp XXX.YYY.196.77:22 <- 172.16.0.33:40532       ESTABLISHED:ESTABLISHED
   [2321985920 + 105344] wscale 7  [3715782699 + 11520] wscale 5
   age 00:00:23, expires in 24:00:00, 513:995 pkts, 29476:1401437 bytes, rule 0
   id: 4949f3b300000059 creatorid: e64a1758
all tcp 172.16.0.33:40532 -> XXX.YYY.196.76:63283 -> XXX.YYY.196.77:22       ESTABLISHED:ESTABLISHED
   [3715782699 + 11520] wscale 5  [2321985920 + 105344] wscale 7
   age 00:00:23, expires in 24:00:00, 513:995 pkts, 29476:1401437 bytes, rule 0
   id: 4949f3b30000005a creatorid: e64a1758
all udp 172.16.0.255:631 <- 172.16.0.33:631       NO_TRAFFIC:SINGLE
   age 00:00:13, expires in 00:00:26, 3:0 pkts, 473:0 bytes, rule 0
   id: 4949f3b30000005b creatorid: e64a1758
all udp 255.255.255.255:68 <- XXX.YYY.196.120:67       NO_TRAFFIC:SINGLE
   age 00:00:12, expires in 00:00:20, 3:0 pkts, 984:0 bytes, rule 0
   id: 4949f3b30000005c creatorid: e64a1758
all udp 255.255.255.255:68 <- XXX.YYY.196.115:67       NO_TRAFFIC:SINGLE
   age 00:00:08, expires in 00:00:52, 1:0 pkts, 328:0 bytes, rule 0
   id: 4949f3b30000005d creatorid: e64a1758
all udp 172.16.0.255:138 <- 172.16.0.58:138       NO_TRAFFIC:SINGLE
   age 00:00:07, expires in 00:00:53, 1:0 pkts, 235:0 bytes, rule 0
   id: 4949f3b30000005e creatorid: e64a1758
all udp 172.16.0.255:137 <- 172.16.0.4:137       NO_TRAFFIC:SINGLE
   age 00:00:03, expires in 00:00:29, 3:0 pkts, 234:0 bytes, rule 0
   id: 4949f3b30000005f creatorid: e64a1758

INFO:
Status: Enabled for 0 days 02:23:59           Debug: Urgent

Hostid:   0xe64a1758
Checksum: 0x32658ce3d9bd6d1958f3b9554dbd59c4

State Table                          Total             Rate
  current entries                        8               
  searches                          567527           65.7/s
  inserts                               59            0.0/s
  removals                              51            0.0/s
Source Tracking Table
  current entries                        0               
  searches                               0            0.0/s
  inserts                                0            0.0/s
  removals                               0            0.0/s
Counters
  match                             517861           59.9/s
  bad-offset                             0            0.0/s
  fragment                               0            0.0/s
  short                                  0            0.0/s
  normalize                              0            0.0/s
  memory                                 0            0.0/s
  bad-timestamp                          0            0.0/s
  congestion                             0            0.0/s
  ip-option                              0            0.0/s
  proto-cksum                            0            0.0/s
  state-mismatch                         0            0.0/s
  state-insert                           0            0.0/s
  state-limit                            0            0.0/s
  src-limit                              0            0.0/s
  synproxy                               0            0.0/s
Limit Counters
  max states per rule                    0            0.0/s
  max-src-states                         0            0.0/s
  max-src-nodes                          0            0.0/s
  max-src-conn                           0            0.0/s
  max-src-conn-rate                      0            0.0/s
  overload table insertion               0            0.0/s
  overload flush states                  0            0.0/s

TIMEOUTS:
tcp.first                   120s
tcp.opening                  30s
tcp.established           86400s
tcp.closing                 900s
tcp.finwait                  45s
tcp.closed                   90s
tcp.tsdiff                   30s
udp.first                    60s
udp.single                   30s
udp.multiple                 60s
icmp.first                   20s
icmp.error                   10s
other.first                  60s
other.single                 30s
other.multiple               60s
frag                         30s
interval                     10s
adaptive.start             6000 states
adaptive.end              12000 states
src.track                     0s

LIMITS:
states        hard limit    10000
src-nodes     hard limit    10000
frags         hard limit     5000
tables        hard limit     1000
table-entries hard limit   200000

OS FINGERPRINTS:
696 fingerprints loaded
[root@FreeBSD-000 ~]# 
Работающий pf.conf:

Код: Выделить всё

[root@FreeBSD-000 ~]# cat /etc/pf.conf

altq on le0 cbq bandwidth 1000Kb qlimit 100 queue { AAA, common }
queue AAA on le0 bandwidth 200Kb priority 0 qlimit 20 cbq
queue common on le0 bandwidth 650Kb priority 0 qlimit 100 cbq(default,borrow)

nat on vlan701 from 172.16.0.33 to any -> XXX.YYY.196.76

pass all no state
pass on le0 from any to 172.16.0.33 no state queue AAA

[root@FreeBSD-000 ~]# 
Работающий результат:

Код: Выделить всё

[root@FreeBSD-000 ~]# pfctl -v -v -g -s all
TRANSLATION RULES:
@0 nat on vlan701 inet from 172.16.0.33 to any -> XXX.YYY.196.76
  [ Skip steps: i=end d=end f=end p=end sa=end sp=end da=end dp=end ]
  [ queue: qname= qid=0 pqname= pqid=0 ]
  [ Evaluations: 494       Packets: 390       Bytes: 308345      States: 1     ]

FILTER RULES:
@0 pass all no state
  [ Skip steps: d=end p=end sa=end sp=end dp=end ]
  [ queue: qname= qid=0 pqname= pqid=0 ]
  [ Evaluations: 989       Packets: 881       Bytes: 555496      States: 1     ]
@1 pass on le0 inet from any to 172.16.0.33 no state queue AAA
  [ Skip steps: i=end d=end f=end p=end sa=end sp=end da=end dp=end ]
  [ queue: qname=AAA qid=2 pqname= pqid=2 ]
  [ Evaluations: 993       Packets: 507       Bytes: 539497      States: 0     ]

ALTQ:
queue root_le0 on le0 bandwidth 1Mb priority 0 qlimit 100 cbq( wrr root ) {AAA, common}
  [ pkts:        625  bytes:     511175  dropped pkts:      0 bytes:      0 ]
  [ qlength:   0/100  borrows:      0  suspends:      0 ]
  [ qid=1 ifname=le0 ifbandwidth=1Mb ]
queue  AAA on le0 bandwidth 200Kb priority 0 qlimit 20 
  [ pkts:        451  bytes:     495435  dropped pkts:     40 bytes:  24932 ]
  [ qlength:  20/ 20  borrows:      0  suspends:    120 ]
  [ qid=2 ifname=le0 ifbandwidth=1Mb ]
queue  common on le0 bandwidth 650Kb priority 0 qlimit 100 cbq( borrow default ) 
  [ pkts:        174  bytes:      15740  dropped pkts:      0 bytes:      0 ]
  [ qlength:   0/100  borrows:      0  suspends:      0 ]
  [ qid=3 ifname=le0 ifbandwidth=1Mb ]

STATES:
all tcp 172.16.0.33:59532 -> XXX.YYY.196.76:53717 -> XXX.YYY.196.77:22       ESTABLISHED:ESTABLISHED
   [3872547513 + 11520] wscale 5  [102695580 + 32240] wscale 7
   age 00:00:26, expires in 24:00:00, 174:222 pkts, 12608:299053 bytes, rule 0
   id: 4949f3b300000066 creatorid: 71920f9a

INFO:
Status: Enabled for 0 days 02:25:51           Debug: Urgent

Hostid:   0x71920f9a
Checksum: 0x8c4f6df47a4b0bfa4fc07d8010bb4527

State Table                          Total             Rate
  current entries                        1               
  searches                          578778           66.1/s
  inserts                               66            0.0/s
  removals                              65            0.0/s
Source Tracking Table
  current entries                        0               
  searches                               0            0.0/s
  inserts                                0            0.0/s
  removals                               0            0.0/s
Counters
  match                             520393           59.5/s
  bad-offset                             0            0.0/s
  fragment                               0            0.0/s
  short                                  0            0.0/s
  normalize                              0            0.0/s
  memory                                 0            0.0/s
  bad-timestamp                          0            0.0/s
  congestion                             0            0.0/s
  ip-option                              0            0.0/s
  proto-cksum                            0            0.0/s
  state-mismatch                         0            0.0/s
  state-insert                           0            0.0/s
  state-limit                            0            0.0/s
  src-limit                              0            0.0/s
  synproxy                               0            0.0/s
Limit Counters
  max states per rule                    0            0.0/s
  max-src-states                         0            0.0/s
  max-src-nodes                          0            0.0/s
  max-src-conn                           0            0.0/s
  max-src-conn-rate                      0            0.0/s
  overload table insertion               0            0.0/s
  overload flush states                  0            0.0/s

TIMEOUTS:
tcp.first                   120s
tcp.opening                  30s
tcp.established           86400s
tcp.closing                 900s
tcp.finwait                  45s
tcp.closed                   90s
tcp.tsdiff                   30s
udp.first                    60s
udp.single                   30s
udp.multiple                 60s
icmp.first                   20s
icmp.error                   10s
other.first                  60s
other.single                 30s
other.multiple               60s
frag                         30s
interval                     10s
adaptive.start             6000 states
adaptive.end              12000 states
src.track                     0s

LIMITS:
states        hard limit    10000
src-nodes     hard limit    10000
frags         hard limit     5000
tables        hard limit     1000
table-entries hard limit   200000

OS FINGERPRINTS:
696 fingerprints loaded
[root@FreeBSD-000 ~]#
В первом случае, пакеты не ловятся правилом, и не отправляются в нужную очередь (AAA). Все отправляется в default очередь (common):

Код: Выделить всё

FILTER RULES:
...
@1 pass on le0 inet from any to 172.16.0.33 flags S/SA keep state queue AAA
  [ Skip steps: i=end d=end f=end p=end sa=end sp=end da=end dp=end ]
  [ queue: qname=AAA qid=2 pqname= pqid=2 ]
  [ Evaluations: 5590      Packets: 0         Bytes: 0           States: 0     ]
...
ALTQ:
...
queue  AAA on le0 bandwidth 200Kb priority 0 qlimit 20 
  [ pkts:          0  bytes:          0  dropped pkts:      0 bytes:      0 ]
  [ qlength:   0/ 20  borrows:      0  suspends:      0 ]
  [ qid=2 ifname=le0 ifbandwidth=1Mb ]
queue  common on le0 bandwidth 650Kb priority 0 qlimit 100 cbq( borrow default ) 
  [ pkts:      20462  bytes:   19288896  dropped pkts:     37 bytes:  49074 ]
  [ qlength:  75/100  borrows:  18769  suspends:      0 ]
  [ qid=3 ifname=le0 ifbandwidth=1Mb ]
Во втором случае, пакеты ловятся правилом, и отправляются в нужную очередь (AAA):

Код: Выделить всё

FILTER RULES:
...
@1 pass on le0 inet from any to 172.16.0.33 no state queue AAA
  [ Skip steps: i=end d=end f=end p=end sa=end sp=end da=end dp=end ]
  [ queue: qname=AAA qid=2 pqname= pqid=2 ]
  [ Evaluations: 993       Packets: 507       Bytes: 539497      States: 0     ]
...
ALTQ:
...
queue  AAA on le0 bandwidth 200Kb priority 0 qlimit 20 
  [ pkts:        451  bytes:     495435  dropped pkts:     40 bytes:  24932 ]
  [ qlength:  20/ 20  borrows:      0  suspends:    120 ]
  [ qid=2 ifname=le0 ifbandwidth=1Mb ]
queue  common on le0 bandwidth 650Kb priority 0 qlimit 100 cbq( borrow default ) 
  [ pkts:        174  bytes:      15740  dropped pkts:      0 bytes:      0 ]
  [ qlength:   0/100  borrows:      0  suspends:      0 ]
  [ qid=3 ifname=le0 ifbandwidth=1Mb ]

Аватара пользователя
zingel
beastie
Сообщения: 6204
Зарегистрирован: 2007-10-30 3:56:49
Откуда: Moscow
Контактная информация:

Re: pf queue без no state

Непрочитанное сообщение zingel » 2008-12-19 9:47:03

Код: Выделить всё

uname -a
Z301171463546 - можно пожертвовать мне денег

ppv17770
проходил мимо

Re: pf queue без no state

Непрочитанное сообщение ppv17770 » 2008-12-19 10:05:09

Код: Выделить всё

[root@FreeBSD-000 ~]# uname -a
FreeBSD FreeBSD-000.xyz.ru 7.0-RELEASE FreeBSD 7.0-RELEASE #23: Wed Apr  9 13:45:14 VLAST 2008     root@FreeBSD-000.xyz.ru:/usr/obj/usr/src/sys/FREEBSD-000  i386

Sadok123
сержант
Сообщения: 177
Зарегистрирован: 2008-09-04 10:59:32

Re: Off

Непрочитанное сообщение Sadok123 » 2008-12-19 14:18:22

FreeBSD 7.0-RELEASE #23
О, люди! :) По 23 раза ядра пересобирают :)

ПС: ничего личного :)

z1riser
проходил мимо

Re: pf queue без no state

Непрочитанное сообщение z1riser » 2008-12-21 14:15:28

Бился и я с ПФом, и точно также все валилось в дефолтную очередь.
Прочитав твой топик, решил попробовать с "no state"

и о чудо... Заработало...
так что, могу принять участие в тестировании...

работает:

Код: Выделить всё

FreeBSD x.ua 7.0-RELEASE-p5 FreeBSD 7.0-RELEASE-p5 #0: Mon Nov 10 15:09:16 EET 2008     root@x.ua:/usr/obj/usr/src/sys/GENERIC.last.ok  i386


ext_if        =  "fxp0"
external_addr =  "77.88.196.18"
int_if        =  "sk0"
internal_addr  =  "192.168.0.0/24"

rdr on $ext_if inet proto tcp from any to any port 4899 -> 192.168.0.98
rdr on $int_if inet proto tcp from $internal_addr to !192.168.0.0/24 port { 80, 3128, 8000, 8080 } -> 192.168.0.100 port 3128

nat on fxp0 from 192.168.0.0/24 to any -> 77.88.196.18

pass out on $int_if proto tcp from any to <local> no state queue http_ua label "ua_in"

pfctl -sl
dcl 4993 0 0 0 0 0 0
ua_in 3520 465 353915 0 0 465 353915
/usr/home/riser#=> pfctl -sl
dcl 6080 0 0 0 0 0 0
ua_in 4203 543 428031 0 0 543 428031


ALTQ:
queue root_sk0 on sk0 bandwidth 6Mb priority 0 cbq( wrr root ) {def, http_ua}
  [ pkts:      44114  bytes:   26726321  dropped pkts:      0 bytes:      0 ]
  [ qlength:   0/ 50  borrows:      0  suspends:      0 ]
  [ qid=1 ifname=sk0 ifbandwidth=6Mb ]
queue  def on sk0 bandwidth 1.80Mb cbq( red default )
  [ pkts:      35527  bytes:   18725282  dropped pkts:    347 bytes: 209278 ]
  [ qlength:   9/ 50  borrows:      0  suspends:   1348 ]
  [ qid=2 ifname=sk0 ifbandwidth=6Mb ]
queue  http_ua on sk0 bandwidth 4.20Mb cbq( red )
  [ pkts:       8587  bytes:    8001039  dropped pkts:      0 bytes:      0 ]
  [ qlength:   0/ 50  borrows:      0  suspends:    294 ]
  [ qid=3 ifname=sk0 ifbandwidth=6Mb ]


не работает

Код: Выделить всё

pass out on $int_if proto tcp from !<local> to <local> flags S/SA keep state queue http_ua label "ua_in"

pfctl -sl
dcl 3861 0 0 0 0 0 0
ua_in 3692 0 0 0 0 0 0
/usr/home/riser#=> pfctl -sl
dcl 4261 0 0 0 0 0 0
ua_in 4062 0 0 0 0 0 0
/usr/home/riser#=> pfctl -sl
dcl 4704 0 0 0 0 0 0
ua_in 4485 0 0 0 0 0 0


не работает

pass out on $int_if proto tcp from any to <local> queue http_ua label "ua_in"

usr/home/riser#=> pfctl -sl
ua_in 784 0 0 0 0 0 0
/usr/home/riser#=> pfctl -sl
ua_in 1084 0 0 0 0 0 0
/usr/home/riser#=> pfctl -sl
ua_in 1350 0 0 0 0 0 0