FreeBSD 9 + ipfw + ipfw nat

Настройка сетевых служб, маршрутизации, фаерволлов. Проблемы с сетевым оборудованием.
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Alekc
проходил мимо
Сообщения: 6
Зарегистрирован: 2013-09-25 12:07:21

FreeBSD 9 + ipfw + ipfw nat

Непрочитанное сообщение Alekc » 2013-09-25 12:33:47

Добрый день.

Пытаюсь разобраться в ipfw nat. Схема такая: есть сервер FreeBSD с IPFW, есть три сети. Внутренняя - int0, внешняя - ext0 и изолированная sub0. Требуется настроить чтобы пакеты между сетями int0 и sub0 роутились, а из сети int0 в сеть ext0 - NATились. sub0 в ext0 соответственно доступа иметь не должна. Но затык возникает уже на этапе настройки ната...

соответственно настройки:

/etc/rc.conf

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

ifconfig_em0_name="ext0"
ifconfig_ext0="SYNCDHCP -rxcsum -txcsum -tso"
ifconfig_em1_name="int0"
ifconfig_int0="inet 192.168.36.254 netmask 255.255.255.0"
ifconfig_em2_name="sub0"
ifconfig_sub0="inet 192.168.52.254 netmask 255.255.255.128"

gateway_enable="YES"
firewall_enable="YES"
firewall_nat_enable="YES"
#firewall_nat_interface="ext0"
firewall_logging="YES"
firewall_type="/etc/firewall"
/etc/firewall

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

# Правила для локальной сети
add 1010 allow all from any to any via int0.
add 1020 allow all from any to any via sub0.

# Правила для роутера
add 1520 allow udp from me to any ntp out via ext0 keep-state
add 1530 allow tcp from me to any out via ext0 setup keep-state uid root

# Доступ к ДНС и ДХЦП
add 2010 allow tcp from any to 192.168.212.2 53 out via ext0 setup keep-state
add 2020 allow udp from any to 192.168.212.2 53 out via ext0 keep-state
add 2030 allow tcp from any to 192.168.212.3 53 out via ext0 setup keep-state
add 2040 allow udp from any to 192.168.212.3 53 out via ext0 keep-state

# SSH и пинги из внешней сети
add 3010 allow log tcp from any to me ssh in recv ext0 keep-state
add 3020 allow log icmp from any to me via ext0 keep-state

# Настройка NAT
nat 1 config log if ext0 reset same_ports deny_in
add 10000 nat 1 ip from 192.168.36.0/24 to any out xmit ext0
add 10010 nat 1 ip from any to 192.168.36.0/24 in recv ext0

#add 15000 allow all from any to any
# Запретим все что не разрешено и в журнал
add 20000 deny all from any to any
one.pass = 1

