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

FreeBSD 7.1-PRERELEASE/amd64 ipfw nat посоветуйте, что покрутить для увеличения производительности ната

здравствуйте. посоветуйте, что покрутить для уменьшения нагрузки на "swi1: net" и увеличить производительность, а значит и размер полосы, которую он может отнатить.

 

вот конфиги:

# -- [r00] 8 marta 108 - 01
natd2_enable="YES"
natd2_alias="92.43.185.2"
natd2_network="10.72.21.0/24"
natd2_port="8702"
...
(повторяем 118 раз)
...
# -- [r30] agal 46 - 05
natd118_enable="YES"
natd118_alias="92.43.185.118"
natd118_network="10.72.217.0/24"
natd118_port="8818"

$fwcmd table 2 flush
$fwcmd table 3 flush
for nat in ${nats}; do
natd_port="$(eval echo \${${nat}_port})"
natd_alias="$(eval echo \${${nat}_alias})"
natd_network="$(eval echo \${${nat}_network})"
$fwcmd nat $natd_port config ip $natd_alias deny_in reset same_ports
natd_port1=$natd_port
$fwcmd table 2 add $natd_network $natd_port1
$fwcmd table 3 add $natd_alias $natd_port1
done
for oif in ${oiflist}; do
$fwcmd add 2000 nat tablearg all from any to table\(3\) in via ${oif}
$fwcmd add 2000 nat tablearg all from table\(2\) to any out via ${oif}
done

ещё в файерволе есть ещё около 170 всяких deny/allow и пайпы. загрузка этого роутера на 60 мегабитах около 60-65% в "sw1: net" ну и остальное по мелочи. работает он на xeon e5410, два гига памяти, гиг всегда свободен.

 

/etc/sysctl.conf:

security.jail.allow_raw_sockets=1
kern.maxfiles=40000
net.inet.ip.fw.one_pass=0
dev.em.0.rx_int_delay=1500
dev.em.0.tx_int_delay=1500
dev.em.0.rx_abs_int_delay=2000
dev.em.0.tx_abs_int_delay=2000
dev.em.1.rx_int_delay=1500
dev.em.1.tx_int_delay=1500
dev.em.1.rx_abs_int_delay=2000
dev.em.1.tx_abs_int_delay=2000
net.inet.ip.dummynet.hash_size=1024
net.inet.ip.intr_queue_maxlen=256
net.graph.maxdgram=81920
net.graph.recvspace=81920
net.inet.ip.dummynet.io_fast=1
net.isr.direct=0

если убрать net.isr.direct=0, то роутер начинает произвольно перегружаться кернел паниками, видимых причин я не обнаружил.

 

/boot/loader.conf

autoboot_delay="1"
geom_mirror_load="YES"
geom_journal_load="YES"
if_tap_load="YES"
ng_ipfw_load="YES"
ipfw_nat_load="YES"
kern.maxusers="2048"
net.graph.maxalloc=4096
kern.ipc.maxpipekva=32000000

Edited by raven428

Share this post


Link to post
Share on other sites

natd заменит на ng_nat

Share this post


Link to post
Share on other sites

ipfw nat заменить на ng_nat/pfnat.

в фиде видел отзывы о писателе Ipfw nat в духе, что у него ДНК не из того места растет.

Share this post


Link to post
Share on other sites

вы будете смеяться, но с ipfw nat работает примерно в полтора раза быстрей, чем с ng_nat.

 

да, и ipfw nat и natd - это всё таки разные вещи, хоть и работают в одном месте.

Share this post


Link to post
Share on other sites

может быть ещё подскажите, что нужно предпринять в ipfw, чтобы в этих сотне с лишним натов не забивались таблицы. например, чтобы было, скажем, по 200-300 записей на один серый адрес и остальное всё "забывалось"? или может быть ещё какие-то ограничения сделать?

Share this post


Link to post
Share on other sites

а сколько трафика через машинку?

Share this post


Link to post
Share on other sites

сейчас 60-80 мегабит, весь проходит через нат. не натовый трафик я пустил мимо неё.

Share this post


Link to post
Share on other sites

http://forum.nag.ru/forum/index.php?showto...st&p=363863

Весь траф (более 200 Мбит/с входящего) идет через шифрованые тунели, ng_nat и ng_netflow, полинга нет, тюнинг - options KVA_PAGES=512 и sysctl net.inet.ip.fw.dyn_max=65000

похоже вы фрю затюнили досмерти :)

Share this post


Link to post
Share on other sites

Несколько раз подумать над остальными 170 правилами.

По возможности распихать по таблицам, включая пайпы.

Дополнительно раскидать правила группами через skipto так, чтобы пакет на всем пути маршрутизации проходил как можно меньше правил.

 

Share this post


Link to post
Share on other sites

Жуткая конфигурация.

Первое и самое главное, обновиться до стейбла, там много полезных коммитов было.

 

по остальными пунктам:

 

sysctl:

net.inet.ip.intr_queue_maxlen=256 увеличить до 4000-8000 тысяч

добавить к ней в пару

net.route.netisr_maxqlen=1024

 

добавить net.inet.ip.fastforwarding=1

 

дотюнить сетевухи:

dev.em.0.rx_processing_limit=4096

dev.em.1.rx_processing_limit=4096

 

таймеры отложенных прерываний вернуть для эксперементов в дефолт.

 

в loader.conf

hw.em.rxd=4096

hw.em.txd=4096

 

 

natd выкинуть, заменить на pfnat(работа с таблицами ограничение числа сессий) или ng_nat(больший паралелиризм при правельной настройке)

 

по поводу net.isr.direct=0

нужен крешдамп для анализа, в принципе после избавления от natd можно попробовать вернуть его в дефолт(1)

 

 

Share this post


Link to post
Share on other sites
net.inet.ip.intr_queue_maxlen=256 увеличить до 4000-8000 тысяч

Пока нет дропов нет никакого смысла увеличивать. Особенно при 80Mbps нагрузки.

Share this post


Link to post
Share on other sites
net.inet.ip.intr_queue_maxlen=256 увеличить до 4000-8000 тысяч

Пока нет дропов нет никакого смысла увеличивать. Особенно при 80Mbps нагрузки.

про запас, вдруг вири попрут массово :)

Share this post


Link to post
Share on other sites

"таймеры отложенных прерываний вернуть для эксперементов в дефолт." - это что?

 

"natd выкинуть, заменить на pfnat". где вы увидели natd? я пробовал схему с ng_nat, и ipfw nat работает примерно в полтора раза быстрей, я это проверил на практике.

 

hw.em.rxd и hw.em.txd в sysctl нет. давно они появились?

Share this post


Link to post
Share on other sites
hw.em.rxd и hw.em.txd в sysctl нет. давно они появились?

давно, в loader.conf надо добавлять и sysctl их не видит.

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
Sign in to follow this