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

Настройка сетевых служб, маршрутизации, фаерволлов. Проблемы с сетевым оборудованием.
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
Vadeg
рядовой
Сообщения: 18
Зарегистрирован: 2010-03-26 10:43:42

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

Непрочитанное сообщение Vadeg » 2012-03-06 9:52:19

Добрый день, столкнулся на дня с такой проблемой в 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"

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
Vadeg
рядовой
Сообщения: 18
Зарегистрирован: 2010-03-26 10:43:42

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

Непрочитанное сообщение Vadeg » 2012-03-06 20:29:09

Поправка:
При включенном 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)"

Аватара пользователя
FreeBSP
майор
Сообщения: 2020
Зарегистрирован: 2009-05-24 20:20:19
Откуда: Москва

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

Непрочитанное сообщение FreeBSP » 2012-03-06 23:38:55

check-state не забыли?
Человек начинает получать первые наслаждения от знакомства с unix системами. Ему нужно помочь - дальше он сможет получать наслаждение самостоятельно ©
Ламер — не желающий самостоятельно разбираться. Не путать с новичком: ламер опасен и знает это!

Аватара пользователя
Vadeg
рядовой
Сообщения: 18
Зарегистрирован: 2010-03-26 10:43:42

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

Непрочитанное сообщение Vadeg » 2012-03-07 6:41:22

Про check-state помню. Пробовал ставить и в начало правил, и после НАТ правил. Никакого эффекта.

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

Аватара пользователя
hizel
дядя поня
Сообщения: 9031
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

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

Непрочитанное сообщение hizel » 2012-03-07 8:52:31

читаем
Dynamic rules will be checked at the first check-state,
keep-state or limit occurrence
а потом смотрим 100,900 и 2550 правила
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Аватара пользователя
Vadeg
рядовой
Сообщения: 18
Зарегистрирован: 2010-03-26 10:43:42

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

Непрочитанное сообщение Vadeg » 2012-03-14 17:05:03

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.