гейт на базе FreeBSD 7.2+natd+ipfw, не работает

Проблемы установки, настройки и работы Правильной Операционной Системы

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Moraddin
проходил мимо

гейт на базе FreeBSD 7.2+natd+ipfw, не работает

Непрочитанное сообщение Moraddin » 2009-10-13 14:23:37

Добрый день.
Пытаюсь настроить гейт на базе FreeBSD 7.2+natd+ipfw
Делать пытался по следующим докам:
http://nightfly.habrahabr.ru/blog/70414/
http://www.sysadmin.md/freebsd-quick-in ... guide.html
http://www.lissyara.su/?id=1536
http://www.lissyara.su/?id=1127
Что было сделано:
1) пересобрано ядро с необходимыми опциями

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

ident MYROUTER
options IPFIREWALL
options IPFIREWALL_DEFAULT_TO_ACCEPT
options IPFIREWALL_FORWARD
options DUMMYNET
options IPDIVERT
options HZ=1000
options IPFIREWALL_VERBOSE
options IPFIREWALL_VERBOSE_LIMIT=100
2) в файл rc.conf добавлены опции

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

gateway_enable="YES"
ifconfig_em0="inet 10.2.30.3 netmask 255.255.254.0"
ifconfig_em1="inet 169.254.168.254 netmask 255.255.255.0"
defaultrouter="10.2.30.1"
firewall_enable="YES"
firewall_script="/etc/firewall.conf"
natd_enable="YES"
natd_interface="em0"
natd_flags="-same_ports"
где em0 - интерфейс, который смотрит во внешнюю сеть (там дальше интернет)
em1 - интерфейс, который смотрит в локалку
3) последняя версия файла firewall.conf

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

#!/bin/sh
FwCMD="/sbin/ipfw -q"
LanOut="em0"
LanIn="em1"
IpOut="10.2.30.3"
NetIn="169.254.168.0/24"

${FwCMD} -f flush

${FwCMD} add allow ip from any to any via lo0

${FwCMD} add divert natd ip from ${NetIn} to any out via ${LanOut}
${FwCMD} add divert natd ip from any to ${IpOut} in via ${LanOut}

${FwCMD} add allow tcp from any to any established
${FwCMD} add allow ip from ${IpOut} to any out xmit ${LanOut}

${FwCMD} add allow tcp from any to any via ${LanIn}
${FwCMD} add allow udp from any to any via ${LanIn}
${FwCMD} add allow icmp from any to any via ${LanIn}

${FwCMD} add allow ip from ${IpOut} to any out via ${LanOut}
${FwCMD} add allow ip from  any  to ${IpOut} in via ${LanOut}
${FwCMD} add allow ip from ${NetIn} to any in via ${LanIn}
${FwCMD} add allow ip from ${NetIn} to any out via ${LanOut}
${FwCMD} add allow ip from any to ${NetIn} in via ${LanOut}
${FwCMD} add allow ip from any to ${NetIn} out via ${LanIn}

${FwCMD} add deny ip from any to any
4) запускаю пинг с хоста на, например, яндекс, смотрю ipfw show

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

MSK-Gate01# ipfw show
00100    4    200 allow ip from any to any via lo0
00200    8    544 divert 8668 ip from 169.254.168.0/24 to any out via em0
00300    8    472 divert 8668 ip from any to 10.2.30.3 in via em0
00400  788  96544 allow tcp from any to any established
00500    8    544 allow ip from 10.2.30.3 to any out xmit em0
00600    1     52 allow tcp from any to any via em1
00700 1835 170467 allow udp from any to any via em1
00800   21   1396 allow icmp from any to any via em1
00900    0      0 allow ip from 10.2.30.3 to any out via em0
01000    0      0 allow ip from any to 10.2.30.3 in via em0
01100   26    756 allow ip from 169.254.168.0/24 to any in via em1
01200    0      0 allow ip from 169.254.168.0/24 to any out via em0
01300    8    472 allow ip from any to 169.254.168.0/24 in via em0
01400    0      0 allow ip from any to 169.254.168.0/24 out via em1
01500   21    612 deny ip from any to any
65535    5    503 allow ip from any to any
если не считать флуда по удп на внутреннем интерфейсе, и тупить логи, то 8 пингов прошлись по следующим правилам

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

