Jump to content

IPFW+NAT+BGP+UAIX


Recommended Posts

Posted

Доброго времени суток. Недавно начал пользоваться BGP, до этого UAIX  пробрасывал мимо шейпинга таблицей(выгружал список сетей из интернета) в IPFW. Сейчас у меня есть 3 vlan для направлений(World - vlan1, UAIX - vlan2, peering - vlan3). Хочу резать траффик только для World. Стоит Ubilling, шейпер его.
 
${fwcmd} nat 1 config log if ext0 reset same_ports
${fwcmd} add nat 1 ip from table\(5\) to not table\(1\) via vlan1
${fwcmd} add nat 1 ip from any to 123.123.123.123 via vlan1
${fwcmd} add nat 1 ip from table\(5\) to not table\(1\) via vlan2
${fwcmd} add nat 1 ip from any to 123.123.123.123 via vlan2
${fwcmd} add nat 1 ip from table\(5\) to not table\(1\) via vlan3
${fwcmd} add nat 1 ip from any to 123.123.123.123 via vlan3


table\(5\) - Локальные пользователи
ext0 - lo1:123.123.123.123
 
Есть ли варианты в IPFW реализовать это не таблицами, а через интерфейсы? Если у кого есть опыт - поделитесь пожалуйста.

Posted (edited)

Ну дык и шейпите себе только recv/xmit via "влан уходящий в мир" при помощи tablearg.

Что вам мешает?

Отсутствие опыта. 

 

Уже пытался делать так

 

${FwCMD} add 12001 pipe tablearg ip from any to table\(4\) out xmit vlan1

${FwCMD} add 12000 pipe tablearg ip from table\(3\) to any in recv vlan1

 

Только вот при такой записи просто фаерволл перестаёт пропускать пакеты.

Edited by Axe
Posted (edited)

 

Только вот при такой записи просто фаерволл перестаёт пропускать пакеты.

Он не перестает. Они скорее всего просто перестают принадлежать стандартной доступа.

 

Дефолтная политика для подсетей пользователей - deny. При net.inet.ip.fw.one_pass=1 наложение dummynet pipes работают как allow по дороге пошейпливая. Исходя из того, что у вас внезапно перестают ходить пакетики можно сделать вывод, что трафик от пользователей  попадает в  ipfw nat не долетая до шейпа. Проверяется очень просто при помощи ipfw show. Посмотрите что-ли в какую сторону у вас в эти правила не попадает трафик. Если в обе - утащите их выше nat-а, если в какую-то одну из сторон - утащите ее выше или ниже, чтобы быть уверенным, что src/dst будут адекватными с точки зрения текущего клиента относительно ваших интерфейсов.

В общем шейпить и алловить уже проначеный траффик.... эмммм... как-бы даст вполне предсказуемый эффект :)

Edited by nightfly
Posted

 

 

Только вот при такой записи просто фаерволл перестаёт пропускать пакеты.

Он не перестает.

Дефолтная политика для подсетей пользователей - deny. При net.inet.ip.fw.one_pass=1 наложение dummynet pipes работают как allow по дороге пошейпливая. Исходя из того, что у вас внезапно перестают ходить пакетики можно сделать вывод, что трафик от пользователей  попадает в  ipfw nat не долетая до шейпа. Проверяется очень просто при помощи ipfw show. Посмотрите что-ли в какую сторону у вас в эти правила не попадает трафик. Если в обе - утащите их выше nat-а, если в какую-то одну из сторон - утащите ее выше или ниже, чтобы быть уверенным, что сорс/дест будут адекватными с точки зрения текущего клиента.

 

 

Извиняюсь, не корректно выразился

 

 

${FwCMD} add 12001 pipe tablearg ip from any to table\(4\) 

${FwCMD} add 12000 pipe tablearg ip from table\(3\) to any

В таком виде всё шейпится.

 

 

${FwCMD} add 12001 pipe tablearg ip from any to table\(4\) out xmit vlan1

${FwCMD} add 12000 pipe tablearg ip from table\(3\) to any in recv vlan1

