Freebsd 10. PF+NAT+IPSEC обрывается RDP

Настройка сетевых служб, маршрутизации, фаерволлов. Проблемы с сетевым оборудованием.
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Ramzes III
проходил мимо
Сообщения: 4
Зарегистрирован: 2014-03-13 15:23:25

Freebsd 10. PF+NAT+IPSEC обрывается RDP

Непрочитанное сообщение Ramzes III » 2014-03-13 15:43:49

Доброго времени суток!

Гуру, очень прошу помощи в сложившейся ситуации.
Для начала опишу ситуацию в общем:
Имеется шлюз на FreeBSD 10, циска 1941, на которой поднят ipsec в другой город.
На циске два интерфейса. Один смотрит в сторону фри (30 сеть, "серые" адреса), второй в сторону провайдера и имеет "белый адрес".
На фре три сетевых интерфейса:
em0 - в сторону провайдера ("белый" адрес, статика)
em1 - в локалку (NAT средствами PF)
rl0 - в сторону циски.

На шлюзе прописаны статические маршруты для сетей, которые доступны через ipsec на циске.

Работает все, за исключением одного.
Клиенты из моей локалки подключаются по rdp к удаленному серверу, который доступен через ipsec.
Подключение происходит, все ок, НО! через 10-15 секунд PF на шлюзе начинает банить пакеты, которые идут от пользователя локалки (через em1) к удаленому серверу на порт 3349.
Банится до тех пор, пока у клиента не разрывается подключение, потом клиент пересоединяется и опять 10 - 15 секунд все работает... и так по кругу.

Полное разрешение любого трафика в pf проблему не решает.
Помогает только set skip on { em1 rl0 } или отключение pf.
Повторюсь, что соединение первоначально происходит, т.е. правила pf не при чем.

Ребят, очень надо разобраться с этой проблемой, все конфиги и выводы нужных команд предоставлю.
Откликнитесь пожалуйста.
Заранее спасибо огромное!

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

Ramzes III
проходил мимо
Сообщения: 4
Зарегистрирован: 2014-03-13 15:23:25

Re: Freebsd 10. PF+NAT+IPSEC обрывается RDP

Непрочитанное сообщение Ramzes III » 2014-03-14 14:48:41

