Затупил с IPFW+kernel nat

Настройка сетевых служб, маршрутизации, фаерволлов. Проблемы с сетевым оборудованием.
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
uder
рядовой
Сообщения: 15
Зарегистрирован: 2008-12-17 8:11:26

Затупил с IPFW+kernel nat

Непрочитанное сообщение uder » 2010-07-07 2:10:17

Подскажите в чем может быть дело, а то я не могу понять, то ли лыжи не едут то ли :smile: .. Вообщем не могу настроить ipfw kernel nat во FreeBSD 7.3. Простой набор правил не работает

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

#ipfw show
00050      0        0 check-state
00100    572    59125 nat 1 ip from any to 1.2.3.4 in via age0 keep-state
00200    156     9959 nat 1 ip from 192.168.1.0/24 to any out via age0 keep-state
65000     allow from any to any

#ipfw nat show config
ipfw nat 1 config ip 1.2.3.4

//Вместо 1.2.3.4 стоит реальный ip моего внешнего интерфейса
Аналогичный набор правил работает на 7.2 на другом объекте

tcpdump говорит, что пакеты из внутр. сети маскируются и проходят нормально. Ответ приходит на внешний интерфейс(age0), судя по счетчику правила 100, но дальше никуда не идет, почему-то дропается.

ядро собрано с поддержкой ipfw и nat

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

#grep IPFIREWALL /sys/i386/conf/GATEWAY
options         IPFIREWALL
options         IPFIREWALL_VERBOSE
options         IPFIREWALL_VERBOSE_LIMIT=100
options         IPFIREWALL_DEFAULT_TO_ACCEPT
options         IPFIREWALL_FORWARD
options         IPFIREWALL_NAT

#dmesg | grep ipfw
ipfw2 (+ipv6) initialized, divert loadable, [b]nat enabled[/b], rule-based forwarding enabled, default to accept, logging limited to 100 packets/entry by default
пробовал разные примеры из http://www.lissyara.su/articles/freebsd ... at_options (кстати автору большое спасибо) - не работает.

Подскажите в чем может быть дело? Или как еще можно диагностировать ошибку? Можно ли как-нибудь проследить путь пакета в ядре?
Последний раз редактировалось terminus 2010-07-07 10:40:38, всего редактировалось 1 раз.
Причина: nat - это сети. Перенесено из FreeBSD в Networks.

Хостинговая компания 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/

Div
сержант
Сообщения: 168
Зарегистрирован: 2007-11-19 10:36:57

Re: Затупил с IPFW+kernel nat

Непрочитанное сообщение Div » 2010-07-07 5:56:38

А у вас в rc.conf стоит
gateway_enable="YES"
С уважением Сергей

uder
рядовой
Сообщения: 15
Зарегистрирован: 2008-12-17 8:11:26

Re: Затупил с IPFW+kernel nat

Непрочитанное сообщение uder » 2010-07-07 7:53:17

Да :)

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

#grep gateway /etc/rc.conf
gateway_enable="YES"
и даже, на всякий случай:

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

#grep firewall /etc/rc.conf
firewall_enable="YES"
firewall_nat_enable="YES" 

_vadim64
проходил мимо

Re: Затупил с IPFW+kernel nat

Непрочитанное сообщение _vadim64 » 2010-07-07 9:26:47

Как то у вас всё вроде по рабочему, но.. костыльно что ли...
Давайте сделаем так

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

# cat /etc/firewall
add 00050 check-state

add 00100 allow ip from any to any via <интерфейс локалки>

add 01200 allow tcp from me to any out keep-state
add 01210 allow udp from me to any out keep-state
add 01220 allow icmp from me to any keep-state

nat 1 config if age0 deny_in reset same_ports
add 03010 nat 1 all from 192.168.1.0/24 to any via age0
add 03020 nat 1 all from any to me via age0

add 65534 reject log ip from any to any
#  cat /etc/rc.conf
...
gateway_enable="YES"
firewall_enable="YES"
firewall_nat_enable="YES"
firewall_type="/etc/firewall"
...
по сути тоже самое что у вас, только в более попсовом оформлении

uder
рядовой
Сообщения: 15
Зарегистрирован: 2008-12-17 8:11:26

Re: Затупил с IPFW+kernel nat

Непрочитанное сообщение uder » 2010-07-07 9:43:40

Попсовое оформление не работает :) Симптомы те же.


ivan__
сержант
Сообщения: 234
Зарегистрирован: 2009-08-11 15:48:32
Откуда: Питер

Re: Затупил с IPFW+kernel nat

