[freebsd] ipfw kernel nat

83 views
Skip to first unread message

Sergej Kandyla

unread,
Jan 13, 2009, 7:42:15 AM1/13/09
to fre...@uafug.org.ua
Господа, вопрос следующий. Имеем примитивный нат

${fw} add nat 1 all from any to any via ${ext_if}
${fw} nat 1 config if ${ext_if}

${fw} add allow ip from any to any

Из локалки пинги (во внешний мир) ходят нормально, а если пинговать
сервер из мира - пинги не проходят (т.е. сам роутер не отвечает на пинги).
Добавляю правила перед строчками с nat

${fw} add allow tcp from any to me 22 in via ${ext_if}
keep-state
${fw} add allow icmp from any to me in via ${ext_if}

На роутер начинают ходить пинги из мира, можно конектится по ssh, но из
локалки перестают ходить пинги.

Информации по ipfw nat вообще фонарь. Помогите вразумить.

Alexander Panyushkin

unread,
Jan 13, 2009, 7:56:44 AM1/13/09
to Sergej Kandyla, fre...@uafug.org.ua
Точно сейчас не припомню ибо PF юзаю,
но для NAT нужно писать правила до nat для внешней сети и после nat для
внутренней.


Sergej Kandyla пишет:

Sergej Kandyla

unread,
Jan 13, 2009, 8:24:34 AM1/13/09
to fre...@uafug.org.ua
Alexander Panyushkin пишет:

> Точно сейчас не припомню ибо PF юзаю,
> но для NAT нужно писать правила до nat для внешней сети и после nat
> для внутренней.

Может кто обладает сведениями как проходят пакеты через фаервол с kernel
nat ?
А то както кастыльно получается до немогу.

Если просто

${fw} add nat 1 all from any to any via ${ext_if}
${fw} nat 1 config if ${ext_if}

то данный интерфейс начинает принимать абсолютно все входящие пакеты.
(естественно пинги работают и из локалки и из мира)
Если с deny_in т.е.

${fw} add nat 1 all from any to any via ${ext_if}

${fw} nat 1 config if ${ext_if} deny_in

То все пакеты рубаются на данной инстанции. В этом случае,
действительно, чтобы разрешить входящие пакеты на тсп порты, например
ssh, мне нужно написать правило до nat.

Но как же быть с icmp ? Если прописать разрешающее правило для icmp из
мира перед правилом с nat, то из локалки в тот же час перестают ходить
пинги.

PS. дело сдвинулось после ребута ;/ До ребута, nat как с deny_in так и
без него рубал приходщие из мира пакеты по умолчанию

gra...@yandex.ru

unread,
Jan 13, 2009, 11:21:39 AM1/13/09
to fre...@uafug.org.ua
у меня такая схема работает

${fwcmd} nat 1 config if ${if_inet} log same_ports
${fwcmd} add nat 1 ip from ${vpnnet} to any out via ${if_inet}
${fwcmd} add nat 1 all from any to any in via ${if_inet}

Sergej kandyla

unread,
Jan 13, 2009, 11:36:48 AM1/13/09
to FreeBSD List Mailing
тогда как при такой схеме вы фильтруете входящий трафик на if_inet ?


--
Best Wishes,
PAIX-UANIC | SK3929-RIPE

Vasiliy P. Melnik

unread,
Jan 13, 2009, 1:26:43 PM1/13/09
to fre...@uafug.org.ua
On Tue, Jan 13, 2009 at 02:42:15PM +0200, Sergej Kandyla wrote:
> Господа, вопрос следующий. Имеем примитивный нат
>
> ${fw} add nat 1 all from any to any via ${ext_if}
${fw} add nat 1 all from $lan_net to any via ${ext_if}

может хоть так ?

З.Ы. сам не пользую - на PF как-то перешел, а когда пользовался ipfw
ядерного ната не было еще - через ipnat заворачивал

> ${fw} nat 1 config if ${ext_if}
>
> ${fw} add allow ip from any to any
>
> Из локалки пинги (во внешний мир) ходят нормально, а если пинговать
> сервер из мира - пинги не проходят (т.е. сам роутер не отвечает на
> пинги).
> Добавляю правила перед строчками с nat
>
> ${fw} add allow tcp from any to me 22 in via ${ext_if}
> keep-state ${fw} add allow icmp from any to me in via ${ext_if}
>
> На роутер начинают ходить пинги из мира, можно конектится по ssh, но из
> локалки перестают ходить пинги.
>
> Информации по ipfw nat вообще фонарь. Помогите вразумить.

--
-------------------------------------------------------------------------------
Vasiliy P. Melnik VPM-RIPE, VPM-UANIC

Andrey Voitenkov

