Jump to content

Recommended Posts

Posted

Доброго времени суток.

Стоял роутер FreeBSD 6.2 с 2-мя фаерволами: pf и ipfw. Решили сделать такую схему: перед роутером на freebsd 6.2 поставить машинку посильнее с freebsd 7.0 BRIDGE и перенести на него ipfw с dummynet .

rc.conf выглядит так:

##      Interfaces
ifconfig_em0="inet 192.168.1.88 netmask 255.255.255.0"
ifconfig_em2="inet 192.168.1.77 netmask 255.255.255.0"
ifconfig_em0="up"
ifconfig_em2="up"
cloned_interfaces="bridge0"
ifconfig_bridge0="addm em0 addm em2 up 192.168.1.88 netmask 255.255.255.0"
gateway_enable="YES"

Параметры sysctl.conf:

net.link.bridge.pfil_onlyip=0
net.link.bridge.ipfw=1
net.link.bridge.pfil_bridge1

Скрипт фаервола собственно перенесли полностью. Вот часть скрипта:

IPFW="/sbin/ipfw -fq"
$IPFW flush
$IPFW table 17 add IP
$IPFW pipe 22 config bw 10Mbit/s mask dst-ip 0xffffffff
$IPFW pipe 23 config bw 10Mbit/s mask src-ip 0xffffffff

$IPFW add pipe 22 ip from any to table\(17\) via bridge0 in
$IPFW add pipe 23 ip from table\(17\) to any via bridge0 out

При этом шейпер работает только на отдачу. Приходящий трафик не шейпится. В чём может быть неточность ?

Posted
ifconfig_em0="inet 192.168.1.88 netmask 255.255.255.0"

ifconfig_em2="inet 192.168.1.77 netmask 255.255.255.0"

ifconfig_em0="up"

ifconfig_em2="up"

Насколько я помню фрю эти вещи взаимоисключающие, да и "up" добавляется автоматически при установке адреса. Обычно конструкция ifconfig_интерфейс="up" используется для поднятия интерфейсов без IP. Ну да это не существенно, бриджу наверное не мешает.
gateway_enable="YES"
На бридже наверное не нужен, он трафик не маршрутизирует. В скриптах по этому параметру выставляется sysctl net.inet.ip.forwarding в 1, в случае бриджа он не маршрутизирует IP, он бриджует ethernet. Интересный вопрос в другом: а умеет ли dummynet работать с ethernet или всетаки только с ip? Не пользовался им лет несколько, может и научили. Хотя времени много прошло, я могу и не знать чего-то. В любом случае интересно глянуть на счетчики ipfw show и ipfw pipe show.

 

 

Posted
$IPFW add pipe 22 ip from any to table\(17\) via bridge0 in

$IPFW add pipe 23 ip from table\(17\) to any via bridge0 out[/code]

А собственно какого тут указан бриджевый интерфейс а не входящий ?

Posted
Интересный вопрос в другом: а умеет ли dummynet работать с ethernet или всетаки только с ip? Не пользовался им лет несколько, может и научили. Хотя времени много прошло, я могу и не знать чего-то. В любом случае интересно глянуть на счетчики ipfw show и ipfw pipe show.
Даминет, вроде, и с ethernet работает.

Но причём тут это?

Бридж работает с ethernet, а при этом dummynet может резать по ip.

Posted
$IPFW add pipe 22 ip from any to table\(17\) via bridge0 in

$IPFW add pipe 23 ip from table\(17\) to any via bridge0 out[/code]

А собственно какого тут указан бриджевый интерфейс а не входящий ?

Решил заменой bridge0 на em0, спасибо. шейпер заработал в обе стороны.

И тут же ещё вопрос. Решил оптимизировать правила ipfw:

$IPFW add pipe 15 ip from any to table\(64\) via em2 out
$IPFW add pipe 16 ip from table\(64\) to any via em0 out
$IPFW add allow ip from any to table\(64\)
$IPFW add allow ip from table\(64\) to any

$IPFW add pipe 11 ip from any to table\(16\) via em2 out
$IPFW add pipe 12 ip from table\(16\) to any via em0 out
$IPFW add allow ip from any to table\(16\)
$IPFW add allow ip from table\(16\) to any

$IPFW add pipe 13 ip from any to table\(32\) via em2 out
$IPFW add pipe 14 ip from table\(32\) to any via em0 out
$IPFW add allow ip from any to table\(32\)
$IPFW add allow ip from table\(32\) to any
....

Т.е. первая таблица содержит самое большое колличество записей, потом меньше, меньше и т.д. В конце каждого поставил разрешающее правило, что бы записи из таблицы 64 не пробегали остальные правила.

С другой стороны, люди не вошедший ни в одну из таблиц (у которых скорость не режется) будут всё равно проходить эти правила. Есть ли всё таки смысл в этой оптимизации ???

Отсюда же второй, вытекающий вопрос.

ipfw pipe list выдаёт большое колличество дропнутых пакетов:

00017:   8.192 Mbit/s    0 ms   50 sl. 0 queues (65536 buckets) droptail
00016:   4.096 Mbit/s    0 ms   50 sl. 71 queues (65536 buckets) droptail

