Перейти к содержимому
Калькуляторы

NAT на пул белых адресов FreeBSD

Ммм ... попробовал два варианта на тестовых машинках - оба работают. Не понял, где я накосячил ))

 

10.2.0.0/24 - анонсируемые адреса в АС (пример :-) )

10.2.0.128/25 - пул под НАТ

10.2.0.1 - бгп

10.2.0.2 - нат

 

 

1й вариант.

на НАТе -

 

рц.конф

defaultrouter="10.2.0.1"

ifconfig_rl0="inet 172.16.0.1 netmask 255.255.255.0" - юзеры

ifconfig_em0="inet 10.2.0.2 netmask 255.255.255.0" - к бгп

пф.конф

nat pass on em0 from 172.16.0.0/24 to any -> 10.2.0.128/25 source-hash

 

на БГП - (тестовая машинка с фрёй)

рц.конф

ifconfig_em0="inet 10.2.0.1 netmask 255.255.255.252"

static_routes="net00"

route_net00="-net 10.2.0.0/24 10.2.0.2"

 

и второй вариант

на НАТе -

 

рц.конф

defaultrouter="10.2.0.1"

ifconfig_rl0="inet 172.16.0.1 netmask 255.255.255.0" - юзеры

ifconfig_em0="inet 10.2.0.2 netmask 255.255.255.0" - к бгп

ifconfig_em0_alias0="inet 10.2.0.128 netmask 255.255.255.255"

... и еще 125 алиасов ...

ifconfig_em0_alias126="inet 10.2.0.254 netmask 255.255.255.255"

пф.конф

nat pass on em0 from 172.16.0.0/24 to any -> 10.2.0.128/25 source-hash

 

на БГП - (тестовая машинка с фрёй)

рц.конф

ifconfig_em0="inet 10.2.0.1 netmask 255.255.255.0"
Изменено пользователем Elisium

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Альясы прописываются /32! man ifconfig:

alias Establish an additional network address for this interface. This

is sometimes useful when changing network numbers, and one wishes

to accept packets addressed to the old interface. If the address

is on the same subnet as the first network address for this

interface, a non-conflicting netmask must be given. Usually

0xffffffff is most appropriate.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Альясы прописываются /32! man ifconfig:
alias Establish an additional network address for this interface. This

is sometimes useful when changing network numbers, and one wishes

to accept packets addressed to the old interface. If the address

is on the same subnet as the first network address for this

interface, a non-conflicting netmask must be given. Usually

0xffffffff is most appropriate.

не обновили ман. с 7ки можно любую маску ставить.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Альясы прописываются /32! man ifconfig:

о! Спасибо ..

