Serge Negodyuck wrote:
> >
> > Где документировано, что произойдет с пакетом, для которого нет записи
> > в таблице трансляции, при отсутствии deny_in? В natd возможны были
> > разные варианты в зависимости от значения -target_address, а в ядерном
> > nat оно как?
> >
> > И второй вопрос, наверное связанный с первым. Есть набор правил для
> > входящего трафика
> >
> > ipfw nat 2 config if $OUTSIDE deny_in
> > ipfw add 10 check-state
> > ipfw add 20 allow tcp from any to me $SERVICES in via $OUTSIDE
> > ipfw add 30 allow icmp from any to me in via $OUTSIDE
> > ipfw add 40 nat 2 ip from any to any in via $OUTSIDE
> >
> > Из него видно, что если из внутренней сети был ICMP запрос наружу, то
> > ответ на этот запрос в NAT не попадет. А если убрать 30-е правило, то
> > сам роутер останется без входящего ICMP.
> >
> > Как сделать правильно и красиво?
> >
> > Наиболее изящным решением было бы иметь разные адреса для трансляции и
> > для внешнего интерфейса, но "белый" адрес есть только один.
> >
> > ЗЫ Для исходящего трафика правила примерно такие
> >
> > ipfw add nat 2 ip from $RFC1918 to any out via $OUTSIDE
> > ipfw add allow ip from any to any out via $OUTSIDE keep-state
> >
> 
> Этому багу года три,
> исправлено летом в 8.2-STABLE (т.е. в будущем 8.3-RELEASE), 9.0
> 
> http://www.freebsd.org/cgi/query-pr.cgi?pr=129093
> http://www.freebsd.org/cgi/query-pr.cgi?pr=122109
> http://www.freebsd.org/cgi/query-pr.cgi?pr=157379

Насколько я понял из приведенных PR, до исправления бага поведение
ядерного nat такое, как будто deny_in всегда включен. Но мне осталось
непонятно, уже после исправления бага что будут делать с пакетом, для
которого нет записи в таблице трансляции, при отсутствии deny_in? В
natd возможны были разные варианты в зависимости от значения
-target_address, а в ядерном nat нет опции target_address.

> Варианты решения: или обновляться, или отказаться от ядерного nat в
> пользу других.

Как вариант наверное еще можно попробовать собственные пакеты тоже
через NAT пропускать, чтобы state в nat создавался, а
keep-state/check-state выкинуть. Я попробую и отпишусь тут.

-- 
Victor Sudakov,  VAS4-RIPE, VAS47-RIPN
sip:[email protected]

Ответить