Локалка не NAT'ится средствами pf

Настройка сетевых служб, маршрутизации, фаерволлов. Проблемы с сетевым оборудованием.
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
mr. brightside
сержант
Сообщения: 260
Зарегистрирован: 2010-04-17 17:32:39
Откуда: Saint-Petersburg

Локалка не NAT'ится средствами pf

Непрочитанное сообщение mr. brightside » 2013-03-21 9:37:02

Добрый день, уважаемые!

Собираю шлюзак на pf. можно сказать, что впервые. Задачи преследовал следующие:

Инет <-> роутер (NAT + DNS ) -> юзеры в локалке по соотв. портам
<--------> почтовик + ntp + ftp + www (по соотв. портам)
<--------> серв с БД инфы по клиентам. (по одному порту)
x--------x КД (запрет выхода в инет)
<--------> локальным WiFi разрешить только сёрфить инет и не попадать на локальные КД (тоже набор портов)

Получилось вот что:

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

#----------------------------------------------------------------------------------------------
#                                    1. MACROS
#----------------------------------------------------------------------------------------------

   #Внешний интерфейс
ext_if="fxp1"

   #Внутренний интерфейс
int_if="rl0"

   #Внутренняя сеть. Все пользователи
lan_net="192.168.0.0/24"

   #Внутренние WiFi
WiFi1 = “192.168.0.50/32”
WiFi2=”192.168.0.60/32”

   #"Сеть" этого компьютера
int_lan="127.0.0.0/24"

   #Частные адреса
private_nets= "{ 127.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8, 169.254.0.0/16, 192.0.2.0/24, 0.0.0.0/8, 240.0.0.0/4 }"

   #Серваки
dc_1 = "192.168.0.1/32"
dc_2 = "192.168.0.2/32"
mail = "192.168.0.4/32"
www = "192.168.0.4/32"
sftp = "192.168.0.4/32"
ntp = "192.168.0.4/32"
gate = "192.168.0.91/32"

   #порты пользователей
user_ports = { 80, 443, 25, 110, 21, 8080}
wifi_ports = { 80, 443, 21, 53 }

#----------------------------------------------------------------------------------------------
#                                      2.  TABLES
#----------------------------------------------------------------------------------------------

   #Таблица со списком "плохих" ip-адресов. Их блокируем прямо на роутере.
table <blacklist> persist file "/etc/blacklist"

#----------------------------------------------------------------------------------------------
#                                      3. OPTIONS
#----------------------------------------------------------------------------------------------

   #Возвращаем пакеты, а не сбрасываем
set block-policy return

   #Собираем статистику с внешнего интерфейса
set loginterface $ext_if

   #Пропускаем проверку на loopback interface
set skip on lo0

   # Макс. кол-во записей в пуле отвечающем за нормализацию трафика (scrub)
   # Макс. кол-во вхождений в пул отвечающий за состояние таблицы состояний соединений (keep state)
set limit { frags 100000, states 100000 }

    # Устанавливаем тип оптимизации
set optimization normal

#----------------------------------------------------------------------------------------------
#                                     4. TRAFFIC NORMALIZATION
#----------------------------------------------------------------------------------------------

   #Полностью собираем пакет перед отправкой
scrub in all

#----------------------------------------------------------------------------------------------
#                                  5. QUEUEING
#----------------------------------------------------------------------------------------------

#Пока без очередей

#----------------------------------------------------------------------------------------------
#                                  6. NAT
#----------------------------------------------------------------------------------------------

   #Nat’им всех на внешний интерфейс
nat on $ext_if inet from !($ext_if) -> ($ext_if:0)

   #пробрасываем www
rdr on $ext_if proto tcp from any to 44.18.206.17 port 80 -> $ www port 80

   #пробрасываем sftp
rdr on $ext_if proto tcp from any to 44.18.206.17 port 6060 -> $ sftp port 6060

   #пробрасываемsmtp
rdr on $ext_if proto tcp from any to 44.18.206.17 port 25 -> $mail port 25

   #пробрасываем pop3
rdr on $ext_if proto tcp from any to 44.18.206.17 port 110 -> $mail port 110

   #пробрасываем информационную БД