В конфиге написал /32, а сюда чегото запостил неправильную маску (((

п.с. тут исправил.

 

п.п.с. хотя в мане написано - "/32 наиболее подходящая", другие маски тоже нормально ставятся ..

Изменено пользователем Elisium

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Elisium

кстати пул белых адресов наверное на бордере лучше статик роутом прописать на серый ипешник браса, а анонсировать белые адреса, выдаваемые клиентам кваггой по ospf. Тоесть чтобы оснавная масса народу работала под серыми адресами а единицы которым нужны белые могли ходить с тех же брасов.

 

другой вопрос: кто какой ip адрес обычно брасу назначает??

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не обновили ман. с 7ки можно любую маску ставить.

Ман не обновили разработчики тогда :) man ifconfig от 8.0 говорит то же самое. Потом, альясы ведь могут быть из другой сети, поэтому описание сохраняет силу.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Очень хочеться сделать пул с помошью ipfw nat! Нашел вот такое руководство. Непонятно как это работат. У кого нибудь получилось сделать пул на ipfw nat?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Да никаких проблем, простейший вариант:

 

#!/bin/sh

nat_interface="vlan0"
ips="1.1.1.1 2.2.2.2 3.3.3.3 4.4.4.4"

fwcmd="/sbin/ipfw -q"

${fwcmd} -f flush

#таблица и сетями
t=1
$fwcmd table $t flush
$fwcmd table $t add 10.0.0.1/24 1
$fwcmd table $t add 10.0.0.2/24 2
$fwcmd table $t add 10.0.0.3/24 3
$fwcmd table $t add 10.0.0.4/24 4

#таблица с внешними адресами
n=10
$fwcmd table $n flush

number=1
for ip in $ips; do

${fwcmd} table $n add ${ip} ${number}
${fwcmd} nat ${number} config ip ${ip}

number=$(($number+1))
done

${fwcmd} add 100 nat tablearg ip from "table($t)" to any via ${nat_interface}
${fwcmd} add 200 nat tablearg ip from any to "table($n)" via ${nat_interface}

Изменено пользователем XeonVs

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А аналог динамического распределения не делали? Что-нибудь типа skipto xxx prob 0.4, а дальше уже разные nat с keep-state?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А аналог динамического распределения не делали? Что-нибудь типа skipto xxx prob 0.4, а дальше уже разные nat с keep-state?
нет, небыло необходимости и была основная задача исспользовать ресурсы ЦПУ максимальным образом... т.е. в итоге в ipfw всего 3 правила.

ng_nat показал хуже производительность в такой позе.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

pf-ный nat нормально работает на малых скоростях, когда я попробовал натить pf source hash при скоростях ок 70-80 мбит юзеры взвыли от тормозов, причем натит всех отдельная машинка, cpu упал но юзеры заорали...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

при скоростях ок 70-80 мбит

Это скорость тарифного плана или общая нагрузка на канал от абонентов?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

буквально вчера вечером смотрел статистику на брасе с которого работало 500+ пользователей, при том с белыми ипешниками из них полтора землекопа, тоесть все через нат на сетку в 32 адреса --- общая загрузка порта коммутатора 105-120 мегабит, 55000+ пакетов и load averages: 0.23, 0.32, 0.24 всего, тоесть почти полтыщи человек pf натил не напрягаясь, опять же скорости режутся только во внешний канал интернета, между пирами скорости не режутся и внутри нашей сети пользователи ходят без ограничений

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

а кто-нить сравнивал производительность ng_nat и ipfw_nat ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

а кто-нить сравнивал производительность ng_nat и ipfw_nat ?

я сравнивал, на своей задаче получилось хуже, нетграф тоже процессора кушать хочет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

я сравнивал, на своей задаче получилось хуже, нетграф тоже процессора кушать хочет.
"В кавказской школе. Учитель: Грузины лучше, чем армяне. Голос: Чем? Учитель: ЧЕМ АРМЯНЕ ГОВОРЮ!!!"

XeonVs, так и не ясно из поста, что в результате лучше. ng_nat он хотя бы параллелится...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

я сравнивал, на своей задаче получилось хуже, нетграф тоже процессора кушать хочет.
"В кавказской школе. Учитель: Грузины лучше, чем армяне. Голос: Чем? Учитель: ЧЕМ АРМЯНЕ ГОВОРЮ!!!"

XeonVs, так и не ясно из поста, что в результате лучше. ng_nat он хотя бы параллелится...

Чем хуже, меньшая производительность pps\bps.

и ipfw nat тоже не в синглтреде работает. ng_queueX начинает активно потреблять ресурсы ЦП, памяти для гоняния структур внутри ядра... в случае ipfw nat сей оверхед меньше.

Если я не прав, пусть поправят.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ipfw nat будет работать в контексте прерывания, соответственно, одно ядро на сетевушку (если драйвера не яндексовские)...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

ipfw nat будет работать в контексте прерывания, соответственно, одно ядро на сетевушку (если драйвера не яндексовские)...

согласен. почему я и сделал оговорку про свои задачи, там было 8 ядер и 8 интерфейсов в lagg.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Очень хочеться сделать пул с помошью ipfw nat! Нашел вот такое руководство. Непонятно как это работат. У кого нибудь получилось сделать пул на ipfw nat?
там в статье есть интересный момент:
- Библиотека libalias, на которой основан ipfw nat, плохо дружит с функциями аппаратного ускорения расчета контрольных сумм и управления потоками, которые доступны на некотроых сетевых адаптерах. Рекомендуется выключать tcp segmentation offloading (TSO), а так же rxcsum на том сетевом адаптере где работает нат (ifconfig em0 -rxcsum -tso).
судя по этому при ng_nat тоже необходимо на всех интерфейсах лучше отключать rxcsum ?!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Цитата

- Библиотека libalias, на которой основан ipfw nat, плохо дружит с функциями аппаратного ускорения расчета контрольных сумм и управления потоками, которые доступны на некотроых сетевых адаптерах. Рекомендуется выключать tcp segmentation offloading (TSO), а так же rxcsum на том сетевом адаптере где работает нат (ifconfig em0 -rxcsum -tso).

судя по этому при ng_nat тоже необходимо на всех интерфейсах лучше отключать rxcsum ?!

А кто-нибудь можнт сказать, на основании чего даны такие рекомендации?

И в чем "недружба" может проявляться?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Цитата

- Библиотека libalias, на которой основан ipfw nat, плохо дружит с функциями аппаратного ускорения расчета контрольных сумм и управления потоками, которые доступны на некотроых сетевых адаптерах. Рекомендуется выключать tcp segmentation offloading (TSO), а так же rxcsum на том сетевом адаптере где работает нат (ifconfig em0 -rxcsum -tso).

судя по этому при ng_nat тоже необходимо на всех интерфейсах лучше отключать rxcsum ?!

А кто-нибудь можнт сказать, на основании чего даны такие рекомендации?

И в чем "недружба" может проявляться?

не расчитана :) в списках рассылки было описание если память не изменяет.

Проявляется в порче контрольных сумм на не транзитном траффике.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Спасибо огромное.

На сервере была проблема: При обращении к веб-морде из внешней сети, через интерфейс на котором висит nat были жутчайшие тормоза, страничка просто не загружалась до конца. После отключения tso в свойстваах сетевой карты, все нормализовалось.

Нет архива рассылки чтобы посмотреть описание, а в man такого нет. Хотя если баг известный могли бы добавить. Странно. А кто-нибудь слал багрепорт? Можетт разработчик libalias сам не знает))

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вообще-то в мане это более чем отчётливо есть:

Due to the architecture of libalias(3), ipfw nat is not compatible with the TCP segmentation offloading (TSO). Thus, to reliably nat your network traffic, please disable TSO on your NICs using ifconfig(8).
Изменено пользователем Dyr

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Видно у меня на машине ман старый. Там этого нет. Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

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

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.