The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"IPFW NAT POOL (нат пул на ipfw nat)"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Открытые системы на сервере (Firewall, Фильтрация пакетов / FreeBSD)
Изначальное сообщение [ Отслеживать ]

"IPFW NAT POOL (нат пул на ipfw nat)"  +/
Сообщение от Monty email(ok) on 12-Янв-11, 10:48 
Добрый день!
Подскажите, пожалуйста, как лучше соорудить NAT POOL с помощью IPFW NAT?
Допустим у нас есть 10 белых адресов, через которые надо занатить "серых" пользователей.
Коллеги подсказывали такой вариант - создать 10 правиль ipfw nat (по одному на каждый белый адрес) и раскидывать "серый трафик" с помощью ipfw probe.
Что думаете? И как при этом потом направлять трафик по выбранному IP постоянно? То есть, если клиент подключился к онлайн игрушке и мы в первый момент занатили его через "белый" адрес А, то потом весь трафик на тот DST IP должен продолжать натиться через тот же "белый" IP A.
У кого какие идеи?
Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "IPFW NAT POOL (нат пул на ipfw nat)"  +/
Сообщение от sherlock (ok) on 12-Янв-11, 12:55 
>[оверквотинг удален]
> пользователей.
> Коллеги подсказывали такой вариант - создать 10 правиль ipfw nat (по одному
> на каждый белый адрес) и раскидывать "серый трафик" с помощью ipfw
> probe.
> Что думаете? И как при этом потом направлять трафик по выбранному IP
> постоянно? То есть, если клиент подключился к онлайн игрушке и мы
> в первый момент занатили его через "белый" адрес А, то потом
> весь трафик на тот DST IP должен продолжать натиться через тот
> же "белый" IP A.
> У кого какие идеи?

использовать вместе с probe keep-state & check-state
но задача не тривиальная, я в свое время делал балансировку каналов (2 канала), проблем много, FTP-Passive надо думать будет, как сделать, пользователи у кого стоял mailagent, жаловались, что он постоянно пиликал им о новых письмах (если их не читали), он видать раз в несколько секунд проверяет ящик и на прежнее письмо пиликал как будто оно новое.

в общем проще сделать так: проанализировать кто как юзает инет и физически разбить их на 10 групп и жестко закрепить за определенным белым IP.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "IPFW NAT POOL (нат пул на ipfw nat)"  +/
Сообщение от Monty email(ok) on 12-Янв-11, 13:42 
> в общем проще сделать так: проанализировать кто как юзает инет и физически
> разбить их на 10 групп и жестко закрепить за определенным белым
> IP.

Мне такой вариант не походит, обонентов 20 тысяч, серверов 6, мне на каждом надо сделать просто пул и натить, выделять как-то блоками возможности нет, тут не угадаешь. И расход реальных адресов выйдет гораздо больше.

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "IPFW NAT POOL (нат пул на ipfw nat)"  +/
Сообщение от sherlock (ok) on 13-Янв-11, 07:24 
>> в общем проще сделать так: проанализировать кто как юзает инет и физически
>> разбить их на 10 групп и жестко закрепить за определенным белым
>> IP.
> Мне такой вариант не походит, обонентов 20 тысяч, серверов 6, мне на
> каждом надо сделать просто пул и натить, выделять как-то блоками возможности
> нет, тут не угадаешь. И расход реальных адресов выйдет гораздо больше.

а как 10 адресов поделить между 6-ю серверами?
мне кажется тут надо смотреть в сторону своей AS с BGP, тем более при наличии такого количества клиентов финансово потянете.

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

4. "IPFW NAT POOL (нат пул на ipfw nat)"  +/
Сообщение от Monty email(ok) on 13-Янв-11, 14:02 
>>> в общем проще сделать так: проанализировать кто как юзает инет и физически
>>> разбить их на 10 групп и жестко закрепить за определенным белым
>>> IP.
>> Мне такой вариант не походит, обонентов 20 тысяч, серверов 6, мне на
>> каждом надо сделать просто пул и натить, выделять как-то блоками возможности
>> нет, тут не угадаешь. И расход реальных адресов выйдет гораздо больше.
> а как 10 адресов поделить между 6-ю серверами?
> мне кажется тут надо смотреть в сторону своей AS с BGP, тем
> более при наличии такого количества клиентов финансово потянете.

