В конфигурацию ядра добавляем:options IPFIREWALL #firewall
options IPFIREWALL_VERBOSE #enable logging to syslogd(8)
options IPFIREWALL_DEFAULT_TO_ACCEPT #allow everything by default
options IPDIVERT
options IPFIREWALL_FORWARD
options DUMMYNET
options IPFIREWALL_NAT #ipfw kernel nat support
options LIBALIASв /etc/make.conf:
CFLAGS+= -DIPFIREWALL_NAT
Далее пересобираем систему:
cd /usr/src/ ; make builworld && make kernel KERNCONF=YourKern && make installworld
rebootВ конфигурационном файле ipfw:
NatIP="111.111.111.111"
ipfw nat 123 config ip ${NatIP} log
ipfw add 10 nat 123 ip from 192.168.0.0/16 to any
ipfw add 20 nat 123 ip from any to ${NatIP}Наслаждаемся достоинствами kernel nat
URL:
Обсуждается: https://www.opennet.ru/tips/info/1618.shtml
А мир зачем пересобирать?
вот это
options IPDIVERTи вот это
CFLAGS+= -DIPFIREWALL_NATлишнее
Пересобирал только ядро, правда с
CFLAGS+= -DIPFIREWALL_NAT
просто
make buildkernel KERNCONF=KERN && make installkernel KERNCONF=KERN3 дня полет нормальный...
> make buildkernel KERNCONF=KERN && make installkernel KERNCONF=KERNКстати, это то же самое, что и make kernel KERNCONF=KERN
А как оно по скорости? Быстрее, чем раньше, связка ipfw + natd?!
Так понятно, что быстрее болжно то быть, потому как Кернел левел :)
Быстрее и гораздо гибче, работает с тегами, нетграфом. Пользуюсь уже больше года - стабильно как скала :))
ага и с чего такой акцент на amd64 ? непонятно
а никто мира не пересобирал? ато я чегото таких рекомендаций не видел... я не пересобирал.
а бинат умеет?
Без пересборки мира не заработало, но, видимо достаточно было пересобрать ipfw
Я мир не трогал, внёс изменения в конфиг ядра, сделал make kernel KERNCONF=... и всё заработало как часики.
На счет функционала kernel nat
http://www.freebsd.org/cgi/man.cgi?query=ipfw&apropos=0&sekt...Внизу примеры
что то не видно примеров
Бинат (пока?) не умеет.
Жрёт немного больше, чем ng_nat.
>Бинат (пока?) не умеет.
>Жрёт немного больше, чем ng_nat.Он же на том же libalias работает. Чем замеряли?
Из всего конфига обязательно лишь
options IPFIREWALL
options IPFIREWALL_NAT
options LIBALIASВ make.conf указывать флаг совершенно не обязательно (и откуда только это пошло...С бета-версий, что ли?)
Не забудьте пропатчить, а то в корку валиться если например порты редиректить.
------------------------------------
>[оверквотинг удален]
>Date-Required:
>Class: sw-bug
>Submitter-Id: current-users
>Arrival-Date: Fri Mar 14 01:20:01 UTC 2008
>Closed-Date:
>Last-Modified:
>Originator: Gael Roualland
>Release: 7.0-STABLE
>Organization:
>Environment:FreeBSD jerry.priv 7.0-STABLE FreeBSD 7.0-STABLE #0: Thu Mar 13 21:12:57 CET 2008 gael@jerry:/home/cvsup/obj/home/cvsup/src/sys/JERRY i386
>Description:
"ipfw show nat config" or "ipfw nat xx config" dumps core in show_nat().
(ipfw2.c rev 1.108.2.3)
>How-To-Repeat:Add a nat configuration to ipfw rules.
>Fix:The variable "e" in show_nat is no longer initialized while printing nat configuration since last change;
Trivial diff atatched, thanks.Patch attached with submission follows:
--- ipfw2.c.orig 2008-03-04 13:07:34.000000000 +0100
+++ ipfw2.c 2008-03-14 02:07:53.000000000 +0100
@@ -5967,6 +5967,7 @@
if (frule <= n->id && lrule >= n->id)
print_nat_config(&data[i]);
i += sizeof(struct cfg_nat);
+ e = (struct cfg_redir *)&data[i];
for (redir_cnt = 0; redir_cnt < n->redir_cnt; redir_cnt++) {
i += sizeof(struct cfg_redir) + e->spool_cnt *
sizeof(struct cfg_spool);
>Release-Note:
>Audit-Trail:
>Unformatted:_______________________________________________
freebsd-bugs@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-bugs
To unsubscribe, send any mail to "freebsd-bugs-unsubscribe@freebsd.org"
а как под большими нагрузками, ip на 5000-7000 ?
если ты пров - зачем тебе натить 7к ипов?
Чтоб поиметь себе же гемор потом?
>а как под большими нагрузками, ip на 5000-7000 ?Хуже, чем pf NAT.
Недостаток у libalias общий с ngnat:
медленный алгоритм выделения памяти под буферы.
На провайдерском шлюзе нормально себя ведёт максимум до ~30мбит/с.
pf NAT и iptables на таком же железе вытягивают до ~80мбит/c.Кроме того, libalias и ngnat не умеют делать BiNAT 1:1,
который нужен для владельцев выделенного IP.
Ну это ты ОЧЕНЬ загнул. У нас он тянул до 200 мбит/сек.
pf (bi-)NAT вытягивал до 300-400 мбит/сек (сеть-в-сеть), причём был ещё запас.
господа методику понимания что есть еще запас расскажите пожалуйста.
Запускаешь top -SH и смотришь, сколько ест процесс "swi1:net". Аппроксимируешь корреляцию между количеством пропускаемого трафика и его загрузкой и получаешь запас.
Понятно обьяснил? ;-)
>>а как под большими нагрузками, ip на 5000-7000 ?
>
>Хуже, чем pf NAT.
>Недостаток у libalias общий с ngnat:
>медленный алгоритм выделения памяти под буферы.Откуда инфа?
>На провайдерском шлюзе нормально себя ведёт максимум до ~30мбит/с.
>pf NAT и iptables на таком же железе вытягивают до ~80мбит/c.Маловато, у народа гораздо больше тянет.
>Кроме того, libalias и ngnat не умеют делать BiNAT 1:1,
>который нужен для владельцев выделенного IP.А redirect_address чем не устраивает?
Только вот с фильтрацией полный бордак
теперь чтобы перекрыть к примеру smtp трафик я должен написать запрещающее правило перед натингомРаньше при использовании демона (natd только транслировал), а решение о разрешении ли запрете пакета формировались правилами после трансляции
И так было удобно поскольку можно было добавить разрешающие правила, а остальное все запретить
net.inet.ip.fw.one_pass: 0
И формируй правила после трансляции. Сам еще не проверил, но написано что так.
>net.inet.ip.fw.one_pass: 0
>И формируй правила после трансляции. Сам еще не проверил, но написано что
>так.Нет не помогает.
Как все-таки использовать политику запрета по-умолчанию.
Я если перед пишу правила они просто не пашут..
Чтож теперь все порты ручками закрывать ?
NatIP="111.111.111.111" - это ip интерфейса, который смотрит в инет? или нет?
если в инет смотрит ng ipfw nat сможет натить на него?
ему паходу всеравно что натить
народ, а passive ftp работает ?поэтому предпочитаю ipnat
А чож пассивный то не будет работать - он всегда будет робить ибо оба соединения FTP идут от клиента. Трабла с активным.
А как у него с обработкой хитрых конектов изнутри типа активный FTP?
>А как у него с обработкой хитрых конектов изнутри типа активный FTP?Так же, как и у natd - то есть, переписывает адреса и все прекрасно ходит.
странно пр добавлении опции LIBALIAS ядро не собирается - может у нее есть зависимость от какой либо другой опции?
с IPv6 :)
Подскажите пожалуста.А какой порядок написания правил для IPFW после этой процедуры.Пример если можно.
А зачем еще один kernel-nat во FreeBSD, если там с FreeBSD 4.Х есть IPNAT?
>А зачем еще один kernel-nat во FreeBSD, если там с FreeBSD 4.Х
>есть IPNAT?Затем, например, что ipnat не умеет анализ протоколов на L7 (FTP, IRC DCC, PPTP/GRE и т.д.). И еще затем, что ipfilter/ipnat со временем вынесут из FreeBSD.
вопрос такой назрел
пишем мы ipfw nat 123 config ip 111.111.111.111 log
а где этот log?
и куда он пишется?
и при каких условиях?
в /var/log/security все чисто, т.е. пусто
сам нат работает и все исправно ходят куда надо, хоть и не сразу понял как и что...
У меня заработало только когда написал
ipfw add 10 nat 123 log ip from траляля далее т.е. только после добавления после nat 123 - log...а лог по умолчанию в /var/log/security
А у меня пинг какойто дикий с kernel nat, а запускаю тот же natd все нормуль!
А у меня пинг какойто дикий с kernel nat, а запускаю тот же natd все нормуль!
А не подскажет кто, как организовать, если я хочу во внутренней сетке web-сервак, который будет доступен внешнему миру?Пытался так:
Политика по умолчанию deny all
пока net.inet.ip.fw.one_pass: 1
${fw} nat 100 config ip ${ExtIPwebserv}
${fw} add nat 100 tcp from any ${outports} to ${ExtIPwebserv} 80 in via ${WAN0}
${fw} add allow tcp from any ${outports} to 217.117.93.230 80 in via ${WAN0}
${fw} add nat 100 tcp from ${IntIPwebserv} 80 to any ${outports}
${fw} add allow tcp from any ${outports} to ${IntIPwebserv}80Судя по ipfw всё останавливается на первом нате. Т.е. снаружи пакеты приходят, заворачиваются в нат и всё. tcpdump показывает приходящие на внешний интерфейс соединения, которые обрабатываются, а потом оно почему-то (если убрать in via ${WAN0}) посылается само на себя.
Более грамотный вариант, который я видел на http://forum.lissyara.su/viewtopic.php?f=8&t=7930&p=70395 такого рода (у меня не заработало):
${fw} nat 100 config ip ${ExtIPwebserv} redirect_port tcp ${IntIPwebserv}:80 80
ipfw add nat 100 tcp from any ${outports} to ${ExtIPwebserv} 80 via ${WAN0}
ipfw add allow tcp from any ${outports} to ${IntIPwebserv} 80 via ${LAN}
Всё замечательно, один косяк: при выходе пакеты пытаются пролезть без ната, т.е. ответы пользователям лезут с обратным внутренним IP, а не внешним.Может кто-нибудь пояснить это синтаксис ${fw} nat 100 config ip ${ExtIPwebserv} redirect_port tcp ${IntIPwebserv}:80 80
Мозгов не хватает осилить.
И кстати, кто знает как сбрасывать правила ната? после рестарта скрипта с ipfw -f flush почему-то ipfw nat config показывает не только новые конфигурации, но старые
Может, кто приведёт рабочий скрипт для web-сервака с kernel ipfw nat?
Может тут как в PF сначала rdr а потом nat?
>Может тут как в PF сначала rdr а потом nat?Нет, здесь так же как в natd, соответсвенно все рекомендации подходят, только divert 100 заменяется на nat 100.
про сборку ядра
еще со времен BSD юзаю:
# config my_config_kernel
далее как обычно переходим в каталог ../compile/my_config_kernel и т.д.
---------------
роюсь по инету, глюк с этим новым натом
суть, фрагментированные пакеты не натятся, вернее, как я понял, остаки пакетов пропадают
тоесть, если даем к примеру пинг размером 1500 то он не ходит при условии что пакет проходит через правило ната в ipfw, при тех же условиях маленькие пакеты идут.
Если прописываем правило пропускающее траффик к хосту до правила ната, то ходят и большие пакеты.
--------------
.. ${ifout} - внешний интерфейс, 192.168.2.1 - внешний IP
так пинг большими пакетами ходит в сетку 192.168.2.0/24
${fwcmd} add pass ip from 192.168.2.0/24 to 192.168.2.0/24
${fwcmd} add nat 100 ip from 10.30.0.0/24 to any out via ${ifout}
${fwcmd} add nat 100 ip from any to 192.168.2.1 in via ${ifout}а так неходит
${fwcmd} add nat 100 ip from 10.30.0.0/24 to any out via ${ifout}
${fwcmd} add nat 100 ip from any to 192.168.2.1 in via ${ifout}
${fwcmd} add pass ip from 192.168.2.0/24 to 192.168.2.0/24
---------------
здесь чисто тестовой пример с сетью 192.168.2.0/24
аналогичная ситуация и с пингом до других хостов находящихся в инете
к примеру вместо 192.168.2.0/24 прописываем правило пропускающее весь траффик до 195.54.2.1
.. может быть что то нужно подкрутить в ядре или в настройках
>[оверквотинг удален]
>
>${fwcmd} add nat 100 ip from any to 192.168.2.1 in via ${ifout}
>
>${fwcmd} add pass ip from 192.168.2.0/24 to 192.168.2.0/24
>---------------
>здесь чисто тестовой пример с сетью 192.168.2.0/24
>аналогичная ситуация и с пингом до других хостов находящихся в инете
>к примеру вместо 192.168.2.0/24 прописываем правило пропускающее весь траффик до 195.54.2.1
>.. может быть что то нужно подкрутить в ядре или в настройках
>аналогичная проблема пакеты больше 1472 через ядерный нат не ходят, проверил на 4 роутерах
>[оверквотинг удален]
>>${fwcmd} add pass ip from 192.168.2.0/24 to 192.168.2.0/24
>>---------------
>>здесь чисто тестовой пример с сетью 192.168.2.0/24
>>аналогичная ситуация и с пингом до других хостов находящихся в инете
>>к примеру вместо 192.168.2.0/24 прописываем правило пропускающее весь траффик до 195.54.2.1
>>.. может быть что то нужно подкрутить в ядре или в настройках
>>
>
>аналогичная проблема пакеты больше 1472 через ядерный нат не ходят, проверил на
>4 роутераху меня и через natd не ходят,1472 идут - 1473 уже нет
Что делать если я не знаю ${NatIP}? Т.е. если он у меня динамический
>Что делать если я не знаю ${NatIP}? Т.е. если он у меня
>динамическийписать скрипт, который с ifconfig дернет IP и подставит в переменную ...
http://www.freebsd.org/cgi/man.cgi?query=ipfw&sektion=8#NETW...)Это случайно не оно?
The nat configuration command is the following:nat nat_number config nat-configuration
The following parameters can be configured:
ip ip_address
Define an ip address to use for aliasing.if nic Use ip addres of NIC for aliasing, dynamically changing it if
NIC's ip address change.
...
Необходим ядерный ipfw nat on freebsd 4.x in kernel mode, есть ли готовые решения, можете что-то посоветовать? Может быть существует какой-то backport libalis and ipfw2 в 4ую ветку?
Как считаете
Есть толстая труба в интернет.
Надо сделать так, что бы для пользователей действовали такие ограничения :1. Входящий из UA-IX (есть скрипт обновляющия таблицу для ipfw) 1024 kbits/s
2. Исходящий в UA-IX - 128 kbits/s
3. Входящий из мира - 256 kbits/s
4. Исходящий в мир - 64 kbits/sПолоса должна распределяться равномерно между пользователями. Учет трафика не нужет.
Поскольку нагрузка на сервер будет большая - natd я отбросил сразу ...Потянет ли тазик 600 активных пользователей при nat во FreeBSD 7 и конфигурации процессора
[root@bcp-gw /etc]# sysctl -a | egrep -i 'hw.machine|hw.model|hw.ncpu'
hw.machine: i386
hw.model: Intel(R) Core(TM)2 Duo CPU E6750 @ 2.66GHz
hw.ncpu: 1
hw.machine_arch: i386
>[оверквотинг удален]
>
>
>Потянет ли тазик 600 активных пользователей при nat во FreeBSD 7
>и конфигурации процессора
>
>[root@bcp-gw /etc]# sysctl -a | egrep -i 'hw.machine|hw.model|hw.ncpu'
>hw.machine: i386
>hw.model: Intel(R) Core(TM)2 Duo CPU E6750 @ 2.66GHz
>hw.ncpu: 1
>hw.machine_arch: i386потянет, есть опыт IPFW NAT на P4 - 2000 пользователей живут нормально.
>[оверквотинг удален]
>>и конфигурации процессора
>>
>>[root@bcp-gw /etc]# sysctl -a | egrep -i 'hw.machine|hw.model|hw.ncpu'
>>hw.machine: i386
>>hw.model: Intel(R) Core(TM)2 Duo CPU E6750 @ 2.66GHz
>>hw.ncpu: 1
>>hw.machine_arch: i386
>
>потянет, есть опыт IPFW NAT на P4 - 2000 пользователей живут нормально.
>Спасибо за ответ. Уже ядро пересобираю :)
а как пробросить только один порт? напиример 80
# редирект 80 порта на внутренний сервер
ipfw nat 10 config ip ${внешний_ip} redirect_port tcp ${внутренний_ip_вебсервера}:80 80
ipfw add nat 10 tcp from ${внутренний_ip_вебсервера} 80 to any out via ${внешний_интерфейс}
># редирект 80 порта на внутренний сервер
>ipfw nat 10 config ip ${внешний_ip} redirect_port tcp ${внутренний_ip_вебсервера}:80 80
>ipfw add nat 10 tcp from ${внутренний_ip_вебсервера} 80 to any out via
>${внешний_интерфейс}не работает, т.к. с 80 порта нет редиректа на внутренний_ip_вебсервера.
Извиняюсь за некропостинг, с KERNEL NAT не работает NAT для PPTP. Конфигурация:firewall_enable="YES"
firewall_type="OPEN"firewall_nat_enable="YES"
firewall_nat_interface="vlan0"
firewall_nat_flags="same_ports redirect_port tcp 192.168.1.30:210 210 redirect_port tcp 192.168.2.1:6112 6112"Если так:
natd_enable="YES"
natd_flags="-redirect_port tcp 192.168.1.30:210 210 -redirect_port tcp 192.168.2.1:6112 6112 -unregistered_only -use_sockets -same_ports -punch_fw 19000:100"
natd_interface="vlan0"то все работает нормально.
Извините если я туплю. Маюсь уже целый месяц. Не работает nat кернельный и все, хоть ты тресни.Коротко: судя по трафику, пакеты syn пробрасываются натом нормально на внутренний комп, но syn ack уходят от нее с нулевым чексумом, поэтому tcp connection не создается. (это я смотрю на стороне внутреннего сервера w2k3sp2 куда перебрасываются порты)
В тоже самое время, при прохождении через роутер(фря 7,2 stable) нормально эти пакеты принимает и ставит туда нормальный чексум и отправляет syn ack отправителю.w2k3sp2(куда пробрасываются порты) пытался грузить в safe mode чтобы вырубить всевозможные левые фильтры, результат такой же, т.е. что то я понаписал в настройках ipfw не то.
это читал. http://www.lissyara.su/?id=1967
не помогло
если можете помочь, могу логи и конфиги выслать. Если кто то с таким сталкивался помогите. Я точно знаю, что я где-то загигулинку не поставил, но где не знаю.
>Коротко: судя по трафику, пакеты syn пробрасываются натом нормально на внутренний комп,
>но syn ack уходят от нее с нулевым чексумом, поэтому tcp
>connection не создается. (это я смотрю на стороне внутреннего сервера w2k3sp2
>куда перебрасываются порты)
>В тоже самое время, при прохождении через роутер(фря 7,2 stable) нормально эти
>пакеты принимает и ставит туда нормальный чексум и отправляет syn ack
>отправителю.попробуйте выключить фукции аппаратного ускорения расчета контрольных сумм на сетевухе где рпботает нат.
ifconfig em0 -rxcsum -txcsum
>[оверквотинг удален]
>>connection не создается. (это я смотрю на стороне внутреннего сервера w2k3sp2
>>куда перебрасываются порты)
>>В тоже самое время, при прохождении через роутер(фря 7,2 stable) нормально эти
>>пакеты принимает и ставит туда нормальный чексум и отправляет syn ack
>>отправителю.
>
>попробуйте выключить фукции аппаратного ускорения расчета контрольных сумм на сетевухе где рпботает
>нат.
>
>ifconfig em0 -rxcsum -txcsumМне (под esxi) помогло! - спасибо!
Если кому интересно. Я нашел почему не работал NAT.
после того как убрал вот это динамическое правило все заработало
ipfw add allow tcp from any to any via $oif established #$oif внешний интерйфейс
Люди добрые помогите, делал все как по ману...src и порты обновлял все свежее, фря пропатченная...на первые две фазы построения мира и сборки ядра проходят нормально, на стадии инсталляции мира все останавливается...короче как в этом примере происходит все http://liste.gufi.org/pipermail/freesbie/2005-January/000621...за исключением что там остановка происходит на криптографической библиотечке....
http://unix.derkeiler.com/pdf/Mailing-Lists/FreeBSD/stable/2... если быть точнее происходит примерно это
наткнулся тут еще на это
http://periscope.opennet.ru/openforum/vsluhforumID1/83520.html
может еще что нужно поправить в make.conf? есть идеи?попробовал поковырять make.conf в соответствии с вышеупомянутым материалом....не помогает...такое ощущение что зря cvsup делал со stabble-supfile вместо standard-supfile...
до этого 7.1 обновлял до 7.2 и качал патчи до 7.2-p2.......сейчас кажется патчи докатываются до p3
вопрос закрыт ;) ошибка была в конфе ядра по ходу...
не, не закрыт ;) тупо ядро не компилится....ужас.....
В роли шлюза - вирт. машина:
FreeBSD 7.2 +
Памяти 1 гб
2 сетевые по 1 гб\сек в бридже
2 проц. по 2.4 ггцСкорость передачи данных через нат не превышает 10 магабайт в секунду.
Статистика при передаче:
процессор 30.21% natd (пиковая цифра)
свободно памяти больше половины
snmp показывает что на сетевых интерфейсах скорость не больше 10 мегабайт в секундуГде узкое место? Как добиться увеличения скорости?
>[оверквотинг удален]
>
>Скорость передачи данных через нат не превышает 10 магабайт в секунду.
>
>Статистика при передаче:
>процессор 30.21% natd (пиковая цифра)
>свободно памяти больше половины
>snmp показывает что на сетевых интерфейсах скорость не больше 10 мегабайт в
>секунду
>
>Где узкое место? Как добиться увеличения скорости?natd тут причем ? тут kernel nat обсуждали ... читайте внимательнее ...
плюс рекомендую включить polling в ядре ...