Непрочитанное сообщение ivan__ » 2010-07-07 11:22:16

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

net.inet.ip.fw.one_pass=0 

Аватара пользователя
BirdGovorun
лейтенант
Сообщения: 878
Зарегистрирован: 2009-10-20 20:27:13
Откуда: Харьков.

Re: Затупил с IPFW+kernel nat

Непрочитанное сообщение BirdGovorun » 2010-07-07 12:52:05

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

# uname -r    8.1-RC2
#
Решил развлечься с ядрённым НАТом, интерфейс один.
Обычная связка NAT+IPFW работает без проблем
мой IP 192.168.7.78 и через мой комп ходят в инет
по этим правилам

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

ipfw add deny all from any 135,445 to any via em0
ipfw add  pass all from any to any via em0
ipfw add pass ip from 192.168.7.0/24 to any via em0
ipfw add nat 1 all from any to any via em0
и судя по шоу до НАТа ничего не доходит, но НАТит :shock:

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

# ipfw show
00100    0       0 deny ip from any 135,445 to any via em0
00200 2614 1994456 allow ip from any to any via em0
00300    0       0 allow ip from 192.168.7.0/24 to any via em0
00400    0       0 nat 1 ip from any to any via em0
65535   47   16687 deny ip from any to any
#
Меняем правила

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

ipfw add deny all from any 135,445 to any via em0
ipfw add pass ip from 192.168.7.0/24 to any via em0
ipfw add nat 1 all from any to any via em0

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

# ipfw show
00100     0       0 deny ip from any 135,445 to any via em0
00200 19925 8014710 allow ip from 192.168.7.0/24 to any via em0
00300    27    2268 nat 1 ip from any to any via em0
65535    49   19619 deny ip from any to any
#
блин всё ходят, а я нет :shock:

ещё раз меняем правила

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

ipfw add deny all from any 135,445 to any via em0
ipfw add  pass all from any to any via em0
ipfw add nat 1 all from any to any via em0

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

# ipfw show
00100    0       0 deny ip from any 135,445 to any via em0
00200 7796 3895667 allow ip from any to any via em0
00300    0       0 nat 1 ip from any to any via em0
65535   55   24239 deny ip from any to any
#
Все ходят и я в том числе, но до НАТа ни один пакет не доходит :cz2:

опять меняю правила

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

ipfw add deny all from any 135,445 to any via em0
ipfw add  pass all from any to any via em0

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

# ipfw show
00100    0       0 deny ip from any 135,445 to any via em0
00200 4027 3359978 allow ip from any to any via em0
65535   55   24239 deny ip from any to any
#
Крыша слетела, :cz2: все через мой комп ходят в инет и я то-же
НАТ такой ядерный, что ему правила не нужны или для IPFW NAT уже ненужен, он сам всё может?
:st: :cz2: :st: :shock:

Аватара пользователя
BirdGovorun
лейтенант
Сообщения: 878
Зарегистрирован: 2009-10-20 20:27:13
Откуда: Харьков.

Re: Затупил с IPFW+kernel nat

Непрочитанное сообщение BirdGovorun » 2010-07-07 17:55:16

Просто развлекаюсь :smile:
Локалка 192.168.7.0/24 все компы и сервер в одной подсети
Мой комп в инет через сервак ходит, а всех остальных через свою машину завернуть
сетевуха одна.

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

# ifconfig
em0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=209b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,WOL_MAGIC>
        ether 00:17:31:01:1d:be
        inet 192.168.7.78 netmask 0xffffff00 broadcast 192.168.7.255
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
/etc/rc.conf

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

defaultrouter="192.168.7.254"
gateway_enable="YES"
firewall_enable="YES"
firewall_script="/etc/firewall/rules"
# ipfw show

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

0100     4      160 deny ip from any 135,445,22,21 to any via em0
00200 46128 18617054 allow ip from any to any
65535     0        0 deny ip from any to any
нет проблем все и инетом и без НАТа

Развлекаюсь дальше, выгружаю модуль

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

# kldunload ipfw
#ipfw show
ipfw: getsockopt(IP_FW_GET): Protocol not available
#
Хождение в инет, через мой комп без проблем

Достаточно gateway_enable="YES" в /etc/rc.conf
и можно раздавать инет всем, фаерволом можно рубить не угодных
Тихо медленно шурша, крыша едет не спеша. :bn:

uder
рядовой
Сообщения: 15
Зарегистрирован: 2008-12-17 8:11:26

Re: Затупил с IPFW+kernel nat

Непрочитанное сообщение uder » 2010-07-08 1:00:35