rdr on $ext_if proto tcp from any to 44.18.206.17 port 4061 -> $dc_2 port 4061

#----------------------------------------------------------------------------------------------
#                                  7. PACKET FILTERING
#----------------------------------------------------------------------------------------------

######  ------------  COMMON   ---------------  ########

   # блокируем всё, если только нет явного разрешения для обратного
block log all

   # Блокируем тех, кто лезет на внешний интерфейс с частными адресами
block drop in quick on $ext_if from $private_nets to any

   #Спуфинг
antispoof quick for { lo0 $int_if $ext_if }

   #Не проверяем пакеты с этого хоста (127.0.0.1)
pass quick from $int_lan

   #разрешаем Ping на внешнем и внутреннем интерфейсе
pass in on $ext_if inet proto icmp to ($ext_if) icmp-type echoreq keep state
pass in on $int_if inet proto icmp to ($int_id) icmp-type echoreq keep state

   #Разрешаем все исходящие на внешнем и внутреннем интерфейсе gate
pass out on $ext_if from $ext_if to any keep state
pass out on $int_if from $int_if to any keep state

#####  ------------  OUTGOING TO INET  ---------------  ######

   #разрешаем доступ из офисной сети во внешний мир портам, перечисленным в переменных user_ports
   #{ 80, 443, 25, 110, 21, 8080 }
pass in on $int_if inet proto tcp from $lan_net to any port $user_ports flags S/SA keep state

  # Разрешаем с WiFi выходить только по определенным портам:
pass in on $int_if inet proto tcp from $WiFi1 to any port $wifi_ports flags S/SA keep state

  # и то же время запрещаем доступ на КД с WiFi точек. WiFi находятся $lan_net, поэтому их надо
  # поставить после разрешений, чтобы заблокировать выход.
block drop in quick on $int_if from $WiFi1 to $dc_1
block drop in quick on $int_if from $WiFi1 to $dc_2
block drop in quick on $int_if from $WiFi2 to $dc_1
block drop in quick on $int_if from $WiFi2 to $dc_2

   # Разрешаем DNS внутренним КД, WiFi, и почтовику для обращения на gate. На шлюзе вертится ДНС,
   # который уже полезет дальше за ответами
pass in on $int_if proto udp from $dc_1 to $gate port 53 flags S/SA keep state
pass in on $int_if proto udp from $dc_2 to $gate port 53 flags S/SA keep state
pass in on $int_if proto udp from $WiFi1 to $gate port 53 flags S/SA keep state
pass in on $int_if proto udp from $WiFi2 to $gate port 53 flags S/SA keep state
pass in on $int_if proto udp from $mail to $gate port 53 flags S/SA keep state

   # Выпускаем почтовик - smtp
pass in on $int_if proto tcp from $ mail to any port 25 flags S/SA keep state

   # Выпускаем сервер времени на почтовике - ntp
pass in on $int_if proto tcp from $ntp to any port 123 flags S/SA keep state

   # Выпускаем сервер времени на обоих КД
pass in on $int_if proto tcp from $dc_1 to any port 123 flags S/SA keep state
pass in on $int_if proto tcp from $dc_2 to any port 123 flags S/SA keep state

   # Выпускаем фтп-сервер - sftp
pass in on $int_if proto tcp from $sftp to any port 6060 flags S/SA keep state

   # Выпускаем веб-сервер – www
pass in on $int_if proto tcp from $sftp to any port 80 flags S/SA keep state

   # Выпускаем КД с информационной БД
pass in on $int_if proto tcp from $dc_2 to any port 4051 flags S/SA keep state

   # POP3-сервер  -его не надо выпускать, потому что он из инета ничего не тащит.
#pass in on $int_if proto tcp from $sftp to any port 110 flags S/SA keep state


#####  ------------  INCOMING FROM INET  ---------------  ######

   #входящий ssh на gate
pass in log on $ext_if inet proto tcp from any to $ext_ip port 22222 flags S/SA synproxy state

   #входящий smtp на внутренний почтовик
pass in on $ext_if inet proto tcp from any to $mail 25 flags S/SA synproxy state

   #входящий sftp на внутренний sftp-сервер
