Подробное руководство по ipfw nat

Настройка сетевых служб, маршрутизации, фаерволлов. Проблемы с сетевым оборудованием.
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
terminus
майор
Сообщения: 2305
Зарегистрирован: 2007-10-29 11:27:35
Откуда: Рига

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение terminus » 2010-10-08 17:30:53

Curious mind писал(а): Мне нужно чтобы чтобы потребители не указанные в таблице получали инет только с прокси, мне не совсем понятно следующее:

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

${FwCMD} nat 1 config log if vr0 deny_in reset same_ports - Зачем запрещать вход пакетов на внешний интерфейс ?
Все входяшие извне соединения которые не фигирируют в таблице ната (не инициированы клиентами или не сделаны через redirect_port) отрубаются чтобы не мозолили глаза. Так "секюрней"...
Curious mind писал(а):

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

${FwCMD} add 00600 allow all from ${NetInt} to me in recv nfe0
${FwCMD} add 00601 allow all from me to ${NetInt} out xmit nfe0

${FwCMD} add 00602 allow all from "table(3)" to any in recv nfe0
${FwCMD} add 00603 allow all from any to "table(3)" out xmit nfe0   Не до конца понятна логика этих правил хотя возможно я просто не правильно их трактую
Все соединения из локальной сети на IP самого рутера разрешены. Если адрес не из таблицы полезет в интернет (то есть не на IP рутера), то его зарежет 00604.

Все соединения от IP из таблицы разрешены куда угодно (и на сам рутер, и в интернет).
Curious mind писал(а): И почему последнее правило

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

${FwCMD} add 00800 allow all from any to any
В FreeBSD 8.1 поломали sysctl one_pass, поэтому для того чтобы трафик после ната уходил в интернет надо такую фигню ставить. Так как нат запущен с deny_in то из интернета ничего лишнего не прилетит.
Мне нужно чтобы чтобы потребители не указанные в таблице получали инет только с прокси
Это будет работать.
Модель: AST-PM-105/0044; Тип: Универсальный, ремонтный; Название: Терминус; Род повреждения: Распад функций; Выводы: Сдать на слом.

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

Аватара пользователя
SOBAN
ефрейтор
Сообщения: 62
Зарегистрирован: 2010-06-30 14:21:28
Откуда: Россия:Ростов-на-Дону
Контактная информация:

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение SOBAN » 2010-10-08 17:57:49

После рестарта машины скорость нормализовалась вроде, но только я это почуствовал качая с tracker'a. То есть там почти до полной дожимает как и была. Но вот с http:// все равно низкая скорость загрузки и не открывание сайтов, так же при открытии большинства, очень долго ищет страничку типа...

У netstat вообще все хорошо! :)

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

# netstat -ibdn
Name    Mtu Network       Address              Ipkts Ierrs     Ibytes    Opkts Oerrs     Obytes  Coll Drop
sis0   1500 <Link#1>      00:16:e6:d5:96:a2   125058     0   79128968   105214     0   76511242     0    0
sis0   1500 10.86.232.0/2 10.86.232.10         73448     -   62441682    44651     -   16303659     -    -
lo0   16384 <Link#2>                               0     0          0        0     0          0     0    0
lo0   16384 127.0.0.0/8   127.0.0.1                0     -          0        0     -          0     -    -
ng0    1460 <Link#3>                           69137     0   59321513    42770     0   14425440     0    0
ng0    1460 93.81.242.17 93.81.242.17          153     -      11957      133     -      10628     -    -
VPN подключение к провайдеру по mpd5 протокол l2tp.

Поднял весь софт который стоял на предыдущем шлюзе, сменил железо на более современное, софт поставил тот же, только версия FreeBSD не 8.0, а

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

FreeBSD xsj.ru 7.3-RELEASE FreeBSD 7.3-RELEASE #0: Thu Oct  7 16:41:58 MSD 2010     root@xsj.ru:/usr/obj/usr/src/sys/Kernell_ipfw_apache22.2010-07-10.1  i386

Аватара пользователя
SOBAN
ефрейтор
Сообщения: 62
Зарегистрирован: 2010-06-30 14:21:28
Откуда: Россия:Ростов-на-Дону
Контактная информация:

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение SOBAN » 2010-10-08 18:21:46

