Jump to content
Калькуляторы

FreeBSD + 10 Gbit ixgbe + dummynet

dadv, смущает именно то, что такая же конфигурация на E3-1270 справляется более, чем лучше.

ОК, попробую для чистоты эксперимента с pf nat перейти на ipfw nat. Правда была уже одна попытка, неудачная. Может что то изменилось с тех пор, может просто не допилил, как надо.

Что можете сказать по поводу dummynet? Стоит ли переходить на тот же ng_car ?

Share this post


Link to post
Share on other sites

Могу добавить только одно - пробуйте

Share this post


Link to post
Share on other sites

Без отказа от PF тут оптимизировать ничего не получится. Лучше попробуйте ipfw nat, если проблемы будут оставаться - можно будет в этом же тредике пооптимизировать систему/рулсет.

Share this post


Link to post
Share on other sites

Попробовал перейти на ipfw nat , результат был хороший. По top загрузка от dummynet упала почти в ноль, по данным из скрипта от dadv - с 60% до 30-40%. Это был еще не совсем ЧНН. В ближайшее время переделаем скрипты на роутере, чтобы использовал ipfw nat, да и вообще оптимизировать их надо, и посмотрим, как будет общая загрузка + производительность.

Share this post


Link to post
Share on other sites

Запустил бордер с Freebsd 9.1 . Карта Intel 82599 X520-da2 . На сервере только PF NAT(Натимм пулом адресом /26) и немного роутинга . Процессор Intel® Xeon® CPU E31240 @ 3.30GHz

Сервер HP ProLiant DL120 G7 Partnumber 628692-421 . Посоветйте железо , чтобы отмолотить более > 4 гбит (Rx)

 

top -SHPI

last pid: 86197;  load averages:  4.56,  4.19,  4.19              up 1+02:28:28  20:55:09
137 processes: 8 running, 98 sleeping, 31 waiting
CPU 0:  0.0% user,  0.0% nice,  3.0% system, 68.7% interrupt, 28.4% idle
CPU 1:  0.0% user,  0.0% nice,  1.5% system, 67.2% interrupt, 31.3% idle
CPU 2:  0.0% user,  0.0% nice,  1.5% system, 43.3% interrupt, 55.2% idle
CPU 3:  0.0% user,  0.0% nice,  3.0% system, 52.2% interrupt, 44.8% idle
Mem: 116M Active, 259M Inact, 1472M Wired, 31M Cache, 210M Buf, 63M Free
Swap: 4096M Total, 4096M Free

 PID USERNAME   PRI NICE   SIZE    RES STATE   C   TIME   WCPU COMMAND
  11 root       155 ki31     0K    64K RUN     2  21.3H 46.58% idle{idle: cpu2}
  11 root       155 ki31     0K    64K RUN     3  23.1H 45.75% idle{idle: cpu3}
  12 root       -92    -     0K   544K RUN     0 116:02 38.67% intr{irq265: ix0:que }
  12 root       -92    -     0K   544K CPU0    0 117:41 36.47% intr{irq264: ix0:que }
  12 root       -92    -     0K   544K CPU1    1 114:19 33.25% intr{irq267: ix0:que }
  12 root       -92    -     0K   544K WAIT    1 115:09 33.15% intr{irq266: ix0:que }
  11 root       155 ki31     0K    64K CPU1    1  20.4H 32.08% idle{idle: cpu1}
  12 root       -92    -     0K   544K WAIT    2  88:09 27.88% intr{irq269: ix1:que }
  11 root       155 ki31     0K    64K RUN     0  21.5H 26.27% idle{idle: cpu0}
  12 root       -92    -     0K   544K WAIT    3  91:16 25.78% intr{irq271: ix1:que }
  12 root       -92    -     0K   544K WAIT    3  90:05 24.27% intr{irq272: ix1:que }
  12 root       -92    -     0K   544K WAIT    2  87:54 24.07% intr{irq270: ix1:que }

 

netstat -w1 -h

root@gate_rnet:/root # netstat -w1 -h
           input        (Total)           output
  packets  errs idrops      bytes    packets  errs      bytes colls
     321k     0     0       241M       321k     0       236M     0
     324k     0     0       245M       324k     0       241M     0
     331k     0     0       249M       330k     0       251M     0
     324k     0     0       243M       324k     0       246M     0

 

PF OK - states: 910183 (50.6% - limit: 1800000)

Share this post


Link to post
Share on other sites

что то маловато для такой нагрузки на проц.

 

наш простой i7-3770 как НАТ срв дает такие данные:

 

531k 0 0 447M 526k 0 446M 0 0

516k 0 0 433M 511k 0 432M 0 0

517k 0 0 434M 512k 0 433M 0 0

518k 0 0 435M 513k 0 434M 0 0

545k 0 0 458M 540k 0 457M 0 0

513k 0 0 428M 508k 0 428M 0 0

 

при:

 

last pid: 80973; load averages: 3.86, 3.40, 3.46 up 32+07:36:58 00:10:00

107 processes: 7 running, 76 sleeping, 24 waiting

CPU 0: 0.0% user, 0.0% nice, 5.9% system, 73.5% interrupt, 20.6% idle

CPU 1: 0.0% user, 0.0% nice, 0.0% system, 67.6% interrupt, 32.4% idle

CPU 2: 0.0% user, 0.0% nice, 0.0% system, 64.7% interrupt, 35.3% idle

CPU 3: 0.0% user, 0.0% nice, 0.0% system, 58.8% interrupt, 41.2% idle

Mem: 24M Active, 196M Inact, 1264M Wired, 1207M Buf, 10G Free

Share this post


Link to post
Share on other sites

Может потому , что у меня одна планка памяти стоит(2Гб)? Азамат, вы чем натите? И какой у вас проц?

Edited by roysbike

Share this post


Link to post
Share on other sites

выше сразу написал:

 

наш простой i7-3770 как НАТ срв дает такие данные

 

ipfw nat

Edited by Azamat

Share this post


Link to post
Share on other sites

выше сразу написал:

 

наш простой i7-3770 как НАТ срв дает такие данные

 

ipfw nat

Вы натите пулом адресов? можете показать конфиг ipfw nat . Попробую впилить и проверить разницу потив pf nat

Share this post


Link to post
Share on other sites

вот выдержка из файла в автозагрузке (в таблице 40 ip адреса для НАТ instances, в таблице 30 "серые" подсети , которые натятся):

 

таблица 30 заполняется примерно таким образом:

${fwcmd} table 30 add 192.168.59.0/24 81

${fwcmd} table 30 add 192.168.46.0/24 82

 

таблица 40 заполняется скриптом

# IP POOL at table 40

START_PREFIX="/sbin/ipfw table 40 add xxx.xxx.xxx"

 

NUMBER=0

while [ $NUMBER -lt 123 ]; do

NUMBER=$(($NUMBER+1))

$START_PREFIX.$NUMBER $NUMBER

done

 

 

 

# NAT

#

NUMBER2=0

while [ $NUMBER2 -lt 100 ]; do

NUMBER2=$(($NUMBER2+1))

/sbin/ipfw nat $NUMBER2 config ip xxx.xxx.xxx.$NUMBER2 reset same_ports deny_in

done

 

${fwcmd} add 20100 nat tablearg ip from table\(30\) to any out via ${ext_if}

${fwcmd} add 20200 nat tablearg ip from any to table\(40\) in via ${ext_if}

 

 

На сейчас показатели такие:

 

input (Total) output

packets errs idrops bytes packets errs bytes colls drops

631k 0 0 496M 626k 0 493M 0 0

627k 1 0 491M 619k 0 493M 0 0

629k 0 0 493M 622k 0 492M 0 0

607k 0 0 474M 600k 0 470M 0 0

618k 0 0 483M 611k 0 486M 0 0

615k 0 0 480M 608k 0 480M 0 0

635k 0 0 503M 627k 0 503M 0 0

 

На графике потолок был 3.6Гбит/с (IN) / 825Мбит/с (Out) через ix0, похоже процессора впритык хватит на 4Гбит/с IN, что себя вполне окупает.

 

Утилизация процессора:

last pid: 84751; load averages: 5.35, 5.50, 5.59 up 33+05:42:15 22:15:17

107 processes: 8 running, 75 sleeping, 24 waiting

CPU 0: 0.0% user, 0.0% nice, 8.2% system, 75.5% interrupt, 16.3% idle

CPU 1: 0.0% user, 0.0% nice, 6.1% system, 83.7% interrupt, 10.2% idle

CPU 2: 0.0% user, 0.0% nice, 6.1% system, 75.5% interrupt, 18.4% idle

CPU 3: 0.0% user, 0.0% nice, 2.0% system, 79.6% interrupt, 18.4% idle

Mem: 24M Active, 187M Inact, 1274M Wired, 1207M Buf, 10G Free

Swap: 2048M Total, 2048M Free

Edited by Azamat

Share this post


Link to post
Share on other sites

Народ, а сколько pps на 10ке у вас промолачивает? у меня тут мысль о резервации пограничного роутероа, но там порядка 400к pps сейчас, планируется до 600-700к.

Надо чтобы можно было присекать приходящие ddos.

Share this post


Link to post
Share on other sites

По поводу ipfw nat:

на pf использовали правило редиректа вида

rdr pass on vlan19 inet proto tcp from <blocked_clients> to ! <servers> port = http -> 1.2.3.4 port 8000

Для редиректа заблокированных пользователей на страницу "Заплати". Как сделать правило такого редиректа на ipfw nat?

fwd не подходит, ибо меняет только nexthop.

redirect_port как бы да, но судя по манам и тестам, редиректит только пакеты, которые приходят с dst ip инстанса НАТа.

Подозреваю, что надо использовать как то reverse, но пока тесты и курение манов не дали прозрения.

Подскажите, пожалуйста, кто поднимал такую задачу на ipfw nat.

Share this post


Link to post
Share on other sites

ipfw add 500 fwd 1.2.3.4,8000 tcp from table(32) to any dst-port 80,443 via ng*

 

?

Edited by fenix-vt

Share this post


Link to post
Share on other sites

ipfw add 500 fwd 1.2.3.4,8000 tcp from table(32) to any dst-port 80,443 via ng*

 

?

я форвардю на 127.0.0.1,80 а 127.0.0.1,80 слушает nginx(и ngnix ридект на ссылку сайт.рф/баланс) . fwd работает только если IP веб-сервера в одном броадкаст домене с NAS.

Edited by roysbike

Share this post


Link to post
Share on other sites

Хотелось бы без fwd, чтобы не поднимать на каждом NAS nginx. Наверняка кто-нибудь использует конструкцию без fwd.

Share this post


Link to post
Share on other sites

ipfw add 500 fwd 1.2.3.4,8000 tcp from table(32) to any dst-port 80,443 via ng*

 

?

я форвардю на 127.0.0.1,80 а 127.0.0.1,80 слушает nginx(и ngnix ридект на ссылку сайт.рф/баланс) . fwd работает только если IP веб-сервера в одном броадкаст домене с NAS.

Хмм, т.е. fwd не просто меняет next-hop (т.е. по сути dst mac address), но и dst ip? Если так, то дальше можно и redirect_port прикрутить.

Share this post


Link to post
Share on other sites

Хмм, т.е. fwd не просто меняет next-hop (т.е. по сути dst mac address), но и dst ip?

man ipfw:

             The fwd action does not change the contents of the packet at all.
            In particular, the destination address remains unmodified, so
            packets forwarded to another system will usually be rejected by
            that system unless there is a matching rule on that system to
            capture them.  For packets forwarded locally, the local address
            of the socket will be set to the original destination address of
            the packet.  This makes the netstat(1) entry look rather weird
            but is intended for use with transparent proxy servers.

Share this post


Link to post
Share on other sites

Мы для редиректа держим отдельный natd на VLAN сервере (до НАТ).

трафика обычно не много, поэтому нагрузка незаметна.

 

/sbin/natd -proxy_rule port 80 server ${billing_IP}:81 -p 3388 yes -a ${int_IP}

 

До этих правил пропускается трафик разрешенных пользователей, потом остальной трафик на 80 порт разворачивается.

 

