Страница 1 из 1

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

Добавлено: 2009-10-13 14:23:37
Moraddin
Добрый день.
Пытаюсь настроить гейт на базе 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 в другом разделе...

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

Добавлено: 2009-10-13 14:31:03
paradox
ifconfig_em1="inet 169.254.168.254 netmask 255.255.255.0"
что это еще за сеть?
точнее я догадываюсь что это за сеть
наверное стоит руки оторвать тому кто назначал ей такие айпи адресса

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

Добавлено: 2009-10-13 14:39:58
hizel
лучше 169.254.168.0/24 не использовать, оно немного для другого

но это не должно влиять на настройку, разбирать ваш фаервол лень :-)

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

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

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

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

Добавлено: 2009-10-13 15:05:12
paradox
1) фаеры обычно на форумах никто не разбирает
трудоемко для мозгов
2) убейте весь ваш фаер и создайте два правила divert и pass all
и все будет работать

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

Добавлено: 2009-10-13 15:06:41
Kostyan
а так:

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

#!/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
работает?

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

Добавлено: 2009-10-13 15:14:03
Moraddin
нет, не работает
почему 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 не работает вообще, пока я посмотрел логи и не увидел, что пакет целиком проходит весь необходимый путь, кроме последнего шага - он не выходит от гейта во внутреннюю сеть обратно... почему? не могу понять, за этим и обратился сюда

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

Добавлено: 2009-10-13 15:16:23
paradox

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

ps ax| grep natd

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

Добавлено: 2009-10-13 15:17:52
Kostyan
Тогда это что?:
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 - интерфейс, который смотрит в локалку

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

Добавлено: 2009-10-13 15:20:04
Moraddin

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

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

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

Добавлено: 2009-10-13 15:27:56
paradox
я консультациями по icq не занимаюсь
если голова у вас уже болит, отдохните и продолжим

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

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

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

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

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

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

Добавлено: 2009-10-13 15:37:26
paradox
если с сервера все работает уже легче

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

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

Добавлено: 2009-10-13 17:39:03
schizoid
дета соседняя ветка была с такой же проблемой.

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

Добавлено: 2009-10-13 18:02:24
reLax
А зачем этот 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
если с сервера все работает уже легче
Полагаю, сервера у него работает потому, что пакеты с внешнего интерфейса идут, на него же и приходят.

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

Добавлено: 2009-10-13 18:06:26
paradox
было предположение что у него вообще ничего не работает) инета нет
а все за нат уцепились

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

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

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

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

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

Добавлено: 2009-10-13 20:59:23
paradox
у меня мозг не резиновый что бы судения с операцией влечет обрабатывать))
не совсем с такой же, с похожей... там тоже ничего путного не подсказали...
там посоветовали сделать с ipnat и все заработало
может вы не то читали?

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

Добавлено: 2009-10-15 15:50:36
Moraddin
разобрались, все нормально, все работает
было выполнено 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 - все равно бы ничего не заработало, тк запрет в ядре
всем спасибо