В таком виде пакеты должны улетать только в мир(ну я бы так хотел) и по пути шейпится. Но этого не происходит. Если я добавляю ниже разрешающие правила(а они должны быть для остальных направлений) для прохождения пакетов из таблицы пользователей, то ясен пень что оно не шейпится и пакеты проходят.

Posted (edited)

 

${FwCMD} add 12001 pipe tablearg ip from any to table\(4\) 

${FwCMD} add 12000 pipe tablearg ip from table\(3\) to any

В таком виде всё шейпится.

Это заведомо х....й вариант влияющий на все интерфейсы и пролетающие сквозь ядро пакеты, которые может увидеть.

 

 

В таком виде пакеты должны улетать только в мир(ну я бы так хотел) и по пути шейпится. Но этого не происходит.

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

Edited by nightfly
Posted

 

 

${FwCMD} add 12001 pipe tablearg ip from any to table\(4\) 

${FwCMD} add 12000 pipe tablearg ip from table\(3\) to any

В таком виде всё шейпится.

Это заведомо х....й вариант влияющий на все интерфейсы и пролетающие сквозь ядро пакеты, которые может увидеть.

 

 

В таком виде пакеты должны улетать только в мир(ну я бы так хотел) и по пути шейпится. Но этого не происходит.

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

 

Попробовал утянуть пайпы выше ната... пакеты не ходят. На сколько я понял, вы предлагаете сперва отшейпить пакеты, потом пихать их в нат. Верно ?

Posted

 

Попробовал утянуть пайпы выше ната... пакеты не ходят.

Значит так пробовали. Вам бог глаза зачем дал?

ipfw show в один глаз, tcpdump в другой - и вперед, смотреть по каким рулесам и на каких интерфейсах оно не пробегает.

 

 

На сколько я понял, вы предлагаете сперва отшейпить пакеты, потом пихать их в нат. Верно ?

Я не предлагаю. Я просто констатирую факт, что это единственное адекватное решение.

Posted

 

 

Попробовал утянуть пайпы выше ната... пакеты не ходят.

Значит так пробовали. Вам бог глаза зачем дал?

ipfw show в один глаз, tcpdump в другой - и вперед, смотреть по каким рулесам и на каких интерфейсах оно не пробегает.

 

 

На сколько я понял, вы предлагаете сперва отшейпить пакеты, потом пихать их в нат. Верно ?

Я не предлагаю. Я просто констатирую факт, что это единственное адекватное решение.

 

Спасибо)

Posted (edited)

Подскажите всё же, как словить исходящий пакет ?

 

добавив правило перед натом я снял ограничение на входящи траффик... 

 

${FwCMD} add 2005 allow ip from any to table\(5\) out recv vlan2 (Всё чёто влетело через интерфейс UAIX)

 

Но вот как словить исходящий пакет - вообще не могу понять. ipfw show просто показывает 0 пакетов... Хотя бы логику поясните. Если клиентский ип стучится в шлюз на интерфейс lan0 ... то как фаерволлом словить его на vlan2 ? 

Edited by Axe
Posted (edited)

 

Подскажите всё же, как словить исходящий пакет ?

Сачком пробовали ловить?

 

 

добавив правило перед натом я снял ограничение на входящи траффик...

Еще раз перечитайте мой предыдущий пост.

Рисуя allow-ы где ни попадя, в обход типичного комбайна из tablearg/pipe via interface вы просто нивелируете всю логику авторизации и аутентификации ваших пользователей.

 

 

Хотя бы логику поясните

Поясняю: http://nuclight.livejournal.com/124348.html

 

 

то как шейпер узнать может что пакет отнатится

И не напрашивается очевидный вывод?

Задача шейпера ака dummynet... ВНЕЗАПНО шейпить а не "узнавать"  чего-то там.

Задача ната - тоже только натить никак не взаимодействуя с шейпером и тоже ничего не "угадывать". 

Где и в каком порядке, на каких интерфейсах будут происходить эти никак не взаимосвязанные процессы - зависит только от вас.

 

ЗЫ ах да - есть же еще такие крутые штуки как skipto, fwd и прочие на которых можно строить PBR практически любой упоротости.

Edited by nightfly

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...