pass in on $ext_if inet proto tcp from any to $sftp port 6060 flags S/SA synproxy state

   #входящий www на веб-сервер
pass in on $ext_if inet proto tcp from any to $www 80 flags S/SA synproxy state

   #входящий ntp на ntp-сервер нам не нужен, потому что мы не работаем, как ntp-сервер
#pass in on $ext_if inet proto tcp from any to $ntp port 123 flags S/SA synproxy state

   #входящий dns-траффик на gate c интернетчиков
pass in on $ext_if inet proto tcp from any to $gate port 53 flags S/SA synproxy state

   #входящий pop3 на внутренний почтовик
pass in on $ext_if inet proto tcp from any to $mail port 110 flags S/SA synproxy state

   #входящий траффик для БД на внутренний КД
pass in on $ext_if inet proto tcp from any to $dc_2 port 4051 flags S/SA synproxy state
Итог:

Ответы от ДНСа на роутере клиентам возвращаются, а маршрутов до айпишников нет.

С самого шлюза инет и route to host есть. Из этого делаю вывод, что проблема где то на уровне фильтрации пакетов.

Кто подскажет, тому спасибон =)
Только FreeBSD, только хардкор

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

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

Re: Локалка не NAT'ится средствами pf

Непрочитанное сообщение mak_v_ » 2013-03-21 10:29:24

Вы начните "от противного" - оставьте только нат, а потом уже фильтры "накручивайте".
А то получается "я тут наляпал, а вы разберитесь"

Bayerische
капитан
Сообщения: 1820
Зарегистрирован: 2010-12-25 20:41:50
Откуда: Хлебная столица

Re: Локалка не NAT'ится средствами pf

Непрочитанное сообщение Bayerische » 2013-03-21 10:33:15

mak_v_ +100
Так и надо делать. Простейший конфиг усложнять, пока что-то не заест. Его и показывать.

Аватара пользователя
mr. brightside
сержант
Сообщения: 260
Зарегистрирован: 2010-04-17 17:32:39
Откуда: Saint-Petersburg

Re: Локалка не NAT'ится средствами pf

Непрочитанное сообщение mr. brightside » 2013-03-21 10:40:23

mak_v_ писал(а):Вы начните "от противного" - оставьте только нат, а потом уже фильтры "накручивайте".
А то получается "я тут наляпал, а вы разберитесь"
Ну почему же, нет, не хочу, чтобы так это воспринималось

Судя по статистике из локалки пакет отсылается, но возвращающийся пакет блокируется на внешнем интерфейсе. Разрешение портов на внешнем интерфейсе (например, того же 80го) ничего не дало и странички не грузятся.

Если же прописать вот это:

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

pass in on $int_if from $lan_net to any
То всё работает.

Лично я сомневаюсь в правилах из разделов OUTGOING TO INET и INCOMING FROM INET

Кроме того, я уже делал так - отключал и включал правила по очереди, как то не помогло.

Возможно, мне из инета на внешний интерфейс нужно написать такое правило:

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

pass in on $ext_if inet proto { tcp,udp } from any to any port $gate_ports flags S/SA keep state
а в переменной $gate_ports перечислить все используемые порты?

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

Аватара пользователя
gumeniuc
ст. сержант
Сообщения: 343
Зарегистрирован: 2009-11-08 15:46:05
Откуда: md
Контактная информация:

Re: Локалка не NAT'ится средствами pf

Непрочитанное сообщение gumeniuc » 2013-03-21 13:03:09

А выпускать трафик в локалку планировалось ?
Да шо ему сделается...

Аватара пользователя
mr. brightside
сержант
Сообщения: 260
Зарегистрирован: 2010-04-17 17:32:39
Откуда: Saint-Petersburg

Re: Локалка не NAT'ится средствами pf

Непрочитанное сообщение mr. brightside » 2013-03-21 20:02:49

gumeniuc писал(а):А выпускать трафик в локалку планировалось ?
лажанул.

gateway_enable забыл + поправить пропуск пингов.

работает.
Только FreeBSD, только хардкор

Аватара пользователя
mr. brightside
сержант
Сообщения: 260
Зарегистрирован: 2010-04-17 17:32:39
Откуда: Saint-Petersburg