Решил трабл, дело было не в софте и не в железе... прямота рук дала о себе знать! :-D
Подконектился к провайдеру по pptp, все отлично стало работать... не каких трблов с трафиком. Спасибо hizel, если бы не он, не полез бы в конфиг ковыряться.
В mpd5 накосячил в конфиге с l2tp, не знаю где, надо покопать...

terminus и hizel спасибо за поддержку в бою! :smile:

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

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение Gamerman » 2010-10-11 21:43:48

Обновлял систему недавно и зметил такую неприятную вещь:

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

# ./ipfw restart
net.inet.ip.fw.enable: 1 -> 0
kldload: can't load ipfw_nat: File exists
./ipfw: WARNING: Unable to load kernel module ipfw_nat
Загружаю вручную, все работает.

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

# kldload ./ipfw_nat.ko
# ./ipfw restart
net.inet.ip.fw.enable: 0 -> 0
Flush: not found
ipfw nat 1 config if re0 same_ports
Firewall rules loaded.
net.inet.ip.fw.enable: 0 -> 1

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

# uname -a
FreeBSD ***.org.ua 8.1-STABLE FreeBSD 8.1-STABLE #2: Mon Oct 11 19:59:26 EEST 2010     root@***.org.ua:/usr/obj/usr/src/sys/KERNELGAMER81  i386

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

# cat loader.conf
##nvidia_load="YES"
ipfw_nat_load="YES"
##dummynet_load="YES"
##snd_hda_load="YES"
ext2fs_load="YES"
linux_load="YES"
accf_http_load="YES"
##dahdi_load="YES"
##dahdi_dummy_load="YES"
Глюк глюком вышибают!

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

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение Gamerman » 2010-10-11 22:28:45

И такое обнаружил еще

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

# dmesg -a | grep ipfw
ipfw2 (+ipv6) initialized, divert enabled, nat loadable, rule-based forwarding disabled, default to accept, logging disabled
interface ipfw.2 already present in the KLD 'kernel'!
can't load ipfw_nat
/etc/rc: WARNING: Unable to load kernel module ipfw_nat
interface ipfw.2 already present in the KLD 'kernel'!
interface ipfw.2 already present in the KLD 'kernel'!
ipfw2 (+ipv6) initialized, divert enabled, nat loadable, rule-based forwarding enabled, default to accept, logging disabled
interface ipfw.2 already present in the KLD 'kernel'!
can't load ipfw_nat
/etc/rc: WARNING: Unable to load kernel module ipfw_nat
ipfw2 (+ipv6) initialized, divert enabled, nat loadable, rule-based forwarding enabled, default to accept, logging disabled
interface ipfw.2 already present in the KLD 'kernel'!
can't load ipfw_nat
/etc/rc: WARNING: Unable to load kernel module ipfw_nat
module ipfw already present!
ipfw2 (+ipv6) initialized, divert enabled, nat loadable, rule-based forwarding enabled, default to accept, logging disabled
interface ipfw.2 already present in the KLD 'kernel'!
can't load ipfw_nat
/etc/rc: WARNING: Unable to load kernel module ipfw_nat
interface ipfw.2 already present in the KLD 'kernel'!

Глюк глюком вышибают!

Essential
проходил мимо
Сообщения: 7
Зарегистрирован: 2010-10-14 14:30:25

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение Essential » 2010-10-14 14:40:24

terminus писал(а): В FreeBSD 8.1 поломали sysctl one_pass, поэтому для того чтобы трафик после ната уходил в интернет надо такую фигню ставить. Так как нат запущен с deny_in то из интернета ничего лишнего не прилетит.
Укажите это в статье пожалуйста. Потратил кучу времени пока не заглянул на форум.

Essential
проходил мимо
Сообщения: 7
Зарегистрирован: 2010-10-14 14:30:25

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение Essential » 2010-10-14 15:15:14

Да уж намутили они там в ipfw.....

Ядро не пересобирал. Правила ipfw:

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

01040 allow ip from any to any via em0
nat 1 config if em1 log deny_in same_ports reset
10130 nat 1 ip from any to any via em1
65535 deny ip from any to any
Само собой такое не работает из-за one_pass