00800   21   1396 allow icmp from any to any via em1
00200    8    544 divert 8668 ip from 169.254.168.0/24 to any out via em0
00500    8    544 allow ip from 10.2.30.3 to any out xmit em0
00300    8    472 divert 8668 ip from any to 10.2.30.3 in via em0
01300    8    472 allow ip from any to 169.254.168.0/24 in via em0
а вот правило

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

01400    0      0 allow ip from any to 169.254.168.0/24 out via em1
почему то не срабатывает и пакет с гейта на хост внутренней сети не выходит...
пробовал поставить firewall_type="OPEN", не работает... sysctrl пишет, что natd работает... пока жду советов, попытаюсь разобраться с tcpdump, но голова уже не варит...
честно говоря осталась только одна мысль, что виновата моя подсеть 169.254.168.0/24, потому что она в RFC в другом разделе...

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

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: гейт на базе FreeBSD 7.2+natd+ipfw, не работает

Непрочитанное сообщение paradox » 2009-10-13 14:31:03

ifconfig_em1="inet 169.254.168.254 netmask 255.255.255.0"
что это еще за сеть?
точнее я догадываюсь что это за сеть
наверное стоит руки оторвать тому кто назначал ей такие айпи адресса

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

Re: гейт на базе FreeBSD 7.2+natd+ipfw, не работает

Непрочитанное сообщение hizel » 2009-10-13 14:39:58

лучше 169.254.168.0/24 не использовать, оно немного для другого

но это не должно влиять на настройку, разбирать ваш фаервол лень :-)
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

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

Re: гейт на базе FreeBSD 7.2+natd+ipfw, не работает

Непрочитанное сообщение Moraddin » 2009-10-13 15:02:04

что это еще за сеть?
точнее я догадываюсь что это за сеть
наверное стоит руки оторвать тому кто назначал ей такие айпи адресса
без сомнения, очень ценное замечание. я не буду описывать свои причины, по которым я назначил именно эту сеть, но как в итоге это влияет на работу natd и ipfw, кроме того, что ключ natd -u нам никак не помогает..?
лучше 169.254.168.0/24 не использовать, оно немного для другого

но это не должно влиять на настройку, разбирать ваш фаервол лень :-)
да, я знаю для чего эта сеть, именно потому я ее и назначил
если вам лень разобрать фаервол (хотя я на 100% уверен, что не в конфиге фаервола дело, а в чем то другом), то значит вы просто хотите набить посткаунт? ;)

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: гейт на базе FreeBSD 7.2+natd+ipfw, не работает

Непрочитанное сообщение paradox » 2009-10-13 15:05:12

1) фаеры обычно на форумах никто не разбирает
трудоемко для мозгов
2) убейте весь ваш фаер и создайте два правила divert и pass all
и все будет работать

Kostyan
проходил мимо
Сообщения: 7
Зарегистрирован: 2009-04-02 10:17:04

Re: гейт на базе FreeBSD 7.2+natd+ipfw, не работает

Непрочитанное сообщение Kostyan » 2009-10-13 15:06:41

а так:

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

#!/bin/sh
FwCMD="/sbin/ipfw -q"
${FwCMD} -f flush
${FwCMD} add divert natd all from any to any via em1
${FwCMD} add allow all from any to any
работает?

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

Re: гейт на базе FreeBSD 7.2+natd+ipfw, не работает

Непрочитанное сообщение Moraddin » 2009-10-13 15:14:03

нет, не работает
почему divert на интерфейсе em1 ? это локальный интерфейс...
я, на всякий случай, поробовал так, но оно не работает...
чуть ранее я пробовал

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

#!/bin/sh
FwCMD="/sbin/ipfw -q"
${FwCMD} -f flush
${FwCMD} add divert natd all from any to any via em0
${FwCMD} add allow all from any to any
где em0 - внешний интерфейс... оно не работает, поэтому я и написал, что 100% уверен в том, что дело не в настройках фаервола...
1) фаеры обычно на форумах никто не разбирает
трудоемко для мозгов
2) убейте весь ваш фаер и создайте два правила divert и pass all
и все будет работать
1) там нечего пока разбирать, там кусок из статьи с этого форума, по которому разрешено всем все, просто разнесено по правилам, чтобы удобно было вести логи и смотреть статистику по правилам где что режется
2) как я написал выше, я создавал правила "диверт все" и "всем можно все"... оно не работает
у меня создавалось ощущение, что natd не работает вообще, пока я посмотрел логи и не увидел, что пакет целиком проходит весь необходимый путь, кроме последнего шага - он не выходит от гейта во внутреннюю сеть обратно... почему? не могу понять, за этим и обратился сюда

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: гейт на базе FreeBSD 7.2+natd+ipfw, не работает