10 адресов это я привел просто к примеру. На самом деле на каждом сервере мы используем пул по 16 белых адресов. AS у нас конечно же есть, тут дело не в этом. От НАТа мы отказаться не можем, потому как у нас есть всего 6 тыс. белых адресов, а в онлайне одновременно пользователей гораздо больше. Получить еще адреса - проблема в виду того, что их почти не осталось.

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

5. "IPFW NAT POOL (нат пул на ipfw nat)"  +/
Сообщение от sherlock (ok) on 14-Янв-11, 07:54 
> 10 адресов это я привел просто к примеру. На самом деле на
> каждом сервере мы используем пул по 16 белых адресов. AS у
> нас конечно же есть, тут дело не в этом. От НАТа
> мы отказаться не можем, потому как у нас есть всего 6
> тыс. белых адресов, а в онлайне одновременно пользователей гораздо больше. Получить
> еще адреса - проблема в виду того, что их почти не
> осталось.

Извините, но моих знаний тут уже не хватает.

пробуйте делать через probe, я делал в свое время так (здесь еще через natd):

/sbin/ipfw -q add 100 divert NATD1 ip from any to any in via CHAN1
/sbin/ipfw -q add 110 divert NATD2 ip from any to any in via CHAN2

/sbin/ipfw -q add 8100 tee NATD1 ip from any to any out \( via CHAN1 or via CHAN2 \)
/sbin/ipfw -q add 8150 check-state
/sbin/ipfw -q add 8200 divert NATD2 ip from any to any out \( via CHAN1 or via CHAN2 \)
/sbin/ipfw -q add 8250 check-state

/sbin/ipfw -q add 9000 prob 0.5 skipto 9500 ip from any to any out \( via CHAN1 or via CHAN2 \)

/sbin/ipfw -q add 9100 divert NATD1 ip from any to any out \( via CHAN1 or via CHAN2 \)
/sbin/ipfw -q add 9200 fwd GATE1 ip from NATD1_IP to any out \( via CHAN2 or via CHAN2 \) keep-state
/sbin/ipfw -q add 9210 allow ip from any to any out keep-state

/sbin/ipfw -q add 9500 divert NATD2 ip from any to any out \( via CHAN1 or via CHAN2 \)
/sbin/ipfw -q add 9600 fwd GATE2 ip from NATD2_IP to any out \( via CHAN1 or via CHAN2 \) keep-state
/sbin/ipfw -q add 9610 allow ip from any to any out keep-state

вот идея примерно такая (не даю гарантию, что схема рабочая, т.к. поудалял много, в частности нашел у себя ошибку, что корректно балансился только TCP, ICMP и UDP вообще просто по раунд-робин кидались, да и давно уже не используется, так в архиве лежит), т.е. как бы IP пользователя привязывается к какому-нибудь правилу ната, только тайминги жизни динамических правил надо сделать побольше, пробуйте, на тестовом

Ответить | Правка | ^ к родителю #4 | Наверх | Cообщить модератору

6. "IPFW NAT POOL (нат пул на ipfw nat)"  +/
Сообщение от Deac (ok) on 14-Янв-11, 10:27 
> Что думаете? И как при этом потом направлять трафик по выбранному IP
> постоянно? То есть, если клиент подключился к онлайн игрушке и мы
> в первый момент занатили его через "белый" адрес А, то потом
> весь трафик на тот DST IP должен продолжать натиться через тот
> же "белый" IP A.
> У кого какие идеи?

М.б. стоит попробовать pf NAT, там это уже реализовано.
Есть только одна проблема, pf не масштабируется, надо пробовать для конкретного железа и конкретной загрузки.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

7. "IPFW NAT POOL (нат пул на ipfw nat)"  +/
Сообщение от Monty email(ok) on 17-Янв-11, 21:34 
> М.б. стоит попробовать pf NAT, там это уже реализовано.
> Есть только одна проблема, pf не масштабируется, надо пробовать для конкретного железа
> и конкретной загрузки.

pf NAT как раз сейчас и работает. И все было бы хорошо, если бы он нормально загружал все процессоры, а так одно ядро загружает и все. Вот, полюбуйтесь. Одно вод завязку (CPU 7), а остальные простаивают.