Re: Локалка не NAT'ится средствами pf

Непрочитанное сообщение mr. brightside » 2013-03-25 17:13:07

mr. brightside писал(а):
gumeniuc писал(а):А выпускать трафик в локалку планировалось ?
лажанул.

gateway_enable забыл + поправить пропуск пингов.

работает.
поспешил.

Во внешний мир работает, а снаружи на мой веб-сервер достучаться не могут.

максимально упростил правила и получилось вот это:

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

nat on $ext_if from $lan_net -> ($ext_if)
rdr on $ext_if proto tcp from any to 44.44.222.444 port 80 -> 192.168.0.4 port 80

block log all
antispoof quick for { lo0 $int_if $ext_if }

#127.0.0.1
pass quick from $int_lan
pass quick on lo0 all

#разрешаем Ping на внешнем и внутреннем интерфейсе
pass in on $ext_if inet proto icmp all icmp-type echoreq
pass in on $int_if inet proto icmp all icmp-type echoreq

#Разрешаем все исходящие на внешнем и внутреннем интерфейсе gate
pass out on $ext_if from $ext_if to any keep state
pass out on $int_if from $int_if to any keep state

#user_ports = "{ 80, 443, 8080, 21, 25, 110 }"
pass in on $int_if inet proto tcp from $lan_net to any port $user_ports flags S/SA keep state

#Разрешаем ДНС
pass quick on $ext_if proto tcp from any to any port 53 keep state
pass quick on $ext_if proto udp from any to any port 53 keep state
pass quick on $int_if proto tcp from any to any port 53 keep state
pass quick on $int_if proto udp from any to any port 53 keep state

#Выпускаем веб-сервер - www
pass in on $int_if proto tcp from 192.168.0.4 to any port 80 flags S/SA keep state

#входящий www на веб-сервер
pass in on $ext_if inet proto tcp from any to 192.168.0.4 port 80 flags S/SA synproxy state
т.е. явно за работу веб-сервера отвечают три правила:

- редирект:

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

rdr on $ext_if proto tcp from any to 44.44.222.444 port 80 -> 192.168.0.4 port 80
- траффик самого веб-сервера:

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

pass in on $int_if proto tcp from 192.168.0.4 to any port 80 flags S/SA keep state
- траффик из инета:

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

pass in on $ext_if inet proto tcp from any to 192.168.0.4 port 80 flags S/SA synproxy state
Согласно вот этой ссылке, я сделал всё правильно, но не работает... Натолкните, пожалуйста, кто-нибудь на мысль
Только FreeBSD, только хардкор

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

Re: Локалка не NAT'ится средствами pf

Непрочитанное сообщение mak_v_ » 2013-03-25 17:28:40

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

    pass in  on $ext_if proto tcp from any to {self 192.168.0.4} port 80 flags S/SA keep state

Аватара пользователя
mr. brightside
сержант
Сообщения: 260
Зарегистрирован: 2010-04-17 17:32:39
Откуда: Saint-Petersburg

Re: Локалка не NAT'ится средствами pf

Непрочитанное сообщение mr. brightside » 2013-03-25 17:34:43

mak_v_ писал(а):

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

    pass in  on $ext_if proto tcp from any to {self 192.168.0.4} port 80 flags S/SA keep state
Не помогло

Пробовал вроде как такое же:

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

pass in on $ext_if inet proto tcp from any to $ext_if port 80 flags S/SA keep state
pass in on $ext_if inet proto tcp from any to $www port 80 flags S/SA keep state
pass out on $int_if inet proto tcp from any to $www port 80 flags S/SA keep state
возвращает:

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

No route to host
сам шлюз пингуется великолепно. Из локалки подключаюсь по разрешенным портам также великолепно...

Попробовал открыть всё через pass all - получил таймаут:

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

rdr on $ext_if proto tcp from any to 44.44.222.444 port 80 -> $www port 80
...
...
...
pass all
Только FreeBSD, только хардкор

Аватара пользователя
mr. brightside
сержант
Сообщения: 260
Зарегистрирован: 2010-04-17 17:32:39
Откуда: Saint-Petersburg