unread,
Jan 13, 2009, 2:23:59 PM1/13/09
to fre...@uafug.org.ua
Sergej Kandyla wrote:
> Господа, вопрос следующий. Имеем примитивный нат
>
> ${fw} add nat 1 all from any to any via ${ext_if}
> ${fw} nat 1 config if ${ext_if}
> ${fw} add allow ip from any to any
>

Во первых есть смысл делать все nat config до правил, которые их
используют. Это нигде не написано, но ipfw nat вообще довольно
кривой сам по себе, особенно в плане его конфигурирования. У меня
вот ipfw nat show после нескольких дней аптайма начинает работать
через раз, хотя сам нат при этом всё нормально натит.

Во вторых хочется глянуть на полный скрипт и на sysctl -a | egrep fw
потому как простая конфигурация у меня работает в нескольких местах,
вполне стабильно. Тут подробнее:
http://groups.google.com/group/fido7.ru.unix.bsd/browse_thread/thread/749f195d06de024d/8b27e9df9ea9226a?hl=en&lnk=gst&q=mccloud+ipfw+nat#8b27e9df9ea9226a


> Из локалки пинги (во внешний мир) ходят нормально, а если пинговать
> сервер из мира - пинги не проходят (т.е. сам роутер не отвечает на пинги).
> Добавляю правила перед строчками с nat
>
> ${fw} add allow tcp from any to me 22 in via ${ext_if}
> keep-state ${fw} add allow icmp from any to me in via ${ext_if}
>
> На роутер начинают ходить пинги из мира, можно конектится по ssh, но из
> локалки перестают ходить пинги.
>
> Информации по ipfw nat вообще фонарь. Помогите вразумить.

--
mccloud@

Sergej kandyla

unread,
Jan 14, 2009, 12:28:58 PM1/14/09
to fre...@uafug.org.ua
Andrey Voitenkov wrote:
> Sergej Kandyla wrote:
>> Господа, вопрос следующий. Имеем примитивный нат
>>
>> ${fw} add nat 1 all from any to any via ${ext_if}
>> ${fw} nat 1 config if ${ext_if}
>> ${fw} add allow ip from any to any
>>
>
> Во первых есть смысл делать все nat config до правил, которые их
> используют. Это нигде не написано, но ipfw nat вообще довольно
> кривой сам по себе, особенно в плане его конфигурирования. У меня
> вот ipfw nat show после нескольких дней аптайма начинает работать
> через раз, хотя сам нат при этом всё нормально натит.
>
> Во вторых хочется глянуть на полный скрипт и на sysctl -a | egrep fw
# sysctl -a | egrep fw
net.inet.ip.fw.dyn_keepalive: 1
net.inet.ip.fw.dyn_short_lifetime: 5
net.inet.ip.fw.dyn_udp_lifetime: 10
net.inet.ip.fw.dyn_rst_lifetime: 1
net.inet.ip.fw.dyn_fin_lifetime: 1
net.inet.ip.fw.dyn_syn_lifetime: 20
net.inet.ip.fw.dyn_ack_lifetime: 300
net.inet.ip.fw.static_count: 16
net.inet.ip.fw.dyn_max: 4096
net.inet.ip.fw.dyn_count: 123
net.inet.ip.fw.curr_dyn_buckets: 256
net.inet.ip.fw.dyn_buckets: 256
net.inet.ip.fw.default_rule: 65535
net.inet.ip.fw.verbose_limit: 0
net.inet.ip.fw.verbose: 0
net.inet.ip.fw.debug: 1
net.inet.ip.fw.one_pass: 1
net.inet.ip.fw.autoinc_step: 100
net.inet.ip.fw.enable: 1
net.link.ether.ipfw: 0


# rc.fw:
<основное>
${fw} -f flush
${fw} -f nat flush


${fw} add allow tcp from any to me 2022 in via ${ext_if} keep-state
# SSH
${fw} add pass ip from me to any keep-state # это правило пробовал и
после ната - фиолетово.

${fw} add nat 1 all from ${local} to any out via ${ext_if}
${fw} add nat 1 all from any to me in via ${ext_if}
${fw} nat 1 config if ${ext_if} deny_in \
redirect_port tcp 192.168.0.15:3690 3690

${fw} add fwd 127.0.0.1,3128 tcp from ${local} to not me 80,3128,8080
via ${int_if}
${fw} add deny log ip from ${local} to any 25

${fw} add allow ip from any to any


pf конечно хорошо, но как бы из пушки по воробьям стрельба, кроме того
есть большое желание не лепить зоопарк из разных фаерволов, особенно в
силу того, что хочется юзать dummynet. Поэтому и дефолтный ipfw

PS. я поражаюсь, почему нельзя IPFIREWALL_FORWARD влепить модулем???
для такой совершенно тривиальной задачи как прокси офис.сервер нужно
пересобирать ядро.... а сколько секса предстоит вкусить для настройки
шейперов ;) мрак.

PS2. кстати вопрос, есть ли возможность rw в fido7.ru.unix способом
отличным от fido ? Для чтения помню были какието гейты, а вот чтобы
написать чтото....


> потому как простая конфигурация у меня работает в нескольких местах,
> вполне стабильно. Тут подробнее:
> http://groups.google.com/group/fido7.ru.unix.bsd/browse_thread/thread/749f195d06de024d/8b27e9df9ea9226a?hl=en&lnk=gst&q=mccloud+ipfw+nat#8b27e9df9ea9226a
>
>
>
>> Из локалки пинги (во внешний мир) ходят нормально, а если пинговать
>> сервер из мира - пинги не проходят (т.е. сам роутер не отвечает на
>> пинги).
>> Добавляю правила перед строчками с nat
>>
>> ${fw} add allow tcp from any to me 22 in via ${ext_if}
>> keep-state ${fw} add allow icmp from any to me in via ${ext_if}
>>
>> На роутер начинают ходить пинги из мира, можно конектится по ssh, но
>> из локалки перестают ходить пинги.
>>
>> Информации по ipfw nat вообще фонарь. Помогите вразумить.
>
>
>


--
Best Wishes,
PAIX-UANIC | SK3929-RIPE

Mikolaj Golub

unread,
Jan 14, 2009, 2:12:41 PM1/14/09
to fre...@uafug.org.ua

On Wed, 14 Jan 2009 19:28:58 +0200 Sergej kandyla wrote:

Sk> PS2. кстати вопрос, есть ли возможность rw в fido7.ru.unix способом
Sk> отличным от fido ? Для чтения помню были какието гейты, а вот чтобы
Sk> написать чтото....

http://www.fido7.ru/

--
Mikolaj Golub

Le...@lena.kiev.ua

unread,
Jan 14, 2009, 2:18:52 PM1/14/09
to fre...@uafug.org.ua
> From: Mikolaj Golub

> Sk> PS2. кстати вопрос, есть ли возможность rw в fido7.ru.unix способом
> Sk> отличным от fido ? Для чтения помню были какието гейты, а вот чтобы
> Sk> написать чтото....
>
> http://www.fido7.ru/

Цитирую:

| Что требуется, чтобы посылать статьи?
...
| * Нужно иметь доступ на постинг к NNTP серверу, на котором есть
| иерархия fido7.

Ну вот у моего провайдера нету такого. И что делать?

Mikolaj Golub

unread,
Jan 14, 2009, 2:33:55 PM1/14/09
to Le...@lena.kiev.ua, fre...@uafug.org.ua

On Wed, 14 Jan 2009 21:18:52 +0200 Le...@lena.kiev.ua wrote:

>> From: Mikolaj Golub

>> Sk> PS2. кстати вопрос, есть ли возможность rw в fido7.ru.unix способом
>> Sk> отличным от fido ? Для чтения помню были какието гейты, а вот чтобы
>> Sk> написать чтото....
>>
>> http://www.fido7.ru/

L> Цитирую:

L> | Что требуется, чтобы посылать статьи?
L> ...
L> | * Нужно иметь доступ на постинг к NNTP серверу, на котором есть
L> | иерархия fido7.

L> Ну вот у моего провайдера нету такого. И что делать?

Найти публичный сервер, у которого есть :-) Список публичных серверов там
приведен. Я пользуюсь news.fido7.ru (использование которого конечными
пользвателями не приветсвуется, но я на него клиентом не хожу, a простеньким
сервером новостей leafnode, с которого уже сам читаю и товарищам раздаю).

Там нужно зарегистрироваться, получить некое магическое число, которое нужно
вставлять в каждый постинг в заголовок Keywords. Уже не помню процедуры
регистрации, где-то там все должно это быть описано. Возможно есть и более
простые способы...

--
Mikolaj Golub

gra...@yandex.ru

unread,
Jan 14, 2009, 2:33:48 PM1/14/09
to fre...@uafug.org.ua

может чере гугол получится?
http://groups.google.ru/group/fido7.ru.unix.bsd/topics?lnk=srg&hl=ru

Eugeny N Dzhurinsky

unread,
Jan 14, 2009, 2:37:15 PM1/14/09
to fre...@uafug.org.ua

Идеологически более верно было бы настроить локальный гейт fido<->news
(используя fidogate) и читать-писать в фидо через него. Сейчас получить поинта
по IP проблем совершенно не составляет, настройка всего этого с inn простая и
расписана в интернете буквально пошагово.

--
Eugene N Dzhurinsky

Mykola Dzham

unread,
Jan 14, 2009, 3:50:12 PM1/14/09
to Mikolaj Golub, fre...@uafug.org.ua
Mikolaj Golub wrote:
>
> Там нужно зарегистрироваться, получить некое магическое число, которое нужно
> вставлять в каждый постинг в заголовок Keywords. Уже не помню процедуры
> регистрации, где-то там все должно это быть описано. Возможно есть и более
> простые способы...

В ответ на любую попытку отправить сообщение без этого кода приходит
сообщение с этим магическим числом и детальным описанием что куда
вставить.

--
LEFT-(UANIC|RIPE)
JID: lev...@jabber.net.ua
PGP fingerprint: 2A0B 7423 51AF B19B 74D5 31CA 2BFF 42F1 8094 7652

Andrey Voitenkov

unread,
Jan 15, 2009, 3:51:14 AM1/15/09
to fre...@uafug.org.ua
Sergej kandyla wrote:
[...]
> net.inet.ip.fw.one_pass: 1
это зря по-моему.

[...]


>
> ${fw} add allow tcp from any to me 2022 in via ${ext_if} keep-state
> # SSH
> ${fw} add pass ip from me to any keep-state # это правило пробовал и
> после ната - фиолетово.
>
> ${fw} add nat 1 all from ${local} to any out via ${ext_if}
> ${fw} add nat 1 all from any to me in via ${ext_if}
> ${fw} nat 1 config if ${ext_if} deny_in \
> redirect_port tcp 192.168.0.15:3690 3690

/man ipfw
deny_in
Deny any incoming connection from outside world.

т.е. нужно делать что-то такое:
nat 1 config if{$ext_if} reset same_ports log

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

и первые два правила убрать совсем, по крайне мере на время тестирования
нат/редирект. без one_pass последнего allow достаточно.
после этого по идее должно работать.

> ${fw} add fwd 127.0.0.1,3128 tcp from ${local} to not me 80,3128,8080
> via ${int_if}
> ${fw} add deny log ip from ${local} to any 25
>
> ${fw} add allow ip from any to any
>

[...]


> PS. я поражаюсь, почему нельзя IPFIREWALL_FORWARD влепить модулем???
> для такой совершенно тривиальной задачи как прокси офис.сервер нужно
> пересобирать ядро.... а сколько секса предстоит вкусить для настройки
> шейперов ;) мрак.
>

я ядро и мир обязательно пересобираю на новом сервере, причем по
несколько раз. хороший тест перед запуском в эксплуатацию.

> PS2. кстати вопрос, есть ли возможность rw в fido7.ru.unix способом
> отличным от fido ? Для чтения помню были какието гейты, а вот чтобы
> написать чтото....

про fido7.ru уже вроде написали.
серверы с открытым постингом были у ЛакиНета и ГолденТелекома.
с Фарлепа и Воли посты похоже в /dev/null идут. насчет остальных - не знаю.


--
mccloud@

Sergej Kandyla

unread,
Jan 15, 2009, 4:20:21 AM1/15/09
to fre...@uafug.org.ua
Andrey Voitenkov пишет:

> Sergej kandyla wrote:
> [...]
>> net.inet.ip.fw.one_pass: 1
> это зря по-моему.
>
> [...]
>>
>> ${fw} add allow tcp from any to me 2022 in via ${ext_if}
>> keep-state # SSH
>> ${fw} add pass ip from me to any keep-state # это правило пробовал
>> и после ната - фиолетово.
>>
>> ${fw} add nat 1 all from ${local} to any out via ${ext_if}
>> ${fw} add nat 1 all from any to me in via ${ext_if}
>> ${fw} nat 1 config if ${ext_if} deny_in \
>> redirect_port tcp 192.168.0.15:3690 3690
>
> /man ipfw
> deny_in
> Deny any incoming connection from outside world.
>
> т.е. нужно делать что-то такое:
> nat 1 config if{$ext_if} reset same_ports log
>
> насчет редиректа - не знаю, не пробовал, но судя по ману, нужно
> разделять прямой нат и редиректы.
>
> и первые два правила убрать совсем, по крайне мере на время тестирования
> нат/редирект. без one_pass последнего allow достаточно.
> после этого по идее должно работать.


Да, вполне возможно, что действе one_pass как раз и попадало на правило
с натом.
PS. ман я читал, там одна страница инфы по этому поводу. Без deny_in как
раз последующие правила не работали (видать, one_pass). Просто привык
исторически к one_pass (для ipfw)

Reply all
Reply to author
Forward
0 new messages