CPU 0:  0.0% user,  0.0% nice, 16.2% system,  7.1% interrupt, 76.7% idle
CPU 1:  1.1% user,  0.0% nice, 15.8% system,  5.6% interrupt, 77.4% idle
CPU 2:  0.7% user,  0.0% nice, 10.5% system,  4.1% interrupt, 84.6% idle
CPU 3:  0.4% user,  0.0% nice,  6.4% system,  5.6% interrupt, 87.6% idle
CPU 4:  0.8% user,  0.0% nice,  9.4% system, 10.2% interrupt, 79.7% idle
CPU 5:  1.1% user,  0.0% nice,  6.4% system,  9.0% interrupt, 83.5% idle
CPU 6:  0.4% user,  0.0% nice,  5.2% system,  3.0% interrupt, 91.4% idle
CPU 7:  0.0% user,  0.0% nice,  0.0% system,  100% interrupt,  0.0% idle

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

8. "IPFW NAT POOL (нат пул на ipfw nat)"  +/
Сообщение от Аноним (??) on 18-Янв-11, 19:12 
http://www.lissyara.su/articles/freebsd/tuning/ipfw_nat/#exa...

>Задача: обеспечить выход в интернет локальной сети задействуя все имеющиеся внешние адреса >(использовать пул адресов). Все это через нат и используя шейпер Dummynet обеспечить >честное распределение пропускной способности между клиентами в локальной сети.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

9. "IPFW NAT POOL (нат пул на ipfw nat)"  +/
Сообщение от Monty email(ok) on 26-Янв-11, 13:20 
> http://www.lissyara.su/articles/freebsd/tuning/ipfw_nat/#exa...
>>Задача: обеспечить выход в интернет локальной сети задействуя все имеющиеся внешние адреса >(использовать пул адресов). Все это через нат и используя шейпер Dummynet обеспечить >честное распределение пропускной способности между клиентами в локальной сети.

Спасибо за ссылочку. Сообщаю о полученных результатах.

Сделал с помощью IPFW пул на 8 белых адресов. Выглядит вот так:

01009 prob 0.125000 skipto 2009 ip from any to any in recv ng*
01010 prob 0.142900 skipto 2010 ip from any to any in recv ng*
01011 prob 0.166700 skipto 2011 ip from any to any in recv ng*
01012 prob 0.200000 skipto 2012 ip from any to any in recv ng*
01013 prob 0.250000 skipto 2013 ip from any to any in recv ng*
01014 prob 0.333300 skipto 2014 ip from any to any in recv ng*
01015 prob 0.500000 skipto 2015 ip from any to any in recv ng*
01016 skipto 2016 ip from any to any in recv ng*
01100 deny ip from any to 192.168.0.0/16 via ng*
01200 deny ip from 192.168.0.0/16 to any via ng*
02009 skipto 3000 tag 9 ip from any to any via ng* keep-state
02010 skipto 3000 tag 10 ip from any to any via ng* keep-state
02011 skipto 3000 tag 11 ip from any to any via ng* keep-state
02012 skipto 3000 tag 12 ip from any to any via ng* keep-state
02013 skipto 3000 tag 13 ip from any to any via ng* keep-state
02014 skipto 3000 tag 14 ip from any to any via ng* keep-state
02015 skipto 3000 tag 15 ip from any to any via ng* keep-state
02016 skipto 3000 tag 16 ip from any to any via ng* keep-state
03000 allow ip from any to any via ng*
10017 nat 9 ip from any to any out xmit igb1 tagged 9
10018 nat 9 ip from any to 1.1.1.1 in recv igb1
10019 nat 10 ip from any to any out xmit igb1 tagged 10
10020 nat 10 ip from any to 1.1.1.2 in recv igb1
10021 nat 11 ip from any to any out xmit igb1 tagged 11
10022 nat 11 ip from any to 1.1.1.3 in recv igb1
10023 nat 12 ip from any to any out xmit igb1 tagged 12
10024 nat 12 ip from any to 1.1.1.4 in recv igb1
10025 nat 13 ip from any to any out xmit igb1 tagged 13
10026 nat 13 ip from any to 1.1.1.5 in recv igb1
10027 nat 14 ip from any to any out xmit igb1 tagged 14
10028 nat 14 ip from any to 1.1.1.6 in recv igb1
10029 nat 15 ip from any to any out xmit igb1 tagged 15
10030 nat 15 ip from any to 1.1.1.7 in recv igb1
10031 nat 16 ip from any to any out xmit igb1 tagged 16
10032 nat 16 ip from any to 1.1.1.8 in recv igb1

Работает отлично. Чуть позже отпишусь о результатах производительности.