Re: Локалка не NAT'ится средствами pf

Непрочитанное сообщение mr. brightside » 2013-03-26 15:31:49

хм, интересно

поставил до ужаса простые правила:

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

ext_if="rl1"
int_if="rl0"
int_lan="192.168.0.0/24"
loc_lan="127.0.0.0/24"
scrub in all
nat on $ext_if from $int_lan -> ($ext_if)

#site
rdr proto tcp from any to 44.44.222.444 port 80 -> 192.168.0.4 port 80

pass quick on $int_if
pass quick from $int_lan
pass quick from $loc_lan
pass out quick flags S/SA keep state
pass in on $ext_if inet proto icmp to ($ext_if) icmp-type echoreq keep state
pass quick on $ext_if proto tcp from any to any port 53 keep state
pass quick on $int_if proto tcp from any to any port 53 keep state
pass quick on $ext_if proto udp from any to any port 53 keep state
pass quick on $int_if proto udp from any to any port 53 keep state
pass in all
pass out all
и всё равно извне на веб-сервер не попасть....
Только FreeBSD, только хардкор

Аватара пользователя
gumeniuc
ст. сержант
Сообщения: 343
Зарегистрирован: 2009-11-08 15:46:05
Откуда: md
Контактная информация:

Re: Локалка не NAT'ится средствами pf

Непрочитанное сообщение gumeniuc » 2013-03-26 18:10:53

Чтобы прокинуть порт достаточно

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

rdr     on $ext_if inet proto tcp from any            to $ext_if:0   port http  -> 192.168.0.4
pass in on $ext_if inet proto tcp from any            to 192.168.0.4 port http
Да шо ему сделается...

Аватара пользователя
gumeniuc
ст. сержант
Сообщения: 343
Зарегистрирован: 2009-11-08 15:46:05
Откуда: md
Контактная информация:

Re: Локалка не NAT'ится средствами pf

Непрочитанное сообщение gumeniuc » 2013-03-26 18:27:45

А насчёт правил, так можно и оставить только 2 последние строки.

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

net.inet.ip.forwarding
что показывает ?
Да шо ему сделается...

Аватара пользователя
mr. brightside
сержант
Сообщения: 260
Зарегистрирован: 2010-04-17 17:32:39
Откуда: Saint-Petersburg

Re: Локалка не NAT'ится средствами pf

Непрочитанное сообщение mr. brightside » 2013-03-26 23:00:24

gumeniuc писал(а):Чтобы прокинуть порт достаточно

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

rdr     on $ext_if inet proto tcp from any            to $ext_if:0   port http  -> 192.168.0.4
pass in on $ext_if inet proto tcp from any            to 192.168.0.4 port http
я тоже был в этом абсолютно уверен, пока не обнаружил, что сие не пашет.

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

net.inet.ip.forwarding
с этим порядок. По идеет параметр "gateway_enable" ставит единицу и в моём случае это так:

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

[root@ns1 /etc]# sysctl net.inet.ip.forwarding
net.inet.ip.forwarding: 1
т.е. маршрутизация работает.

А вот статистика НАТа при попытке подключиться на 80ый порт внутреннего веб сервера:

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

all tcp 192.168.0.4:80 (44.44.222.444:80) <- 176.241.99.174:19302       CLOSED:SYN_SENT
all tcp 176.241.99.174:19302 -> 192.168.0.4:80       SYN_SENT:CLOSED
Почему это он CLOSED?
Только FreeBSD, только хардкор

Аватара пользователя
gumeniuc
ст. сержант
Сообщения: 343
Зарегистрирован: 2009-11-08 15:46:05
Откуда: md
Контактная информация:

Re: Локалка не NAT'ится средствами pf

Непрочитанное сообщение gumeniuc » 2013-03-27 10:54:37

Предлагаю следующее:

1. поправить правила ната на

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

rdr     on $ext_if inet proto tcp from any            to $ext_if:0   port http  -> 192.168.0.4
2. ip/ifconfig веб сервера в студию. С него вообще есть доступ на внешку ?
Да шо ему сделается...

