|
ru.unix.bsd- RU.UNIX.BSD ------------------------------------------------------------------ From : Tarasyuk Dmitry 2:5020/400 11 Mar 2007 01:51:33 To : Tedim Subject : Re: PF: nat & pass route-to... --------------------------------------------------------------------------------
> Хочу получить совет по PF. Рассматриваю простую конфигурацию: FreeBSD
> 6.2, три интерфейса, rl0 (10.0.0.1/16) - для локальной сети, em0
> (1.1.1.2/28, gateway 1.1.1.1) - ISP1, fxp0 (2.2.2.2/28, gateway
> 2.2.2.1) - ISP2. Политики обслуживания соединений ISP1 и ISP2 такие,
> что они пропускают пакеты только "своих" сетей, а "чужие" -
> отбрасывают. Использую маршрут по умолчанию в сеть ISP1:
>
> route add default 1.1.1.1 (т.е. все по умолчанию - на em0)
>
> Есть таблица "xnets", в которой описаны сети, доступ к которым
> предпочтителен через провайдера ISP1 (em0). Все остальное
> предпочтительнее проопускать через ISP2 (fxp0). Менять default route
> неприемлемо. Требования нужно выполнить без использования BGP.
>
> Решение искалось в виде pf.conf:
>
> ## заполняется из файла через pfctl -t xnets -T replace -f /etc/
> xnets.table table <xnets> persist;
> ## маскарад на внешних и-фейсах [***1***]
> nat on em0 from { rl0:network 2.2.2.2 } to any -> 1.1.1.2
> nat on fxp0 from { rl0:network 1.1.1.2 } to any -> 2.2.2.2
> ## с какого и-фейса пришло на сервер, на тот-же и-фейс и отвечать
> [***2***]
> pass in on em0 reply-to ( em0 1.1.1.1 ) inet from any to 1.1.1.2 keep
> state
> pass in on fxp0 reply-to ( fxp0 2.2.2.1 ) inet from any to 2.2.2.2 keep
> state
> ## перемаршрутизация всего, что пришло из локальной сети [***3***]
> pass in on rl0 fastroute inet from rl0:network to <xnets> keep state
> pass in on rl0 route-to ( fxp0 2.2.2.1 ) inet from rl0:network to !
> <xnets> keep state
> ## перемаршрутизация всего, что порождено сервером [***4***]
> pass out on em0 fastroute inet from em0 to <xnets> keep state
> pass out on em0 route-to ( fxp0 2.2.2.1 ) inet from em0 to ! <xnets>
> keep state
>
> В результате имеем, что для пакетов из локальной сети все работает
> правильно, правила [***3***] опознают принадлежность таблице xnets и
> перемаршрутизируют на нужный интерфейс, где для них выполняется
> маскарадинг по правилам [***1***], и они уходят через интерфейс,
> удовлетворяя политикам обслуживания соединений провайдеров, так как
> адрес источника у них подменен маскарадингом.
>
> Hо этого не происходит: если пакеты порождаются самим сервером, т.е.
> правила [***4***] выполняются, но маскарадинг по правилам [**1**] для
> пакетов с сервера не работает. Tcpdump показывает, что
> перемаршрутизированные пакеты с SRCIP=1.1.1.2 уходят через fxp0 на
> 2.2.2.1 и отбрасываются провайдером, как неудовлетворяющие политике.
>
> Вопрос взаимодействия nat и route не рассмотрен в man-ах и мне не
> удалось найти в инете. Я склонен эту ситуацию рассматривать как ошибку
> PF, ведь нет никакого абсурда в том, чтобы пропускать исходящие пакеты
> по маскарадингу!
Ошибка может состоять в следующем. Когда пакет проходит "транзитом" через
FreeBSD машину подходящий "pass route-to" перенаправляет его по маршруту
вне зависимости от стандартной route-таблицы в ядре. При этом SRCIP не
меняется, если нет правил маскарадинга. Hо в случае, если пакет _порожден
на самом хосте_ без явной привязки к интерфейсу (например, когда создается
сокет для отправки пакета с указанием порта, но без указания локального
адреса интерфейса), тогда ядро ОС на основании маршрутов само должно
решить каким именно будет SRCIP, а именно IP интерфейса, через который
пакет уйдет. PF, обрабатывая такие пакеты по route-to _должен изменять_
SRCIP на тот, который присвоен интерфейсу, через который пакет пойдет на
самом деле после перемаршрутизации. Ошибка именно в том, что PF этого не
делает! Или я не прав?
--- ifmail v.2.15dev5.3
* Origin: NDIASB (2:5020/400)
Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.unix.bsd/201590ae9dc67.html, оценка из 5, голосов 10
|