Ответить | Правка | ^ к родителю #8 | Наверх | Cообщить модератору

10. "Загрузка CPU"  +/
Сообщение от Monty email(ok) on 26-Янв-11, 13:49 
До этого работал PF и грузилось одно ядро процессора. Сейчас перешел на IPFW NAT, но картина не сильно изменилась.

last pid: 47166;  load averages:  0.87,  0.70,  0.48                                                                                                                                                                 up 0+01:39:39  17:42:45
47 processes:  1 running, 46 sleeping
CPU 0:  1.1% user,  0.0% nice, 15.4% system,  6.4% interrupt, 77.1% idle
CPU 1:  0.0% user,  0.0% nice, 12.0% system,  7.5% interrupt, 80.5% idle
CPU 2:  0.0% user,  0.4% nice,  9.4% system,  6.0% interrupt, 84.3% idle
CPU 3:  1.1% user,  0.0% nice,  6.0% system,  4.5% interrupt, 88.4% idle
CPU 4:  0.0% user,  0.0% nice,  9.4% system,  4.1% interrupt, 86.5% idle
CPU 5:  0.4% user,  0.0% nice,  7.9% system,  4.1% interrupt, 87.6% idle
CPU 6:  0.0% user,  0.0% nice,  4.9% system,  1.1% interrupt, 94.0% idle
CPU 7:  0.0% user,  0.0% nice,  0.0% system, 94.7% interrupt,  5.3% idle
Mem: 57M Active, 10M Inact, 356M Wired, 132K Cache, 24M Buf, 2537M Free
Swap: 6144M Total, 6144M Free

Обратите внимание на CPU 7. Почему так происходит? как бы разбросать по всем?
Использует ли кто у себя IPFW NAT ?

Еще вопрос, как бы посмотреть чем там занят процессор?..

Ответить | Правка | ^ к родителю #9 | Наверх | Cообщить модератору

11. "Загрузка CPU"  +/
Сообщение от ввп on 30-Янв-11, 13:39 
> Еще вопрос, как бы посмотреть чем там занят процессор?..

Он же у вас интерапты жрет - с железом походу что-то, не?

vmstat -i
systat -v 1
и смотрите кто это столько потребляет

Ответить | Правка | ^ к родителю #10 | Наверх | Cообщить модератору

12. "Загрузка CPU"  +/
Сообщение от IZh (ok) on 14-Фев-12, 09:34 
сетевухи какие?
sysctl net.isr.maxthreads
?
Ответить | Правка | ^ к родителю #10 | Наверх | Cообщить модератору

13. "Загрузка CPU"  +/
Сообщение от IZh (ok) on 14-Фев-12, 09:46 
> сетевухи какие?
> sysctl net.isr.maxthreads
> ?

Я, если что, намекаю на:
echo net.isr.maxthreads=`sysctl -n hw.ncpu`>>/boot/loader.conf
dmesg|grep igb
igb0: <Intel(R) PRO/1000 Network Connection version - 2.2.5> port 0x1020-0x103f mem 0xb1920000-0xb193ffff,0xb1944000-0xb1947fff irq 40 at device 0.0 on pci1
igb0: Using MSIX interrupts with 5 vectors
igb1: <Intel(R) PRO/1000 Network Connection version - 2.2.5> port 0x1000-0x101f mem 0xb1900000-0xb191ffff,0xb1940000-0xb1943fff irq 28 at device 0.1 on pci1
igb1: Using MSIX interrupts with 5 vectors

Ответить | Правка | ^ к родителю #12 | Наверх | Cообщить модератору

14. "Загрузка CPU"  +/
Сообщение от IZh (ok) on 14-Фев-12, 10:31 
> сетевухи какие?
> sysctl net.isr.maxthreads
> ?

ну и
http://dadv.livejournal.com/139170.html

Ответить | Правка | ^ к родителю #12 | Наверх | Cообщить модератору

15. "Загрузка CPU"  +/
Сообщение от Дмитрий email(??) on 06-Апр-14, 22:12 
> До этого работал PF и грузилось одно ядро процессора. Сейчас перешел на
> IPFW NAT, но картина не сильно изменилась.

В 10 PF уже сделали с поддержкой мультипроцессорности.


Ответить | Правка | ^ к родителю #10 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Спонсоры:
Слёрм
Inferno Solutions
Hosting by Ihor
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2019 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру