Страница 1 из 1

Не работает keep-state. Kernel NAT FreeBSD 8.1-8.2

Добавлено: 2012-03-06 9:52:19
Vadeg
Добрый день, столкнулся на дня с такой проблемой в Kernel NAT.

На свежеустановленном шлюзе FreeBSD 8.2 применил следующие правила для раздачи Инета на локалку:

Код: Выделить всё

#!/bin/sh
ipfw="/sbin/ipfw -q"
oin="re0"
iin="vr0"
#iin2="vr1"
oip="х.х.х.хх"
lan="192.168.1.0/24"
$ipfw -f flush
$ipfw add 10 pass all from any to any via lo0
$ipfw add 100 pass tcp from any to me 22 keep-state
#Объявляем экземпляр НАТ
$ipfw nat 100 config if $oin
#Применяем НАТ
$ipfw add 900 nat 100 ip from any to any via re0
### Разрешаем хождение от шлюза
$ipfw add 1800 pass ip from me to any keep-state
# Главное пропускающее правило на подсеть #
$ipfw add 2550  pass ip from $lan to any keep-state
$ipfw add 60000 deny ip from any to any
Проблема - правило 2550 не полностью работает. При ipfw -d show просто не симметричных правил. И траффик не ходит из $lan.
Если написать статичное, "обратное" ему - то естесствено траффик из сети $lan идет как надо.
И все другие правила с keep-state, ниже NATа так криво работают.

Правило 100 работает корректно.

Крайне смущает тот факт, что на вышеприведенном шаблоне правил у меня нормально работают 4 шлюза, системы разные, 7.3, и 8.1 и 8.2. С одинаковым конфигом ядра (конфиг ниже). И все работает как надо. Единственное отличие - те системы апнутые с 7.1. А эта - изначально установленная с CD 8.2 amd64 Release. Больше отличий не нашел.
Подумал - косяк обновления 8,2, откатил ядро и мир на 8,1, ничего не поменялось. проблема осталась.

Где я лоханулся ? 3-й день гугулю, по маиллистам и релисноутам.

Данные косячного шлюза:

Код: Выделить всё

host# uname -a
FreeBSD host.com 8.1-RELEASE-p8 FreeBSD 8.1-RELEASE-p8 #0: Mon Mar  5 16:22:52 VOLT 2012  user@host.com:/usr/obj/usr/src/sys/mykern8  amd64
(Ставил 8.2, откатился на 8.1 через сырцы с предварительным их удалением.)

Добавлено в конфиг ядра:

Код: Выделить всё

options         IPFIREWALL              #firewall
options         IPFIREWALL_VERBOSE      #enable logging to syslogd(8)
options         IPFIREWALL_VERBOSE_LIMIT=100    #limit verbosity
options         IPFIREWALL_DEFAULT_TO_ACCEPT    #allow everything by default
options         IPFIREWALL_FORWARD      #packet destination changes
options         IPFIREWALL_NAT          #ipfw kernel nat support
options         DUMMYNET
options         LIBALIAS
options         IPDIVERT
options         ROUTETABLES=8
device tap
device if_bridge
options         HZ=1000
options         IPSEC
device          crypto

В файле rc.conf:

Код: Выделить всё

ifconfig_re0="х.х.х.58 netmask 255.255.255.252"
defaultrouter="х.х.х.57"
firewall_enable="YES"
firewall_script="/etc/rc.firewall"
gateway_enable="YES"
В sysctl.conf пусто. Еще ничего не навертел. one_pass.enable соответсвенно "1"

Re: Не работает keep-state. Kernel NAT FreeBSD 8.1-8.2

Добавлено: 2012-03-06 20:29:09
Vadeg
Поправка:
При включенном keep-state в правиле 2550, и просмотре в trafshow траффика с нешней сетевой карт, почемуто улетают пакеты с src IP принадлежащим хосту отправителя. Есстественно, дальше внешней сетевухи он не улетит. Такое ощущение, что при keep-state просто не отрабатывает правила NAT. Ума не приложу, почему.
При статичных правилах

Код: Выделить всё

$ipfw add 2550  pass ip from $lan to any
$ipfw add 2551  pass ip from any to $lan 
Все НАТиться без проблем.

Модераторы, поправьте пожалуйста название темы на "Не работает kernel NAT перед правилами с keep-state (FreeBSD 8.1-8.2)"

Re: Не работает keep-state. Kernel NAT FreeBSD 8.1-8.2

Добавлено: 2012-03-06 23:38:55
FreeBSP
check-state не забыли?

Re: Не работает keep-state. Kernel NAT FreeBSD 8.1-8.2

Добавлено: 2012-03-07 6:41:22
Vadeg
Про check-state помню. Пробовал ставить и в начало правил, и после НАТ правил. Никакого эффекта.

Сегодня попробую раскатать на виртуалке аналогичную систему. С того же дистра, с теми же конфигами ядра и фаера.

Re: Не работает keep-state. Kernel NAT FreeBSD 8.1-8.2

Добавлено: 2012-03-07 8:52:31
hizel
читаем
Dynamic rules will be checked at the first check-state,
keep-state or limit occurrence
а потом смотрим 100,900 и 2550 правила

Re: Не работает keep-state. Kernel NAT FreeBSD 8.1-8.2

Добавлено: 2012-03-14 17:05:03
Vadeg
FreeBSP писал(а):check-state не забыли?
hizel писал(а):читаем
Dynamic rules will be checked at the first check-state,
keep-state or limit occurrence
а потом смотрим 100,900 и 2550 правила
Это все понятно. Я считаю, что я умею читать маны.

Главный вопрос: почему приведенный мной конфиг ipfw в верхнем поcте, отлично работает на других шлюзах. А на свежеустановленной на виртуалке 8,2 amd64 с конфигами в первом посте, ipfw начинает работать "не как раньше". И keep-state я успешно применял с 5,1-й версии FreeBSD.