Аватара пользователя
mr. brightside
сержант
Сообщения: 260
Зарегистрирован: 2010-04-17 17:32:39
Откуда: Saint-Petersburg

Re: Локалка не NAT'ится средствами pf

Непрочитанное сообщение mr. brightside » 2013-03-27 11:32:17

gumeniuc писал(а): С него вообще есть доступ на внешку ?
безусловно.

Например сейчас здесь я сижу через этот шлюз. Причем фильтрация портов во внешний мир работает. Статистика с интерфейсов ясно показывает также, что он выпускает нужные порты и блочит всё остальное.
gumeniuc писал(а):

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

rdr     on $ext_if inet proto tcp from any            to $ext_if:0   port http  -> 192.168.0.4
Не помогло.

Также не помогло явное указание порта на который кидать:

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

rdr     on $ext_if inet proto tcp from any            to $ext_if:0   port http  -> 192.168.0.4 port 80
Можно было бы грешить на веб сервер, но через другой канал работает.

При этом, если взять кабель канала, что я сейчас настраиваю и воткнуть в шлюз на первом канале - будет работать проброс.

На шлюзе основного канала также установлен pf. Беру его рабочий конфиг, перебиваю внешние айпишники, копирую на новый шлюз, ребутаю pf и!... не работает. При этом этот же конфиг на первом шлюзе с этим тестовым каналом работает.

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

[root@ns1 /etc]# ifconfig
rl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=3808<VLAN_MTU,WOL_UCAST,WOL_MCAST,WOL_MAGIC>
        ether 00:c0:26:30:ef:a0
        inet 192.168.0.91 netmask 0xffffff00 broadcast 192.168.0.255
        inet6 fe80::2c0:26ff:fe30:efa0%rl0 prefixlen 64 scopeid 0x6
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
rl1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=3808<VLAN_MTU,WOL_UCAST,WOL_MCAST,WOL_MAGIC>
        ether 00:11:6b:94:f6:4d
        inet 44.44.222.444 netmask 0xfffffff8 broadcast 44.44.222.451
        inet6 fe80::211:6bff:fe94:f64d%rl1 prefixlen 64 scopeid 0x7
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
        media: Ethernet autoselect (100baseTX <full-duplex>)
        status: active
plip0: flags=8810<POINTOPOINT,SIMPLEX,MULTICAST> metric 0 mtu 1500
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
pflog0: flags=141<UP,RUNNING,PROMISC> metric 0 mtu 33200
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
pfsync0: flags=0<> metric 0 mtu 1500
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
        syncpeer: 0.0.0.0 maxupd: 128
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
        options=3<RXCSUM,TXCSUM>
        inet6 ::1 prefixlen 128
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0xb
        inet 127.0.0.1 netmask 0xff000000
        nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
Шлюз сейчас подключен в тот же свитч, что и почтовик. Пингуют друг друга замечательно. Телнетятся друг к другу тоже. SSH-атся также прекрасно. Но извне по-прежнему CLOSED.

P.S. Сам шлюз извне пингуется, по SSh извне зайти на сам шлюз можно.
Только FreeBSD, только хардкор

Аватара пользователя
gumeniuc
ст. сержант
Сообщения: 343
Зарегистрирован: 2009-11-08 15:46:05
Откуда: md
Контактная информация:

Re: Локалка не NAT'ится средствами pf

Непрочитанное сообщение gumeniuc » 2013-03-27 11:53:15

Это конфиг шлюза, насколько я понимаю. А ip(if)config веб сервера можно посмотреть ?

Хм.. помнится мне в последний раз были правила

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

pass in all
pass out all
сейчас что-то изменилось ? откуда фильтрация портов появилась?
Да шо ему сделается...

Аватара пользователя
mr. brightside
сержант
Сообщения: 260
Зарегистрирован: 2010-04-17 17:32:39
Откуда: Saint-Petersburg

Re: Локалка не NAT'ится средствами pf

Непрочитанное сообщение mr. brightside » 2013-03-27 12:02:46

gumeniuc писал(а): сейчас что-то изменилось ? откуда фильтрация портов появилась?
а, так я не заметив изменений поставил прежний конфиг с фильтрацией =)