Добавляю правила

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

65500 allow all from any to any
начинает работать. Выполняю команду netstat -r и kernel panic
Может если пересобрать ядро все будет ок? Счас все подгружал модулями.

favt
рядовой
Сообщения: 20
Зарегистрирован: 2008-03-06 9:47:45

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение favt » 2010-10-14 15:54:31

Essential писал(а):
terminus писал(а): В FreeBSD 8.1 поломали sysctl one_pass, поэтому для того чтобы трафик после ната уходил в интернет надо такую фигню ставить. Так как нат запущен с deny_in то из интернета ничего лишнего не прилетит.
Укажите это в статье пожалуйста. Потратил кучу времени пока не заглянул на форум.
Присоединюсь к вопросу. Где такое указано?
П.С. и ведь сколько мозга поломал из-за этого.

Аватара пользователя
terminus
майор
Сообщения: 2305
Зарегистрирован: 2007-10-29 11:27:35
Откуда: Рига

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение terminus » 2010-10-14 16:24:25

Подпишу потом. Только они это вроде уже починили и в 8.2 исправят.
http://lists.freebsd.org/pipermail/free ... 04394.html
Модель: AST-PM-105/0044; Тип: Универсальный, ремонтный; Название: Терминус; Род повреждения: Распад функций; Выводы: Сдать на слом.

Essential
проходил мимо
Сообщения: 7
Зарегистрирован: 2010-10-14 14:30:25

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение Essential » 2010-10-14 17:59:21

Пересобрал ядро (есть подозрения на ipv6). Кернел паник пропали.

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

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение Gamerman » 2010-10-14 18:32:59

Essential писал(а):Пересобрал ядро (есть подозрения на ipv6). Кернел паник пропали.
ipfw_nat как стартуете? Вернее модуль подключаете.
Глюк глюком вышибают!

Essential
проходил мимо
Сообщения: 7
Зарегистрирован: 2010-10-14 14:30:25

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение Essential » 2010-10-14 21:44:35

Gamerman писал(а):
Essential писал(а):Пересобрал ядро (есть подозрения на ipv6). Кернел паник пропали.
ipfw_nat как стартуете? Вернее модуль подключаете.
Подключал /etc/rc.conf

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

firewall_nat_enable="YES"

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

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение Gamerman » 2010-10-14 22:23:44

В loader.conf ничего для этого не писали? В ядро опции хитрые для НАТа писали?
Глюк глюком вышибают!

favt
рядовой
Сообщения: 20
Зарегистрирован: 2008-03-06 9:47:45

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение favt » 2010-10-14 22:49:25

terminus писал(а):Подпишу потом. Только они это вроде уже починили и в 8.2 исправят.
http://lists.freebsd.org/pipermail/free ... 04394.html
Ну и глупый вопрос: если я у себя поправлю как по ссылке ip_fw_pfil.c и пересоберу ядро, это поможет?

Essential
проходил мимо
Сообщения: 7
Зарегистрирован: 2010-10-14 14:30:25

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение Essential » 2010-10-14 23:04:14

Gamerman писал(а):В loader.conf ничего для этого не писали? В ядро опции хитрые для НАТа писали?
нет. кроме one_pass ничего не менялось.

ktulkhu
проходил мимо
Сообщения: 5
Зарегистрирован: 2010-10-15 5:24:09

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение ktulkhu » 2010-10-15 5:27:17

Подскажите, если не сложно, не могу победить, как настроить nat так, чтобы трафик, который приходит самому серверу, от имени которого происходит nat проходил к нему прозрачно?
Почему-то если я не указываю в конфигурации nat'a параметр deny_in, у меня, тем не менее, входящий трафик куда-то деется.

Что я имею в виду:
Есть внутренняя подсеть, внешний мир и сам сервер. Через сервер пробую настроить NAT для внутренней подсети. Сам нат чудесно работает, внутренняя подсеть видит внешний мир, но сам сервер внешнего мира не видит. Потому что весь входящий через внешний интерфейс трафик забегает в нат, и там гибнет по непонятной мне причине, если он адресован самому серверу. Например dns-запросы от сервера. Или пинги.
Вот моя конфигурация:

