Страница 1 из 1
Затупил с IPFW+kernel nat
Добавлено: 2010-07-07 2:10:17
uder
Подскажите в чем может быть дело, а то я не могу понять, то ли лыжи не едут то ли

.. Вообщем не могу настроить 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 (кстати автору большое спасибо) - не работает.
Подскажите в чем может быть дело? Или как еще можно диагностировать ошибку? Можно ли как-нибудь проследить путь пакета в ядре?
Re: Затупил с IPFW+kernel nat
Добавлено: 2010-07-07 5:56:38
Div
А у вас в rc.conf стоит
gateway_enable="YES"
Re: Затупил с IPFW+kernel nat
Добавлено: 2010-07-07 7:53:17
uder
Да
Код: Выделить всё
#grep gateway /etc/rc.conf
gateway_enable="YES"
и даже, на всякий случай:
Код: Выделить всё
#grep firewall /etc/rc.conf
firewall_enable="YES"
firewall_nat_enable="YES"
Re: Затупил с IPFW+kernel nat
Добавлено: 2010-07-07 9:26:47
_vadim64
Как то у вас всё вроде по рабочему, но.. костыльно что ли...
Давайте сделаем так
Код: Выделить всё
# 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"
...
по сути тоже самое что у вас, только в более попсовом оформлении
Re: Затупил с IPFW+kernel nat
Добавлено: 2010-07-07 9:43:40
uder
Попсовое оформление не работает

Симптомы те же.
Re: Затупил с IPFW+kernel nat
Добавлено: 2010-07-07 11:14:11
_vadim64
Аську давай, ща разберёмся.
Re: Затупил с IPFW+kernel nat
Добавлено: 2010-07-07 11:22:16
ivan__
Re: Затупил с IPFW+kernel nat
Добавлено: 2010-07-07 12:52:05
BirdGovorun
Решил развлечься с ядрённым НАТом, интерфейс один.
Обычная связка 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
и судя по шоу до НАТа ничего не доходит, но НАТит
Код: Выделить всё
# 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
#
блин всё ходят, а я нет
ещё раз меняем правила
Код: Выделить всё
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
#
Все ходят и я в том числе, но до НАТа ни один пакет не доходит
опять меняю правила
Код: Выделить всё
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
#
Крыша слетела,

все через мой комп ходят в инет и я то-же
НАТ такой ядерный, что ему правила не нужны или для IPFW NAT уже ненужен, он сам всё может?

Re: Затупил с IPFW+kernel nat
Добавлено: 2010-07-07 17:55:16
BirdGovorun
Просто развлекаюсь
Локалка 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
и можно раздавать инет всем, фаерволом можно рубить не угодных
Тихо медленно шурша, крыша едет не спеша.

Re: Затупил с IPFW+kernel nat
Добавлено: 2010-07-08 1:00:35
uder
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 на другом объекте) не работают на этом шлюзе.
Re: Затупил с IPFW+kernel nat
Добавлено: 2010-07-08 9:02:42
Gamerman
BirdGovorun писал(а):Просто развлекаюсь
Инет по какой технологии получаешь?
У меня нат настроен в самом ррр.
Re: Затупил с IPFW+kernel nat
Добавлено: 2010-07-08 9:17:30
BirdGovorun
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
...
Т.е. для реализации такой схемы тебе ненужен даже этот параметр (хотя в этом не уверен, проверять небуду)
Я проверил, без гатевей, всё идут лесом
Я добро не давал, на перенаправление трафика, оно само как-то решает перенаправить дальше.
uder писал(а):В чем все таки может быть дело с этим NAT? Этот шлюз я апгрейдил 7.2 -> 7.3 (делал это впервые) могло это как-нибудь повлиять? Почему заведомо рабочие правила (которые работают на 7.2 на другом объекте) не работают на этом шлюзе.
Где-то видел тему, что откатились назад на 7.2 иначе не работало.
Апгрейдил как freebsd-update или сборкой, ,бывают проблемы, как вариант 7.3 до STABLE обновить
Re: Затупил с IPFW+kernel nat
Добавлено: 2010-07-08 9:22:44
BirdGovorun
Gamerman писал(а):BirdGovorun писал(а):Просто развлекаюсь
Инет по какой технологии получаешь?
У меня нат настроен в самом ррр.
ADSL модем в нем есть НАТ(заводская настройка ) далее на сервак с НАТом (NAT+IPFW ) и 2 локалки
Re: Затупил с IPFW+kernel nat
Добавлено: 2010-07-08 9:37:48
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 нужно еще
Re: Затупил с IPFW+kernel nat
Добавлено: 2010-07-08 9:39:06
uder
Я проверил, без гатевей, всё идут лесом

Я добро не давал, на перенаправление трафика, оно само как-то решает перенаправить дальше.
Давал. директива gateway_enable отвечает за форвардинг трафика.
Обновлял с помощью freebsd-update, когда вышел релиз. Откатываться не хочу - 7.2 уже не поддерживается, да и не по-нашему это, стоит разобраться.
ADSL модем в нем есть НАТ(заводская настройка ) далее на сервак с НАТом (NAT+IPFW ) и 2 локалки

Re: Затупил с IPFW+kernel nat
Добавлено: 2010-07-08 9:42:01
uder
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 нужно еще
да я вкурсе.. не запостил в прошлый раз..
Код: Выделить всё
#grep LIBALIAS /sys/i386/conf/GATEWAY
options LIBALIAS
Re: Затупил с IPFW+kernel nat
Добавлено: 2010-07-08 9:53:52
BirdGovorun
uder писал(а):
ADSL модем в нем есть НАТ(заводская настройка ) далее на сервак с НАТом (NAT+IPFW ) и 2 локалки

А чего тут удивляться, был кабельный модем и было 3 локалки, сменили провайдера и
модем стал ADSL ( со временем осталось 2 локалки) не ломать-же всё, вот так и работает с 2006 года
Re: Затупил с IPFW+kernel nat
Добавлено: 2010-07-08 10:00:57
ivan__
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 моего внешнего интерфейса
А больше ничего в конфиге нету?
Re: Затупил с IPFW+kernel nat
Добавлено: 2010-07-08 10:06:41
uder
А больше ничего в конфиге нету?
на время экспериментов - нет, все остальное вырубаю.
Re: Затупил с IPFW+kernel nat
Добавлено: 2010-07-08 10:24:28
ivan__
Попробуй так
Код: Выделить всё
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
Re: Затупил с IPFW+kernel nat
Добавлено: 2010-07-09 1:05:57
uder
Разобрался! Все дело в переменной sysctl net.link.ether.ipfw
Код: Выделить всё
#man ipfw
...
net.link.ether.ipfw: 0
Controls whether layer-2 packets are passed to ipfw. Default is
no.
...
У меня она почему-то включена. Для работы с ней требуются дополнительные разрешающие правила. Теперь надо разобраться почему она включена по умолчанию и нужен ли мне этот функционал.
Спасибо всем кто помогал решить проблему