Непрочитанное сообщение paradox » 2009-10-13 15:16:23

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

ps ax| grep natd

Kostyan
проходил мимо
Сообщения: 7
Зарегистрирован: 2009-04-02 10:17:04

Re: гейт на базе FreeBSD 7.2+natd+ipfw, не работает

Непрочитанное сообщение Kostyan » 2009-10-13 15:17:52

Тогда это что?:
Moraddin писал(а):
gateway_enable="YES"
ifconfig_em0="inet 10.2.30.3 netmask 255.255.254.0"
ifconfig_em1="inet 169.254.168.254 netmask 255.255.255.0"
defaultrouter="10.2.30.1"
firewall_enable="YES"
firewall_script="/etc/firewall.conf"
natd_enable="YES"
natd_interface="em0"
natd_flags="-same_ports"
где em0 - интерфейс, который смотрит во внешнюю сеть (там дальше интернет)
em1 - интерфейс, который смотрит в локалку
Последний раз редактировалось paradox 2009-10-13 15:20:05, всего редактировалось 1 раз.
Причина: тег code не понимает никаких тегов внутри себя - поэтому заменяйте его на quote если хотите поюзать теги внутри

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

Re: гейт на базе FreeBSD 7.2+natd+ipfw, не работает

Непрочитанное сообщение Moraddin » 2009-10-13 15:20:04

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

# ps ax  | grep natd
  598  ??  Ss     0:00.07 /sbin/natd -same_ports -n em0
г-н paradox, если вам не сложно, я думаю было бы несколько удобнее/быстрее какие то вопросы решить в режиме онлайн, моя ICQ - 169291368
Kostyan, я видимо что то не понимаю, но я не вижу противоречий в том, что я говорю... моя аська выше, если что

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: гейт на базе FreeBSD 7.2+natd+ipfw, не работает

Непрочитанное сообщение paradox » 2009-10-13 15:27:56

я консультациями по icq не занимаюсь
если голова у вас уже болит, отдохните и продолжим

начните с самого начала
1) настройте интернет на сервере
что бы с сервера все пинговалось итд
2) потом уже будете клиентам nat настраивать

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

Re: гейт на базе FreeBSD 7.2+natd+ipfw, не работает

Непрочитанное сообщение Moraddin » 2009-10-13 15:34:37

1) с сервера все пингуется, интернет работает
2) именно этим и занимаюсь... я понимаю, что простейшая настройка ната заключается в буквально 2 шагах: перекомпиляция ядра и 5 строчек в rc.conf

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

gateway_enable="YES"
firewall_enable="YES"
firewall_type="OPEN"
natd_enable="YES"
natd_interface="em0" #внешний интерфейс
почему то не работает... может быть какой то модуль ядра не догрузился (я не знаю какой и не знаю как проверить), может быть еще что то....

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: гейт на базе FreeBSD 7.2+natd+ipfw, не работает

Непрочитанное сообщение paradox » 2009-10-13 15:37:26

если с сервера все работает уже легче

natd умеет логировать все пакеты которые проходят через него man natd.conf
а еще natd нужно иногда килять и запускать снова если чтото крутиться справилами divert на natd порту

Аватара пользователя
schizoid
подполковник
Сообщения: 3228
Зарегистрирован: 2007-03-03 17:32:31
Откуда: Украина, Чернигов
Контактная информация:

Re: гейт на базе FreeBSD 7.2+natd+ipfw, не работает

Непрочитанное сообщение schizoid » 2009-10-13 17:39:03

дета соседняя ветка была с такой же проблемой.
ядерный взрыв...смертельно красиво...жаль, что не вечно...

reLax
лейтенант
Сообщения: 638
Зарегистрирован: 2007-04-08 5:50:16

Re: гейт на базе FreeBSD 7.2+natd+ipfw, не работает

Непрочитанное сообщение reLax » 2009-10-13 18:02:24

А зачем этот natd на 7-е ?

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