Намёк понял, сейчас воткну пропускающий всё и пепепишу редирект.

Только вот у меня тут мысль появилась:

Веб сервер настроен на использование 1го шлюза, который сейчас основной.

Пакет прилетает через второй - что я сейчас настраиваю.

Вижу, как это должно работать:

Из мира приходит пакет (предположим 8.8.8.8 -> 80.*.*.*), роутер его днатит в локальный адрес (8.8.8.8 -> 192.168.0.4), вебсервер получает запрос от 8.8.8.8 и шлет ответ обратно на роутер (дефолт-роут), чтобы тот снатил пакетик обратно на 8.8.8.8

Но у меня веб сервер шлёт, вероятно, на другой шлюз.

на моём ноуте есть веб-сервер, сейчас прокину порты туда и посмотрим. Если не поможет, то воткнут простые правила, о которых в начале этого поста говорил
Только FreeBSD, только хардкор

Аватара пользователя
gumeniuc
ст. сержант
Сообщения: 343
Зарегистрирован: 2009-11-08 15:46:05
Откуда: md
Контактная информация:

Re: Локалка не NAT'ится средствами pf

Непрочитанное сообщение gumeniuc » 2013-03-27 12:14:33

так конечно веб сервер отвечает через default gateway, который ему указан. И если это не 192.168.0.91, то никакого ответа не будет.
Последний раз редактировалось gumeniuc 2013-03-27 12:16:16, всего редактировалось 1 раз.
Да шо ему сделается...

Аватара пользователя
mr. brightside
сержант
Сообщения: 260
Зарегистрирован: 2010-04-17 17:32:39
Откуда: Saint-Petersburg

Re: Локалка не NAT'ится средствами pf

Непрочитанное сообщение mr. brightside » 2013-03-27 12:16:15

mr. brightside писал(а):
gumeniuc писал(а): сейчас что-то изменилось ? откуда фильтрация портов появилась?
а, так я не заметив изменений поставил прежний конфиг с фильтрацией =)

Намёк понял, сейчас воткну пропускающий всё и пепепишу редирект.

Только вот у меня тут мысль появилась:

Веб сервер настроен на использование 1го шлюза, который сейчас основной.

Пакет прилетает через второй - что я сейчас настраиваю.

Вижу, как это должно работать:

Из мира приходит пакет (предположим 8.8.8.8 -> 80.*.*.*), роутер его днатит в локальный адрес (8.8.8.8 -> 192.168.0.4), вебсервер получает запрос от 8.8.8.8 и шлет ответ обратно на роутер (дефолт-роут), чтобы тот снатил пакетик обратно на 8.8.8.8

Но у меня веб сервер шлёт, вероятно, на другой шлюз.

на моём ноуте есть веб-сервер, сейчас прокину порты туда и посмотрим. Если не поможет, то воткнут простые правила, о которых в начале этого поста говорил
Лажанул второй раз при настройке.

Всё работает, всё пробрасывается. Я почему то не подумал про дефолт рут от веб-сервера из локалки, который отсылает пакет не через тот шлюз, через который его получает =)

gumeniuc, спасибо за помощь и поддержку =)

Продолжу настраивать, выкину новые проблемы, если они появятся.
Только FreeBSD, только хардкор

Аватара пользователя
mr. brightside
сержант
Сообщения: 260
Зарегистрирован: 2010-04-17 17:32:39
Откуда: Saint-Petersburg

Re: Локалка не NAT'ится средствами pf

Непрочитанное сообщение mr. brightside » 2013-03-27 12:16:52

gumeniuc писал(а):так конечно веб сервер отвечает через default gateway, который ему указан. И если это не 192.168.0.91, то никакого ответа не будет.
да =)

почему то спотыкаюсь на идиотизмах... :no:
Только FreeBSD, только хардкор

pimlab
прапорщик
Сообщения: 483
Зарегистрирован: 2007-10-09 11:31:03

Re: Локалка не NAT'ится средствами pf

Непрочитанное сообщение pimlab » 2013-03-27 12:19:21

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

ext_if="rl1"
int_if="rl0"
int_lan="192.168.0.0/24"
loc_lan="127.0.0.0/24"
scrub in all
nat on $ext_if from $int_lan -> ($ext_if)