6213 ip           0.0.0.0/0          10.2.12.65/0     69955 11306495  0    0   0
6463 ip           0.0.0.0/0          10.3.13.57/0     2780159 2254902332 50 42712 239226
7938 ip           0.0.0.0/0         10.20.11.42/0     102797 144830954  0    0  92
7961 ip           0.0.0.0/0          10.4.11.17/0     69297 88351853  0    0   0
7966 ip           0.0.0.0/0         10.10.11.10/0     8759  9781860  0    0  27
8236 ip           0.0.0.0/0          10.2.52.40/0     10929   720451  0    0   0
8239 ip           0.0.0.0/0          10.4.52.39/0     500882 37996667  0    0   0
8556 ip           0.0.0.0/0         10.4.53.100/0     5593  4464315  0    0  16
9737 ip           0.0.0.0/0           10.6.50.5/0     125080 187834306  0    0 939
9996 ip           0.0.0.0/0           10.4.51.4/0     1436896 1781399457 40 55723 94551
10008 ip           0.0.0.0/0          10.4.51.16/0     43891 49458360  0    0 178
10816 ip           0.0.0.0/0          10.2.62.68/0     131047  9637296  0    0   0
12835 ip           0.0.0.0/0          10.5.38.41/0     265533 263504412  0    0 279
....

При том что такое во всех таблицах. Что собственно означают эти пакеты ?

На самом интерфейсе ошибок нету:

netstat -w 1 -i em0
            input        (Total)           output
   packets  errs      bytes    packets  errs      bytes colls
     50536     0   36236924      49765     0   35642474     0
     52249     0   37737986      51805     0   37382598     0
     53556     0   38646980      52734     0   37761772     0
     52284     0   38191334      51814     0   37735934     0
     54015     0   38829194      53484     0   37894566     0
     53104     0   38558514      51910     0   37506572     0
     53327     0   38695412      53318     0   38238867     0
     53096     0   39122124      52634     0   38396514     0
     51845     0   38122342      50993     0   37519344     0
     51570     0   37756954      50843     0   37124938     0
.....

При этом на следующей машине в 2 раза меньше пакетов (следующая машина роутер с FreeBSD 6.2, см. схему сети в первом посте):

netstat -w 1 -i em1
            input        (Total)           output
   packets  errs      bytes    packets  errs      bytes colls
     25475     0   18455283      25382     0   18453326     0 
     27802     0   20076563      27664     0   20073054     0 
     25332     0   18336171      25246     0   18342047     0 
     26872     0   19425318      26744     0   19418150     0 
     26075     0   18697083      25958     0   18685309     0 
     26874     0   19429125      26720     0   19423033     0 
     26444     0   19157855      26338     0   19154132     0 
     26453     0   19363678      26299     0   19350037     0 
     25708     0   19071870      25626     0   19112105     0 
     27184     0   19682465      27056     0   19671208     0

Posted
Т.е. первая таблица содержит самое большое колличество записей, потом меньше, меньше и т.д. В конце каждого поставил разрешающее правило, что бы записи из таблицы 64 не пробегали остальные правила.

С другой стороны, люди не вошедший ни в одну из таблиц (у которых скорость не режется) будут всё равно проходить эти правила. Есть ли всё таки смысл в этой оптимизации ???

Для ветвления используйте skipto

 

ipfw pipe list выдаёт большое колличество дропнутых пакетов:

При том что такое во всех таблицах. Что собственно означают эти пакеты ?

Количество пакетов, которые не пролезли в трубу. Абсолютно нормальное поведение.

 

netstat -w 1 -i em1

man netstat на предмет флага -I

Posted
Для ветвления используйте skipto
Это примерно так выглядеть будет ?

IPFW="/sbin/ipfw -fq"
while read ip
do
$IPFW table 64 add "$ip"
done < /pf/64

while read ip
do
$IPFW table 16 add "$ip"
done < /pf/16

$IPFW pipe 15 config bw 4096Kbit/s mask dst-ip 0xffffffff
$IPFW pipe 16 config bw 4096Kbit/s mask src-ip 0xffffffff

$IPFW pipe 11 config bw 1024Kbit/s mask dst-ip 0xffffffff
$IPFW pipe 12 config bw 1024Kbit/s mask src-ip 0xffffffff

$IPFW add pipe 15 ip from any to table\(64\) via em2 out
$IPFW add pipe 16 ip from table\(64\) to any via em0 out
$IPFW add skipto 10000 ip from any to table\(64\)
$IPFW add skipto 10000 ip from table\(64\) to any

$IPFW add pipe 11 ip from any to table\(16\) via em2 out
$IPFW add pipe 12 ip from table\(16\) to any via em0 out
$IPFW add skipto 10000 ip from any to table\(64\)
$IPFW add skipto 10000 ip from table\(64\) to any
...
$IPFW add 10000 allow ip from any

Количество пакетов, которые не пролезли в трубу. Абсолютно нормальное поведение.
Понятно.
man netstat на предмет флага -I
Спасибо, разобрался :)

 

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.