divert 3388 tcp from any to not ${billing_IP} dst-port 80 out via ix0

divert 3388 tcp from ${billing_IP} 81 to any in via em0

 

 

Ну и на билинге сама страница с оповещенем вешается на 81 порт.

Edited by Azamat

Share this post


Link to post
Share on other sites

ipfw fwd заюзать для этих целей не получится, т.к. при попадании в это правило пакет выходит из ipfw (pass).

Share this post


Link to post
Share on other sites

Хотелось бы без fwd, чтобы не поднимать на каждом NAS nginx. Наверняка кто-нибудь использует конструкцию без fwd.

 

Прекрасно работает такая конструкция.

На нас, на пример, каждом BRASе поднято одно правило:

fwd 10.0.0.1 ip from 172.16.5.0/24 to any

(Должникам выдается такой пул, если выдаются реальные -- используйте таблицу)

А на отдельностоящем хосте 10.0.0.1 поднято.... да что угодно, у нас это транспарент прокси. Вы можете поставить nginx, apache, etc

 

В man'е белым по черному написано: fwd | forward ipaddr | tablearg[,port] Change the next-hop on matching packets to ipaddr, which can be an IP address or a host name.

...

If ipaddr is not a local address, then the port number (if specified) is ignored, and the packet will be forwarded to the remote

address, using the route as found in the local routing table for that IP.

 

бегло переводя на язык русских админов:

1. некстхоп МЕНЯЕТСЯ.

2. если некстхоп -- чужая тачка, то порт будет проигнорирован, но роут на этот адрес ДОЛЖЕН присутствовать в системе.

 

P.S. забыл добавить: на удаленном хосте (10.0.0.1) тоже должно быть правило вида:

fwd 127.0.0.1,3128 tcp from 172.16.5.0/24 to any dst-port 80

 

ну и проксисервер (или http-сервер), который слушает порт 3128.

 

все отлично работает уже около 5 лт :)

Edited by fenix-vt

Share this post


Link to post
Share on other sites

Я имел в виду, что не получится конструкция с fwd и дальнейшим redirect_port.

Сейчас курю маны на предмет ng_nat и proxyrule.

Share this post


Link to post
Share on other sites

Я имел в виду, что не получится конструкция с fwd и дальнейшим redirect_port.

Сейчас курю маны на предмет ng_nat и proxyrule.

может я прослушал. А чем мешает слушать 127.0.0.1 например nginx. и при обращении редиректить на ваш веб сервер?

Edited by roysbike

Share this post


Link to post
Share on other sites

Я имел в виду, что не получится конструкция с fwd и дальнейшим redirect_port.

Сейчас курю маны на предмет ng_nat и proxyrule.

может я прослушал. А чем мешает слушать 127.0.0.1 например nginx. и при обращении редиректить на ваш веб сервер?

nginx не подходит, т.к. есть необходимость перенаправлять не только http трафик.

Share this post


Link to post
Share on other sites

Я имел в виду, что не получится конструкция с fwd и дальнейшим redirect_port.

Сейчас курю маны на предмет ng_nat и proxyrule.

 

ng_nat, редирект 80-порта для table(10) на XXX.XXX.XXX.XXX:81

 

netgraph:

 

mkpeer ipfw: nat 100 out

name ipfw:100 nat

connect ipfw: nat: 101 in

msg nat: setaliasaddr YYY.YYY.YYY.YYY

msg nat: setmode {flags=0x60 mask=0xff}

msg nat: proxyrule "type no_encode port 80 server XXX.XXX.XXX.XXX:81 proto tcp"

 

ipfw:

 

netgraph tablearg ip from table(10) to any dst-port 80

netgraph 100 ip from XXX.XXX.XXX.XXX to any src-port 81

Share this post


Link to post
Share on other sites

DemYaN, благодарю, подобные примеры и нагугливал. Только в правилах ipfw должно быть так:

netgraph 100 ip from table(10) to any dst-port 80
netgraph 101 ip from XXX.XXX.XXX.XXX to any src-port 81

Таким образом редирект заработал.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now