#site !!!!!!!!!!!!!!

rdr pass on ($ext_if)  proto tcp from any to ($ext_if) port 80 -> 192.168.0.4 port 80



pass quick on $int_if
pass quick from $int_lan
pass quick from $loc_lan
pass out quick flags S/SA keep state
pass in on $ext_if inet proto icmp to ($ext_if) icmp-type echoreq keep state
pass quick on $ext_if proto tcp from any to any port 53 keep state
pass quick on $int_if proto tcp from any to any port 53 keep state
pass quick on $ext_if proto udp from any to any port 53 keep state
pass quick on $int_if proto udp from any to any port 53 keep state
pass in all
pass out all

Аватара пользователя
gumeniuc
ст. сержант
Сообщения: 343
Зарегистрирован: 2009-11-08 15:46:05
Откуда: md
Контактная информация:

Re: Локалка не NAT'ится средствами pf

Непрочитанное сообщение gumeniuc » 2013-03-27 12:24:22

mr. brightside писал(а):почему то спотыкаюсь на идиотизмах... :no:
обычно такое бывает когда торопишься
Да шо ему сделается...

Аватара пользователя
mr. brightside
сержант
Сообщения: 260
Зарегистрирован: 2010-04-17 17:32:39
Откуда: Saint-Petersburg

Re: Локалка не NAT'ится средствами pf

Непрочитанное сообщение mr. brightside » 2013-04-01 15:58:48

mr. brightside писал(а): Продолжу настраивать, выкину новые проблемы, если они появятся.
И они появились.

Споткнулся на торрентах.

Хочу разрешить торренты только определенным людям. Решил для начала настроить хотя бы для одной машины - а дальше уж по аналогии

Выбрал произвольный порт - 34052, указал его в настройках utorrent. Также ограничил максимальную скорость отдачи/приёма в 500 КБ/с.

Полез в pf.

Прописал:

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

...
rdr pass on $ext_if proto { tcp udp } from any to $gate_ext port 34052 -> 192.168.0.138 port 34052
...
pass in quick on $int_if inet proto { tcp udp } from 192.168.0.138 to any port 34052
pass in quick on $ext_if inet proto { tcp udp } from any to 192.168.0.138 port 34052
pass out quick on $int_if inet proto { tcp udp } from any to 192.168.0.138 port 34052
...
По нулям. Торрент показывает, что соединение заблокировано.

Если же добавить такое правило:

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

pass quick from 192.168.0.138
То торренты начинают работать, но вылетает скайп и перестаёт работать браузер. Короче говоря соединение с инетом теряется, хотя торрент ограничен в 500 КБ/с, как я уже сказал.

Подскажите кто-нибудь в очередной раз, а я буду безмерно благодарен :-D
Только FreeBSD, только хардкор

pimlab
прапорщик
Сообщения: 483
Зарегистрирован: 2007-10-09 11:31:03

Re: Локалка не NAT'ится средствами pf

Непрочитанное сообщение pimlab » 2013-04-01 17:40:05

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

pass in quick on $int_if inet proto { tcp udp } from 192.168.0.138 to any port 34052
а тут разве верно ?
я бы с первого правила (rdr) pass убрал бы , чтоб далее шло по правилам , а не вылетало на выход

Аватара пользователя
mr. brightside
сержант
Сообщения: 260
Зарегистрирован: 2010-04-17 17:32:39
Откуда: Saint-Petersburg

Re: Локалка не NAT'ится средствами pf

Непрочитанное сообщение mr. brightside » 2013-04-01 18:23:22

pimlab писал(а):

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

pass in quick on $int_if inet proto { tcp udp } from 192.168.0.138 to any port 34052
а тут разве верно ?
я бы с первого правила (rdr) pass убрал бы , чтоб далее шло по правилам , а не вылетало на выход
ну, я выпускаю торрент, чтобы он начал "стягивать" пакеты.

Торрент настроил на исп-е этого порта - 34052.

Пробовал без указания quick (что конечно выглядит не очень логично, ведь это значит пропуст остальных правил), но все равно не работает
Только FreeBSD, только хардкор