При этом при пинге с машины 192.168.36.50 пакеты уходят на роутер, натятся во внешнюю подсеть, доходят до адресата, возвращаются на роутер и там пропадают (смотрел tcpdump'ом на ext0 и int0). Правило 10010 не отрабатывает ни разу. Если включить правило 15000, то ничего не меняется.

Кто-нибудь может подсказать, что и где я делаю не так?..

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

Аватара пользователя
skeletor
майор
Сообщения: 2486
Зарегистрирован: 2007-11-16 18:22:04
Откуда: Kiev
Контактная информация:

Re: FreeBSD 9 + ipfw + ipfw nat

Непрочитанное сообщение skeletor » 2013-09-25 12:47:23

потому что должно быть так:

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

add 10010 nat 1 ip from any to ${EXT_IP} in recv ext0
"Винда съела дрова и резет здесь не фурычит."
"Все говорят, что у меня /dev/hands криво и я всё делаю через /dev/ass. А у меня этих фалов вообще нет!"

Alekc
проходил мимо
Сообщения: 6
Зарегистрирован: 2013-09-25 12:07:21

Re: FreeBSD 9 + ipfw + ipfw nat

Непрочитанное сообщение Alekc » 2013-09-25 12:57:21

Спасибо! Теперь работает.
Увы, нигде так и не смог найти описания команды add nat :(

Тогда в команде 10000 под "to any" понимается внешний адрес в интернете?..

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

add 10000 nat 1 ip from 192.168.36.0/24 to any out xmit ext0

snorlov
подполковник
Сообщения: 3702
Зарегистрирован: 2008-09-04 11:51:25
Откуда: Санкт-Петербург

Re: FreeBSD 9 + ipfw + ipfw nat

Непрочитанное сообщение snorlov » 2013-09-25 13:11:19

Alekc писал(а):Спасибо! Теперь работает.
Увы, нигде так и не смог найти описания команды add nat :(
Тогда в команде 10000 под "to any" понимается внешний адрес в интернете?..

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

add 10000 nat 1 ip from 192.168.36.0/24 to any out xmit ext0
Любой ...

lazhu
сержант
Сообщения: 209
Зарегистрирован: 2013-08-10 14:28:38
Контактная информация:

Re: FreeBSD 9 + ipfw + ipfw nat

Непрочитанное сообщение lazhu » 2013-09-25 15:03:20

А зачем вообще нужно правило 10010? Оно тут лишнее, при установленном соединении входящие пакеты будут натиться по записи в таблице.
И, кстати, dhcp слушает на 67 порту.
Последний раз редактировалось lazhu 2013-09-25 15:07:16, всего редактировалось 1 раз.

Alekc
проходил мимо
Сообщения: 6
Зарегистрирован: 2013-09-25 12:07:21

Re: FreeBSD 9 + ipfw + ipfw nat

Непрочитанное сообщение Alekc » 2013-09-25 15:06:43

lazhu писал(а):А зачем вообще нужно правило 10010? Оно тут лишнее, при установленном соединении входящие пакеты будут натиться по записи в таблице.
Я так понимаю, что именно это правило и заставляет приходящие пакеты натиться по таблице, т.к. без него не работает.

lazhu
сержант
Сообщения: 209
Зарегистрирован: 2013-08-10 14:28:38
Контактная информация:

Re: FreeBSD 9 + ipfw + ipfw nat

Непрочитанное сообщение lazhu » 2013-09-25 15:09:52

В 10000 правиле вместо out xmit поставьте via

Alekc
проходил мимо
Сообщения: 6
Зарегистрирован: 2013-09-25 12:07:21

Re: FreeBSD 9 + ipfw + ipfw nat

Непрочитанное сообщение Alekc » 2013-09-25 15:15:33

lazhu писал(а):В 10000 правиле вместо out xmit поставьте via
Ничего не поменялось.
У меня же 10000 правило не from any to any, которое работает в обе стороны, а from {net} to any, а оно в обратную сторону не работает.

lazhu
сержант
Сообщения: 209
Зарегистрирован: 2013-08-10 14:28:38
Контактная информация:

Re: FreeBSD 9 + ipfw + ipfw nat

Непрочитанное сообщение lazhu » 2013-09-25 15:23:08

Упс, извиняюсь, не обратил внимания. Тогда в обратку должно работать from any to me

Alekc
проходил мимо
Сообщения: 6
Зарегистрирован: 2013-09-25 12:07:21

Re: FreeBSD 9 + ipfw + ipfw nat

Непрочитанное сообщение Alekc » 2013-09-25 16:15:33

lazhu писал(а):Упс, извиняюсь, не обратил внимания. Тогда в обратку должно работать from any to me
Ага, так работает, спасибо.

Alekc
проходил мимо
Сообщения: 6
Зарегистрирован: 2013-09-25 12:07:21

Re: FreeBSD 9 + ipfw + ipfw nat

Непрочитанное сообщение Alekc » 2013-09-27 9:25:04

В итоге получилось что-то такое:

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

# Правила для локальной сети
add 1000 allow all from 192.168.36.0/24 to any via int0 
add 1010 allow all from any to 192.168.36.0/24 via int0
add 1020 allow all from 192.168.36.0/24 to 192.168.52.128/25 recv int0 keep-state

# Доступ к ДНС и ДХЦП, 'from me' - потому что NAT.
add 2000 allow tcp from me to any domain via ext0 setup keep-state
add 2010 allow log udp from me to any domain via ext0 keep-state

# Правила для роутера
add 2510 allow udp from me to any ntp out via ext0 keep-state
add 2520 allow tcp from me to any out via ext0 setup keep-state uid root

# SSH на роутер из внешней сети
add 2600 allow tcp from any to me ssh in recv ext0 setup keep-state
add 2610 allow tcp from me ssh to any out xmit ext0 keep-state
add 2620 allow icmp from me to any keep-state

# Настройка NAT
nat 1 config log if ext0 reset same_ports
nat 2 config log same_ports redirect_addr 192.168.36.50 192.168.3.245

# Маппинг серверного IP
add 8000 nat 2 log ip from 192.168.36.50 to any out xmit ext0
add 8010 nat 2 log ip from any to 192.168.3.245 in recv ext0

add 10000 nat 1 log ip from 192.168.36.0/24 to any out xmit ext0
add 10010 nat 1 log ip from any to me recv ext0

# Разрешим входящие пинги роутера из внешней сети
add 10020 allow icmp from any to me in recv ext0

# Запретим все что не разрешено
add 20000 deny all from any to any
Требуемая схема взаимодействия между сетями: ext0 <- NAT -> int0 ---> sub0

Есть тут какие-нибудь явные или неявные косяки?..