Что-то тихо все... :(
Выкладываю конфиги.

/etc/rc.conf

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

ifconfig_em0="inet 11.22.33.44 netmask 255.255.255.248"
ifconfig_em1="inet 10.10.0.254 netmask 255.255.255.0"
ifconfig_rl0="inet 172.20.0.2 netmask 255.255.255.252"

gateway_enable="YES"
defaultrouter="55.66.77.88"
static_routes="r1 r2 r3"
route_r1="-net 192.168.10.0/24 172.20.0.1"
route_r2="-net 10.20.0.0/24 172.20.0.1"
route_r3="-net 192.168.0/24 172.20.0.1"

gateway_enable="YES"
pf_enable="YES"
pf_rules="/etc/pf.conf"
pflog_enable="YES"
pflog_logfile="/var/log/pf.log"
/etc/pf.conf (сейчас очень упрощенный конфиг для тестирования):

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

ext_if="em0"
int_if="em1"
vpn_if="rl0"
firewall="10.10.0.254"
vpn_networks="{ 192.168.10.0/24, 10.20.0.0/24, 192.168.0.0/24 }"
non_route_networks = "{ 127.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12, 10.0.0.0/8 }"
allowed_icmp_types="{ echoreq, unreach }"

table <clients> { 10.10.0.0/24 }

set block-policy drop
set skip on { lo0 rl0 }

scrub in all

nat on $ext_if from $int_if:network to any -> ($ext_if)
nat-anchor "ftp-proxy/*"

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

block log all
block in log quick on $ext_if from $non_route_networks to any
block out log quick on $ext_if from any to $non_route_networks

pass out quick on $int_if from $firewall to any
pass out quick on $ext_if from $ext_if to any

anchor "ftp-proxy/*"
pass in log quick on $int_if from any to 10.20.0.11 flags S/SA
pass log on $int_if
pass in on $int_if proto tcp from <clients> to $firewall port 22
pass in quick on $int_if inet proto icmp from {$firewall <clients>} to any icmp-type $allowed_icmp_types keep state

Ramzes III
проходил мимо
Сообщения: 4
Зарегистрирован: 2014-03-13 15:23:25

Re: Freebsd 10. PF+NAT+IPSEC обрывается RDP

Непрочитанное сообщение Ramzes III » 2014-03-14 15:01:58

Почему-то не могу редактировать свое сообщение, поэтому суть проблемы опишу в новом.
Итак, клиент из сети 10.10.0.0/24 подключается по rdp к удаленному серверу 10.20.0.11
Подключение происходит, но секунд через 20 оно разрывается, тут же автоматом переустанавливается и так по кругу. С сервера клиента не выкидывает, просто передергивается подключение.

Лог pf (примерно в этот момент)

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

00:00:04.153837 rule 14..16777216/0(match): pass in on em1: 10.10.0.113.54420 > 10.20.0.11.3389: Flags [S], seq 2529337339, win 8192, options [mss 1460,nop,wscale 8,nop,nop,sackOK], length 0
00:00:07.395214 rule 0..16777216/0(match): block in on em1: 10.10.0.113.54420 > 10.20.0.11.3389: Flags [P.], seq 2529382694:2529382732, ack 1205610431, win 255, length 38
00:00:00.302569 rule 0..16777216/0(match): block in on em1: 10.10.0.113.54420 > 10.20.0.11.3389: Flags [.], ack 1, win 255, options [nop,nop,sack 1 {4294967256:1}], length 0
00:00:00.205625 rule 0..16777216/0(match): block in on em1: 10.10.0.113.54420 > 10.20.0.11.3389: Flags [P.], seq 0:38, ack 1, win 255, length 38
00:00:00.392516 rule 0..16777216/0(match): block in on em1: 10.10.0.113.54420 > 10.20.0.11.3389: Flags [.], ack 1, win 255, options [nop,nop,sack 1 {4294967256:1}], length 0
00:00:00.630857 rule 0..16777216/0(match): block in on em1: 10.10.0.113.54420 > 10.20.0.11.3389: Flags [P.], seq 0:38, ack 1, win 255, length 38
00:00:00.572777 rule 0..16777216/0(match): block in on em1: 10.10.0.113.54420 > 10.20.0.11.3389: Flags [.], ack 1, win 255, options [nop,nop,sack 1 {4294967256:1}], length 0
00:00:01.466371 rule 0..16777216/0(match): block in on em1: 10.10.0.113.54420 > 10.20.0.11.3389: Flags [P.], seq 0:38, ack 1, win 255, length 38
00:00:00.931800 rule 0..16777216/0(match): block in on em1: 10.10.0.113.54420 > 10.20.0.11.3389: Flags [.], ack 1, win 255, options [nop,nop,sack 1 {4294967256:1}], length 0
Не могу разобраться почему так. Если клиент соединяется к 10.20.0.11 напрямую (без шлюза на фре, а через циску, где ipsec) - то все работает прекрасно.
Т.е. виноват pf.
Голову уже сломал. Прошу помощи.

Ramzes III
проходил мимо
Сообщения: 4
Зарегистрирован: 2014-03-13 15:23:25

Re: Freebsd 10. PF+NAT+IPSEC обрывается RDP

Непрочитанное сообщение Ramzes III » 2014-03-25 8:18:15

Разобрался сам.
Оказывается в pf есть баг, суть которого заключается в том, что если он моиторит интерфейсы, через которые идет ipsec, то после передачи через канал 128кб информации начинается вот такая котовасия с блокированием трафика.
Как это забороть - я не знаю.
Проблему решил перейдя на ipfw+ядерный нат.
Теперь все работает нормально.

Аватара пользователя
Zedik
сержант
Сообщения: 283
Зарегистрирован: 2007-01-20 22:30:57
Откуда: 127.0.0.1

Re: Freebsd 10. PF+NAT+IPSEC обрывается RDP

Непрочитанное сообщение Zedik » 2014-06-12 8:39:27

У меня схожая проблема нарисовалась, только я подключаюсь по правилу rdr через внешний адрес шлюза на комп в локалке. Rdp рвется через промежутки времени.
Благодаря манипуляциям с правилами заметил, что проблема возникает если к правилу nat/rdr добавлять pass. Если убираем и даем разрешение уже в блоке правил фильтрации, то проблема вроде как исчезает.