2 _vadim64 с аськой, не получилось. Прочитал предложение когда был уже дома. Да и экспериментировать могу только с утра. За предложение спасибо.

2 ivan_ не меняет ситуацию (да и не должно, на таком наборе правил.)

2 BirdGovorun может я ошибаюсь, несколько сумбурно написано, но ты просто завернул трафик своей сети через свою машину. Т.е. пакет с любой машины сначала идет на твою (192.168.7.78), она перенаправляет его на шлюз (192.168.7.254), а он уже осуществляет НАТ (или передает следующему маршрутизатору).

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

man rc.conf
...
gateway_enable
                 (bool) If set to ``YES'', configure host to act as an IP
                 router, e.g. to forward packets between interfaces
...
Т.е. для реализации такой схемы тебе ненужен даже этот параметр (хотя в этом не уверен, проверять небуду)

В чем все таки может быть дело с этим NAT? Этот шлюз я апгрейдил 7.2 -> 7.3 (делал это впервые) могло это как-нибудь повлиять? Почему заведомо рабочие правила (которые работают на 7.2 на другом объекте) не работают на этом шлюзе.

Аватара пользователя
Gamerman
капитан
Сообщения: 1720
Зарегистрирован: 2009-05-17 21:01:23
Откуда: Украина, Ужгород - Днепр
Контактная информация:

Re: Затупил с IPFW+kernel nat

Непрочитанное сообщение Gamerman » 2010-07-08 9:02:42

BirdGovorun писал(а):Просто развлекаюсь :smile:
Инет по какой технологии получаешь?
У меня нат настроен в самом ррр.
Глюк глюком вышибают!

Аватара пользователя
BirdGovorun
лейтенант
Сообщения: 878
Зарегистрирован: 2009-10-20 20:27:13
Откуда: Харьков.

Re: Затупил с IPFW+kernel nat

Непрочитанное сообщение BirdGovorun » 2010-07-08 9:17:30

uder писал(а): 2 BirdGovorun может я ошибаюсь, несколько сумбурно написано, но ты просто завернул трафик своей сети через свою машину. Т.е. пакет с любой машины сначала идет на твою (192.168.7.78), она перенаправляет его на шлюз (192.168.7.254), а он уже осуществляет НАТ (или передает следующему маршрутизатору).

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

man rc.conf
...
gateway_enable
                 (bool) If set to ``YES'', configure host to act as an IP
                 router, e.g. to forward packets between interfaces
...
Т.е. для реализации такой схемы тебе ненужен даже этот параметр (хотя в этом не уверен, проверять небуду)
Я проверил, без гатевей, всё идут лесом :smile:
Я добро не давал, на перенаправление трафика, оно само как-то решает перенаправить дальше.
uder писал(а):В чем все таки может быть дело с этим NAT? Этот шлюз я апгрейдил 7.2 -> 7.3 (делал это впервые) могло это как-нибудь повлиять? Почему заведомо рабочие правила (которые работают на 7.2 на другом объекте) не работают на этом шлюзе.
Где-то видел тему, что откатились назад на 7.2 иначе не работало.
Апгрейдил как freebsd-update или сборкой, ,бывают проблемы, как вариант 7.3 до STABLE обновить

Аватара пользователя
BirdGovorun
лейтенант
Сообщения: 878
Зарегистрирован: 2009-10-20 20:27:13
Откуда: Харьков.

Re: Затупил с IPFW+kernel nat

Непрочитанное сообщение BirdGovorun » 2010-07-08 9:22:44

Gamerman писал(а):
BirdGovorun писал(а):Просто развлекаюсь :smile:
Инет по какой технологии получаешь?
У меня нат настроен в самом ррр.
ADSL модем в нем есть НАТ(заводская настройка ) далее на сервак с НАТом (NAT+IPFW ) и 2 локалки

ivan__
сержант
Сообщения: 234
Зарегистрирован: 2009-08-11 15:48:32
Откуда: Питер

Re: Затупил с IPFW+kernel nat

Непрочитанное сообщение ivan__ » 2010-07-08 9:37:48

uder писал(а): ядро собрано с поддержкой ipfw и nat

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

#grep IPFIREWALL /sys/i386/conf/GATEWAY
options         IPFIREWALL
options         IPFIREWALL_VERBOSE
options         IPFIREWALL_VERBOSE_LIMIT=100
options         IPFIREWALL_DEFAULT_TO_ACCEPT
options         IPFIREWALL_FORWARD
options         IPFIREWALL_NAT

Для NAT нужно еще

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

options LIBALIAS

uder
рядовой
Сообщения: 15
Зарегистрирован: 2008-12-17 8:11:26

