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

Настройка сетевых служб, маршрутизации, фаерволлов. Проблемы с сетевым оборудованием.
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
pimlab
прапорщик
Сообщения: 477
Зарегистрирован: 2007-10-09 11:31:03

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

Непрочитанное сообщение pimlab » 2013-04-01 21:11:25

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

pass in quick on $int_if inet proto { tcp udp } from 192.168.0.138 port 34052 to any 
a tak ?!

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

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

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

Непрочитанное сообщение gumeniuc » 2013-04-01 21:58:24

это уж точно лишнее:

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

pass in quick on $ext_if inet proto { tcp udp } from any to 192.168.0.138 port 34052
Да и вообще, так делать в корне неправильно.
Пример:
Есть некий торрент. Список адресов трекеров для него:

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

http://inferno.demonoid.me:3412/announce
Т.е. по этому адресу он обратится для получения списка пиров. А порт 34052 - для входящих соединений. Каким образом начнётся загрузка если нет списка пиров ? Поэтому когда открываете полный доступ - всё прекрасно начинает работать.
Да шо ему сделается...

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

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

Непрочитанное сообщение mr. brightside » 2013-04-02 13:53:26

gumeniuc писал(а):это уж точно лишнее:

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

pass in quick on $ext_if inet proto { tcp udp } from any to 192.168.0.138 port 34052
Да и вообще, так делать в корне неправильно.
Пример:
Есть некий торрент. Список адресов трекеров для него:

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

http://inferno.demonoid.me:3412/announce
Т.е. по этому адресу он обратится для получения списка пиров. А порт 34052 - для входящих соединений. Каким образом начнётся загрузка если нет списка пиров ? Поэтому когда открываете полный доступ - всё прекрасно начинает работать.
нее... Это выглядит неудобно

Во-первых для каждого трекера надо будет задавать такое правило.... Список будет увеличиваться и это надо будет держать в голове всегда, - что нужно добавить правило.

Я же хочу добавить некий "универсал". Настроил порты и разрешение и все работает с любым трекером.

Логику своих действий объясняю так:

1. Выбираем порт для редиректа и делаем, собсно, этот редирект:

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

rdr pass on $ext_if proto { tcp udp } from any to $gate_ext port 34052 -> 192.168.0.138 port 34052
2. Добавляем этот порт в список разрешенных, чтобы торрент мог вылезать наружу через этот порт:

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

#user_ports = "{ ...34052...}"
pass in on $int_if inet proto tcp from $lan_net to any port $user_ports flags S/SA keep state
3. Разрешаем входящий траффик из инета на наш комп (своеобразный маппинг комп-порт, ведь одному компу с торрентом соответствует один комп с портом открытым и он всегда разный):

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

pass in quick on $ext_if inet proto { tcp udp } from any to 192.168.0.138 port 34052
Я так и не понял, почему это неправильно? Объясните пожалуйста...

И куда плюнуть, чтобы заработало?
pimlab писал(а):

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

pass in quick on $int_if inet proto { tcp udp } from 192.168.0.138 port 34052 to any 
a tak ?!
неа, не помогло...
Только FreeBSD, только хардкор

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

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

Непрочитанное сообщение mr. brightside » 2013-04-02 14:17:27

Надо сказать, что есть небольшой прогресс.

Я изменил правила исходящих соединений на интерфейсах шлюза с этих:

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

pass out on $ext_if from $ext_if to any keep state
pass out on $int_if from $int_if to any keep state
на вот такие:

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

pass out on $ext_if from any to any keep state
pass out on $int_if from any to any keep state
И оставил правила по прежнему такими:

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

rdr pass on $ext_if proto { tcp udp } from any to $gate_ext port 34052 -> 192.168.0.138 port 34052
...
pass in on $int_if inet proto tcp from $lan_net to any port $user_ports flags S/SA keep state
...
pass in quick on $ext_if inet proto { tcp udp } from any to 192.168.0.138 port 34052
Таким образом, при добавлении торрента я некоторое время наблюдаю надпись "подключение к пирам", а спустя некоторое время он подключается и начинает качать - правильно ли я понимаю, что это время он тратит на поиск открытого порта?
Только FreeBSD, только хардкор

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

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

Непрочитанное сообщение pimlab » 2013-04-02 20:49:13

utorrent - насколько я помню качает и без открытого внешнего порта... соответственно он никаких портов не ищет - работает с тем что прописано , активно юзая UDP.

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

rdr pass on $ext_if proto { tcp udp } from any to $gate_ext port 34052 -> 192.168.0.138 port 34052
...
pass in on $int_if inet proto tcp from $lan_net to any port $user_ports flags S/SA keep state
...
pass in quick on $ext_if inet proto { tcp udp } from any to 192.168.0.138 port 34052
в первом вы уже разрешили , последнее в таком случае не надо

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

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

Непрочитанное сообщение mr. brightside » 2013-04-02 20:59:13

pimlab писал(а):utorrent - насколько я помню качает и без открытого внешнего порта... соответственно он никаких портов не ищет - работает с тем что прописано , активно юзая UDP.

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