if_as="внешний интерфейс"
if_local="внутренний интерфейс"
local="192.168.1.0/24"

$ipfw -f flush

$ipfw add allow ip from any to any via lo


### NAT rules
$ipfw nat 1 config log ip $ip_as reset same_ports

$ipfw add nat 1 ip from 192.168.1.0/24 to any out via $if_as
$ipfw add nat 1 ip from any to $ip_as in via $if_as

### established connects allow
$ipfw add allow tcp from any to any established

### dns enable
$ipfw add allow udp from me to any 53
$ipfw add allow udp from any 53 to me

### allow me to any
$ipfw add allow ip from me to any

## allow icmp
$ipfw add allow icmp from any to any icmptypes 0,8,11

## allow localnet
$ipfw add allow ip from $local to any in via $if_local
$ipfw add allow ip from any to $local out via $if_local


При этом
fw# sysctl -a | grep net.inet.ip.fw.one_pass
net.inet.ip.fw.one_pass: 1


Если я правильно понимаю механизм, то должно происходить следующее:
Исходящий трафик от локальной подсети пронатится, исходящий трафик от самого сервера пройдет без изменений.
Входящий трафик от всего на свете адресованный внешнему ip-aдресу будет в любом случае заворачиваться в nat, где, не найдя соответствия в таблицах nat'a трафик должен передаться самому серверу, так как опция deny_in отключена.
На внешнем интерфейсе трафик по 53-му порту присутствует как исходящий так и входящий. Но вот самому серверу он не передается почему-то. В чем моя ошибка?

Аватара пользователя
terminus
майор
Сообщения: 2305
Зарегистрирован: 2007-10-29 11:27:35
Откуда: Рига

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение terminus » 2010-10-15 9:47:47

Сетевуха интеловская em?
поставьте в rc.conf в ее настройках -rxcsum -txcsum

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

ifconfig_em0="inet 1.2.3.4 netmask 255.255.255.0 -rxcsum -txcsum"
Модель: AST-PM-105/0044; Тип: Универсальный, ремонтный; Название: Терминус; Род повреждения: Распад функций; Выводы: Сдать на слом.

Гость
проходил мимо

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение Гость » 2010-10-15 11:32:18

terminus писал(а):Сетевуха интеловская em?
поставьте в rc.conf в ее настройках -rxcsum -txcsum

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

ifconfig_em0="inet 1.2.3.4 netmask 255.255.255.0 -rxcsum -txcsum"
Да, интеловская, как узнали? :)
Спасибо, попробую.
А можно поподробней, или ссылку, где почитать? Или хотя бы в кратце, куда копнуть, что это такое и почему?
Всмысле, почему проблема такая, и почему с интеловской сетевухой, и почему решается этими ключами?
С фрихой только начинаю разбираться, через это такие вопросы.

Я тут на сайте уже после своего вопроса нашел похожую проблему. Решилась эта проблема ребутом. У меня тоже решилась, но на мой взгляд это как-то не совсем правильно, чтобы настройки ната применять ребутом, а не перезагрузкой файерволла.. Тем более, когда натов может быть несколько.

Аватара пользователя
terminus
майор
Сообщения: 2305
Зарегистрирован: 2007-10-29 11:27:35
Откуда: Рига

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение terminus » 2010-10-15 11:43:38

Это интеловский проприетарный драйвер фигню какую-то делает. С другими сетевухами для ната выключать чексумы не надо.

На счнт перезагрузки - можно пытаться убивать экземпляр ната через

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

ipfw nat 1 delete
а потом создавать заново. Это уже нат глючит - им тоже в последнее время мало кто из разработчиков занимается :st:
Модель: AST-PM-105/0044; Тип: Универсальный, ремонтный; Название: Терминус; Род повреждения: Распад функций; Выводы: Сдать на слом.

Essential
проходил мимо
Сообщения: 7
Зарегистрирован: 2010-10-14 14:30:25

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение Essential » 2010-10-15 13:00:03

terminus писал(а):Это интеловский проприетарный драйвер фигню какую-то делает. С другими сетевухами для ната выключать чексумы не надо.