Re: Затупил с IPFW+kernel nat

Непрочитанное сообщение uder » 2010-07-08 9:39:06

Я проверил, без гатевей, всё идут лесом :smile:
Я добро не давал, на перенаправление трафика, оно само как-то решает перенаправить дальше.
Давал. директива gateway_enable отвечает за форвардинг трафика.


Обновлял с помощью freebsd-update, когда вышел релиз. Откатываться не хочу - 7.2 уже не поддерживается, да и не по-нашему это, стоит разобраться.

ADSL модем в нем есть НАТ(заводская настройка ) далее на сервак с НАТом (NAT+IPFW ) и 2 локалки
:shock:

uder
рядовой
Сообщения: 15
Зарегистрирован: 2008-12-17 8:11:26

Re: Затупил с IPFW+kernel nat

Непрочитанное сообщение uder » 2010-07-08 9:42:01

ivan__ писал(а):
uder писал(а): ядро собрано с поддержкой ipfw и nat

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

#grep IPFIREWALL /sys/i386/conf/GATEWAY
options         IPFIREWALL
options         IPFIREWALL_VERBOSE
options         IPFIREWALL_VERBOSE_LIMIT=100
options         IPFIREWALL_DEFAULT_TO_ACCEPT
options         IPFIREWALL_FORWARD
options         IPFIREWALL_NAT

Для NAT нужно еще

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

options LIBALIAS
да я вкурсе.. не запостил в прошлый раз..

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

#grep LIBALIAS /sys/i386/conf/GATEWAY
options         LIBALIAS
 

Аватара пользователя
BirdGovorun
лейтенант
Сообщения: 878
Зарегистрирован: 2009-10-20 20:27:13
Откуда: Харьков.

Re: Затупил с IPFW+kernel nat

Непрочитанное сообщение BirdGovorun » 2010-07-08 9:53:52

uder писал(а):
ADSL модем в нем есть НАТ(заводская настройка ) далее на сервак с НАТом (NAT+IPFW ) и 2 локалки
:shock:
А чего тут удивляться, был кабельный модем и было 3 локалки, сменили провайдера и
модем стал ADSL ( со временем осталось 2 локалки) не ломать-же всё, вот так и работает с 2006 года

ivan__
сержант
Сообщения: 234
Зарегистрирован: 2009-08-11 15:48:32
Откуда: Питер

Re: Затупил с IPFW+kernel nat

Непрочитанное сообщение ivan__ » 2010-07-08 10:00:57

uder писал(а):

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

#ipfw show
00050      0        0 check-state
00100    572    59125 nat 1 ip from any to 1.2.3.4 in via age0 keep-state
00200    156     9959 nat 1 ip from 192.168.1.0/24 to any out via age0 keep-state
65000     allow from any to any

#ipfw nat show config
ipfw nat 1 config ip 1.2.3.4

//Вместо 1.2.3.4 стоит реальный ip моего внешнего интерфейса
А больше ничего в конфиге нету?

uder
рядовой
Сообщения: 15
Зарегистрирован: 2008-12-17 8:11:26

Re: Затупил с IPFW+kernel nat

Непрочитанное сообщение uder » 2010-07-08 10:06:41

А больше ничего в конфиге нету?
на время экспериментов - нет, все остальное вырубаю.

ivan__
сержант
Сообщения: 234
Зарегистрирован: 2009-08-11 15:48:32
Откуда: Питер

Re: Затупил с IPFW+kernel nat

Непрочитанное сообщение ivan__ » 2010-07-08 10:24:28

Попробуй так

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

ipfw -q -f flush
ipfw -q -f nat flush

ipfw -q add 1000 allow all from any to any via lo0    
ipfw -q add 1010 allow all from any to any via "lan интерфейс" 

ipfw -q nat 1 config log if age0 reset same_ports deny_in
ipfw -q add nat 1 ip from any to any via age0

ipfw -q add deny log all from any to any

uder
рядовой
Сообщения: 15
Зарегистрирован: 2008-12-17 8:11:26

Re: Затупил с IPFW+kernel nat

Непрочитанное сообщение uder » 2010-07-09 1:05:57

Разобрался! Все дело в переменной sysctl net.link.ether.ipfw

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

#man ipfw
...
net.link.ether.ipfw: 0
             Controls whether layer-2 packets are passed to ipfw.  Default is
             no.
...
У меня она почему-то включена. Для работы с ней требуются дополнительные разрешающие правила. Теперь надо разобраться почему она включена по умолчанию и нужен ли мне этот функционал.

Спасибо всем кто помогал решить проблему