rdr pass on $ext_if proto { tcp udp } from any to $gate_ext port 34052 -> 192.168.0.138 port 34052
...
pass in on $int_if inet proto tcp from $lan_net to any port $user_ports flags S/SA keep state
...
pass in quick on $ext_if inet proto { tcp udp } from any to 192.168.0.138 port 34052
в первом вы уже разрешили , последнее в таком случае не надо
Да, работает. И так и так работает.

Только очень долго пиры ищет - это нормально?
Только FreeBSD, только хардкор

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

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

Непрочитанное сообщение pimlab » 2013-04-02 21:16:26

utorrent тест порта проходит ?
пиры - так ведь смотря что и где качать, попробуйте что то очень популярное.
у меня качает моментально , но у меня transmission прямо на сервере...
правила окончательные покажите, чего накрутили ....

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

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

Непрочитанное сообщение mr. brightside » 2013-04-02 21:22:16

pimlab писал(а):utorrent тест порта проходит ?
пиры - так ведь смотря что и где качать, попробуйте что то очень популярное.
у меня качает моментально , но у меня transmission прямо на сервере...
правила окончательные покажите, чего накрутили ....
Нет, не моментально - 10-15 минут и начинает качать. Даже очень популярное.
+ чем больше ставлю в очередь, тем больше времени занимает поиск пиров.

Utorrent выводит зеленую галочку и проходит тест порта, качает хорошо, но задержка в поиска пира меня смущает. Хотя, по большому счету всё равно.

Показываю начинаю с раздела NAT/RDR:

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

  #NAT'им всех на внешний интерфейс
nat on $ext_if from $lan_net -> ($ext_if)
   #пробрасываем www
rdr on $ext_if proto tcp from any to $gate_ext port 80 -> 192.168.0.138 port 80
   #пробрасываем sftp
rdr on $ext_if proto tcp from any to $gate_ext port 8022 -> $sftp port 8022
   #пробрасываем smtp
rdr on $ext_if proto tcp from any to $gate_ext port 25 -> $mail port 25
   #пробрасываем pop3
rdr on $ext_if proto tcp from any to $gate_ext port 110 -> $mail port 110
   #Торренты
rdr pass on $ext_if proto { tcp udp } from any to $gate_ext port 34052 -> 192.168.0.138 port 34052

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

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

nat-anchor "ftp-proxy/*"
rdr-anchor "ftp-proxy/*"
rdr pass on $ext_if proto tcp from any to any port 21 -> 127.0.0.1 port 8021

   # блокируем всё, если только нет явного разрешения для обратного
block log all
   # Блокируем тех, кто лезет на внешний интерфейс с частными адресами
block drop in quick on $ext_if from $private_nets to any
block drop out quick on $ext_if from any to $private_nets
   #Спуфинг
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 any to any keep state
pass out on $int_if from any to any keep state

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

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

anchor "ftp-proxy/*"

   #Блокируем все серваки и WiFi, чтобы потом разрешить отдельные порты для каждого ограничения
block in on $int_if from $dc_core to any
block in on $int_if from $dc_uran to any
block in on $int_if from $mail to any
block in on $int_if from $WiFi1 to any
block in on $int_if from $WiFi2 to any
   #ДНС разрешен всем без исключения
pass quick on $ext_if inet proto tcp from any to $gate_ext port 53 keep state
pass quick on $ext_if inet proto udp from any to $gate_ext port 53 keep state
pass quick on $int_if inet proto tcp from any to $gate port 53 keep state
pass quick on $int_if inet proto udp from any to $gate port 53 keep state
  # Разрешаем с WiFi выходить только по определенным портам:
pass in on $int_if inet proto tcp from $WiFi1 to any port $wifi_ports flags S/SA keep state
pass in on $int_if inet proto tcp from $WiFi2 to any port $wifi_ports 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_one to any port 123 flags S/SA keep state
pass in on $int_if proto tcp from $dc_two to any port 123 flags S/SA keep state

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

   #входящий ssh на gate на внешнем и внутреннем интерфейсе
pass in log on $int_if inet proto tcp from any to $gate port 2222 flags S/SA keep state
pass in log on $ext_if inet proto tcp from any to $ext_if port 2222 flags S/SA keep state
   #входящий smtp на внутренний почтовик
pass in on $ext_if inet proto tcp from any to $mail port 25 flags S/SA keep state
   #входящий www на веб-сервер
pass in on $ext_if inet proto tcp from any to 192.168.0.138 port 80 flags S/SA keep state
   #входящий sftp на внутренний sftp-сервер
pass in on $ext_if inet proto tcp from any to $sftp port 4022 flags S/SA keep state
   #входящий pop3 на внутренний почтовик для возможности подключаться к pop3-серверу извне
pass in on $ext_if inet proto tcp from any to $mail port 110 flags S/SA keep state
   #Торренты для юзера
pass in quick on $ext_if inet proto { tcp udp } from any to 192.168.0.138 port 34052
Только FreeBSD, только хардкор

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

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

Непрочитанное сообщение pimlab » 2013-04-02 21:37:16

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

pass in quick on $int_if inet proto { tcp udp } from 192.168.0.138 port 34052 to any 
не заметил что то этого правила

и вообще чтоб видеть что сработало , что нет pfctl -sr -vvvv |less