[-] options         IPDIVERT
[+] options         IPFIREWALL_NAT
[+] options         LIBALIAS

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

    ${fwcmd} nat 1 config if ${oif} log
    ${fwcmd} add nat 1 ip from ${inet}/24 to any
    ${fwcmd} add nat 1 ip from any to ${oip}
2 paradox
если с сервера все работает уже легче
Полагаю, сервера у него работает потому, что пакеты с внешнего интерфейса идут, на него же и приходят.

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: гейт на базе FreeBSD 7.2+natd+ipfw, не работает

Непрочитанное сообщение paradox » 2009-10-13 18:06:26

было предположение что у него вообще ничего не работает) инета нет
а все за нат уцепились

reLax
лейтенант
Сообщения: 638
Зарегистрирован: 2007-04-08 5:50:16

Re: гейт на базе FreeBSD 7.2+natd+ipfw, не работает

Непрочитанное сообщение reLax » 2009-10-13 18:43:39

paradox писал(а):было предположение что у него вообще ничего не работает) инета нет
а все за нат уцепились
:smile: Вообще, я помню, когда только появилась 7-а, я установил ее на новый шлюз, один в один прописал опции ядра, касаемые ipfw, конфиг фаерволла (соответственно переписав адреса, ифейсы и тд), rc.conf со старого шлюза. И вот хрен у меня что заработало. Думать я долго не стал, добавил опции KERNEL NAT, соответствующие правила в конфиг и все встало на места свои :)

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

Re: гейт на базе FreeBSD 7.2+natd+ipfw, не работает

Непрочитанное сообщение Moraddin » 2009-10-13 20:53:26

было предположение что у него вообще ничего не работает) инета нет
paradox, чтобы таких предположений не было, достаточно было прочитать первый пост, где в конце написано
пакет от клиента выходит --> попадает на внешний интерфейс гейта --> перебрасывается на внутренний интерфейс гейта --> отправляется в инет с внешнего интерфейса гейта --> приходит ответ от сервера в инета на внешний интерфейс гейта --> пакет перебрасывается с внешнего интерфейса гейта на внутренний --<>-- и вот тут косяк, гейт не отдает пакет назад клиенту
те на внешнем интерфейсе все пучком работает, инет есть
да, кстати, на внутреннем интерфейсе тоже все крутится... если из локалки пинговать гейт, он пингуется
А зачем этот natd на 7-е
а что, он там совсем не работает? как любому начинающему, хотелось взять наиболее задокументированное и распространенное решение natd+ipfw+squid...
дета соседняя ветка была с такой же проблемой.
не совсем с такой же, с похожей... там тоже ничего путного не подсказали...

paradox
проходил мимо
Сообщения: 11620
Зарегистрирован: 2008-02-21 18:15:41

Re: гейт на базе FreeBSD 7.2+natd+ipfw, не работает

Непрочитанное сообщение paradox » 2009-10-13 20:59:23

у меня мозг не резиновый что бы судения с операцией влечет обрабатывать))
не совсем с такой же, с похожей... там тоже ничего путного не подсказали...
там посоветовали сделать с ipnat и все заработало
может вы не то читали?

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

Re: гейт на базе FreeBSD 7.2+natd+ipfw, не работает

Непрочитанное сообщение Moraddin » 2009-10-15 15:50:36

разобрались, все нормально, все работает
было выполнено 2 проверки:
1) на соседней машине собрана, сконфигурирована, подключена FreeBSD 6.4, гейт все равно не заработал, те виновата не FreeBSD 7.2
2) в качестве адресного пространства локальной сети сменили 169.254.0.0/16 на 192.168.0.0/16 - все заработало

знакомый нашел в ядре запрет на роутинг пакетов из автоконфигуреной локальной сети
/* RFC 3927 2.7: Do not forward datagrams for 169.254.0.0/16. */
if (IN_LINKLOCAL(ntohl(ip->ip_dst.s_addr))) {
ipstat.ips_cantforward++;
m_freem(m);
return;
}

я получил +1 к опыту общения с сетями, теперь придется немного перерисовывать карту сети и менять адресацию...

ЗЫ получается в данном конкретном случае не важно какую реализацию ната я бы использовал: natd, ipnat, ipfw nat, pf nat - все равно бы ничего не заработало, тк запрет в ядре
всем спасибо