URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 83112
[ Назад ]

Исходное сообщение
"Policy based routing UDP портов"

Отправлено dm , 28-Ноя-08 19:01 
Доброго времени суток ! :)

Настроиваю pbr на FreeBSD порт 1194 TCP/UDP, поднимаю pbr на PF. TCP порт работает как надо,т.е. пакет приходит на один из внешних интерфейсов ($IF1,$IF2) порт 1194 и с него же уходит. Но по UDP происходит следующее, пакет приходит на интефейс, но уходит не согласна правилу в pf'e, а уходит через default route минуя файрвол.

Я возможно чегото не понимаю с UDP, почему так происходит? И возможна ли работа pbr UDP портов. Проверял с ipfw происходит абсолютно тоже самое.


Как решил эту проблему, в 7.1 появилась поддержка нескольких таблиц маршрутизации и приходится запускать несколько сервисов для разных интерфейсов, все работает, но хотелось бы разобраться с PBR и понять в чем проблема.

мои настройки:
pf rules:
pass in quick on $IF1 reply-to ($IF1 $GW1) proto {tcp udp} from <internet> to $ADDR1 port 1194
pass in quick on $IF2 reply-to ($IF2 $GW2) proto {tcp udp} from <internet> to $ADDR2 port 1194

default route:
#route get default
route to: default
destination: default
mask: default
gateway: localhost
interface: lo0
uname -a
#uname -a
FreeBSD myhost 7.1-PRERELEASE FreeBSD 7.1-PRERELEASE #4: Wed Nov 19 16:01:16 MSK 2008 root@myhost:/usr/src/sys/i386/compile/myhost i386


Содержание

Сообщения в этом обсуждении
"Policy based routing UDP портов"
Отправлено PavelR , 29-Ноя-08 08:42 

я правильно понимаю, что сервис запущен один, он открывает один сокет, а входящих интерфейсов (ip-адресов сервиса) несколько ?

В линухе я на эту тему (кстати, с этим же сервисом) сделал так:

сервис слушает один айпи (+ порт :) ). Доступен по нескольким айпи-адресам.

если интерфейс/адрес не основной,т.е. сервис на нем не ждет соединений, то входящий пакет проходит сквозь DNAT + маркировку  маркером в таблице соединений.

Исходящий от сервиса пакет проходит сквозь восстановление маркера соединения, обратный DNAT, а потом маршрутизируется туда куда надо, в зависимости от значения маркера.

Если нужно просто обеспечить привязку к сетевому интерфейсу, то, видимо, надо использовать только маркировку без DNAT.


PS: не забывайте про tcpdump.


"Policy based routing UDP портов"
Отправлено dm , 29-Ноя-08 15:29 
>если интерфейс/адрес не основной,т.е. сервис на нем не ждет соединений, то входящий
>пакет проходит сквозь DNAT + маркировку  маркером в таблице соединений.
>Исходящий от сервиса пакет проходит сквозь восстановление маркера соединения, обратный DNAT, а
>потом маршрутизируется туда куда надо, в зависимости от значения маркера.
>Если нужно просто обеспечить привязку к сетевому интерфейсу, то, видимо, надо использовать
>только маркировку без DNAT.

Можно поподробней про DNAT и маркировку?

В freebsd тегирование пакетов ни к чему не приводит. В моем случае исходящий UDP пакет идет с адреса куда смотрит роут по умолчанию, т.е. пакет приъодит на внешний адрес 1.1.1.1 $IF1, а уходит ответ с интерфейса lo0 и адреса 127.0.0.1, с TCP исходящий=входящему адресу и проблем нет. А если повесить сервис на внутреннем интерфейсе и натить внешнии запросы на него (если это заработает), то я не увижу src адрес клиента, что меня не устраивает.

Мне кажется тут проблема имеенно с реализацией ip в freebsd или както связано со спецификой UDP, но тут я не совсем понимаю что происходит и не знаю куда ковырять.


"Policy based routing UDP портов"
Отправлено PavelR , 29-Ноя-08 16:27 
>>если интерфейс/адрес не основной,т.е. сервис на нем не ждет соединений, то входящий
>>пакет проходит сквозь DNAT + маркировку  маркером в таблице соединений.
>>Исходящий от сервиса пакет проходит сквозь восстановление маркера соединения, обратный DNAT, а
>>потом маршрутизируется туда куда надо, в зависимости от значения маркера.
>>Если нужно просто обеспечить привязку к сетевому интерфейсу, то, видимо, надо использовать
>>только маркировку без DNAT.
>
>Можно поподробней про DNAT и маркировку?

   Это всё под линуксом. Ищите в советах на этом сайте, есть статья по этому поводу.
Собственно чтобы искать было проще - вот ссылка http://www.opennet.me/openforum/vsluhforumID3/42663.html

>
>В freebsd тегирование пакетов ни к чему не приводит. В моем случае
>исходящий UDP пакет идет с адреса куда смотрит роут по умолчанию,
>т.е. пакет приъодит на внешний адрес 1.1.1.1 $IF1, а уходит ответ
>с интерфейса lo0 и адреса 127.0.0.1, с TCP исходящий=входящему адресу и
>проблем нет.

   Расписывайте схему подробнее. Угадывать имена интерфейсов и что где что слушает - желания мало.

> А если повесить сервис на внутреннем интерфейсе и натить
>внешнии запросы на него (если это заработает), то я не увижу
>src адрес клиента, что меня не устраивает.

   Как и всегда, рекомендую включить мозг и подумать, чем отличается SNAT от DNAT.
   Ваше мнение насчет "я не увижу src адрес клиента" ошибочно.
    
>
>Мне кажется тут проблема имеенно с реализацией ip в freebsd или както
>связано со спецификой UDP, но тут я не совсем понимаю что
>происходит и не знаю куда ковырять.

   К сожалению я совсем не знаю pf, а возможности ipfw по маркировке соединений изучать времени нет.



"Policy based routing UDP портов"
Отправлено dm , 30-Ноя-08 00:18 
>   Как и всегда, рекомендую включить мозг и подумать, чем
>отличается SNAT от DNAT.
>   Ваше мнение насчет "я не увижу src адрес клиента"
>ошибочно.

DNAT это обычный портредирект? я почему-то решил что dynamic nat. Извините я не силен в абривиатурах iptables.

во фре это делается так (pf'ом)

rdr extIF proto udp from <internet> to extADDR port https -> dmzADDR port https
nat on extIF proto udp from dmzADDR port https to <internet> -> extADDR

да в таком случае буду видеть src адрес.

а если имеенно натить внешнии адреса на внутренние то не будут, но разговор не об этом.

советы по настройки линукса врятли хоть как-то помогут мне во freebsd.

В любом случае спасибо за ответы, линух какнибудь поковыряю.


"Policy based routing UDP портов"
Отправлено Rom1kz , 26-Янв-09 14:50 
Тоже столкнулся с проблемой роутинга UDP

проблема решается, когда нужная служба работает на одном интерфейсе, а не биндится на все.
тут же можно использовать и порт форвардинг для проброса UDP