На счнт перезагрузки - можно пытаться убивать экземпляр ната через

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

ipfw nat 1 delete
а потом создавать заново. Это уже нат глючит - им тоже в последнее время мало кто из разработчиков занимается :st:
а чем занимаются??? По моему нат это одна из нужных функциий. Вряху на шлюзы ставят.

сорри за оффтоп, но был в шоке от бага в релизе 8.1 one_pass. Я думал меня начального пользователя врядли когда-то коснуцца такие баги. Элементарное то должно работать как часики, а вообще обидно за фряху. Сейчас линуксы в интернете начинают рулить. Ставят уже убунту, центоси и прочее...

Essential
проходил мимо
Сообщения: 7
Зарегистрирован: 2010-10-14 14:30:25

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение Essential » 2010-10-15 16:04:28

Kazak писал(а):
Тоесть либо натится все либо ничего, не понимаю почему не натится только таблица 3?
потому что у вас нету обратного ната....

nat 1 ip from table(3) to any via ExtIF
nat 1 ip from any to ExtIP via ExtIF

Ваша таблица натицца а вот ответ не натицца. Когда приходит ответ то у него адрес из интернета, но в правила указано натить только таблицу 3.

Гость
проходил мимо

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение Гость » 2010-10-18 13:03:47

а чем занимаются??? По моему нат это одна из нужных функциий. Вряху на шлюзы ставят.

сорри за оффтоп, но был в шоке от бага в релизе 8.1 one_pass. Я думал меня начального пользователя врядли когда-то коснуцца такие баги. Элементарное то должно работать как часики, а вообще обидно за фряху. Сейчас линуксы в интернете начинают рулить. Ставят уже убунту, центоси и прочее...
А что за баг с one_pass? Где посмотреть? В чем выражается?

mr.yaky
рядовой
Сообщения: 12
Зарегистрирован: 2010-07-25 19:12:16

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение mr.yaky » 2010-10-18 18:01:23

А что за баг с one_pass? Где посмотреть? В чем выражается?
несколько страниц назад об этом говорилось что там именно не работает!
http://forum.lissyara.su/viewtopic.php? ... ss#p258675

Кстати вопрос к terminus, как к сведущему в этой проблеме:

Стоит FreeBSD 8.1 , хочу настраивать динамический шейпер с приоритетами (IPFW - Dummynet - weight)
переменная net.inet.ip.fw.one_pass в моем положении будет вести себя также - то есть я не смогу выставить нужное мне значение?
Видел похожий баг касательно netgraph -- http://www.mail-archive.com/freebsd-bug ... 02125.html
так там уже есть патч для решения.
Если есть та же проблема с Dummynet , то есть ли уже лекарство от этого?
Обстоят ли так же дела в ветке 8.1-STABLE как с RELEASE?



мо

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

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение tired » 2010-10-19 2:37:14

относительно one_pass по ссылке данной выше написано как исправить его во freebsd 8.1
в файле /usr/src/sys/netinet/ipfw/ip_fw_pfil.c найдите строчку case IP_FW_NAT: и добавте после неё

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

 		if (V_fw_one_pass)
 			break;
 		goto again;
получится должно примерно так

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

	  case IP_FW_NAT:
 		if (V_fw_one_pass)
 			break;
 		goto again;
 
  	case IP_FW_REASS:
  		goto again;		/* continue with packet */
Затем пересоберите ядро после чего one_pass работает как положено.

Собственно у меня по этой теме вопрос, можно сделать так чтобы пакеты для которых есть запись в нат уходили в него, а для которых записи нет возвращались из ната назад в файерволл?

Гость
проходил мимо

Re: Подробное руководство по ipfw nat

Непрочитанное сообщение Гость » 2010-10-19 8:29:57

Собственно у меня по этой теме вопрос, можно сделать так чтобы пакеты для которых есть запись в нат уходили в него, а для которых записи нет возвращались из ната назад в файерволл?
так ведь сейчас так и работает?
если есть соответствие в таблице ната, то преобразуется согласно таблице, если нету то возвращается обратно в файрволл, если не стоит deny_in, или что вы имеете в виду?