Страница 1 из 1
Kernel nat и диапазон ип адресов
Добавлено: 2009-11-10 23:32:41
Spank
Вопрос вроде такой довольно простой, но ответа я чет не могу нарыть. Реально ли заставить kernel nat работать с несколькими внешними адресами, например одному клиенту один другому другой и тп. Ну и как это правильно реализовать. Если нет, то как мне добиться желательного результата? Пробовал вешать алиасы на интерфейс, нат использует последний ип.
Re: Kernel nat и диапазон ип адресов
Добавлено: 2009-11-11 1:22:18
---nebo---
В PF такое точно можно сделать и даже больше
Код: Выделить всё
http://house.hcn-strela.ru/BSDCert/BSDA-course/apcs02.html
п.2.2.5
Re: Kernel nat и диапазон ип адресов
Добавлено: 2009-11-11 12:36:26
ivan__
Re: Kernel nat и диапазон ип адресов
Добавлено: 2009-11-11 13:45:05
Spank
Либо плохо читал либо там нет такой возможности. Везде один адрес внешний, а в одном примере есть 2 и для этого создается второй нат, ну и суть там другая. У меня больше 20 ипов...
pf конешно красиво, но вот как себя поведут два фаервола, у мну через ipfw идет зарезка скорости клиентам(ng_car).
Re: Kernel nat и диапазон ип адресов
Добавлено: 2009-11-11 13:55:51
terminus_
В моих примерах такого нет, и сам ipfw nat так не умеет, но есть способ.
Можно модифицировать пятый пример заменив в нем setfib на tag, а в секциях где происходит направление в наты, проверять теги через опцию tagged - таким образом получиться раскидывать трафик на несколько экземпляров натов.
Сами сможете это сделать? Если нет, то ждите - вечером нарисую пример.
Интернсно было бы такое попробовать?
Re: Kernel nat и диапазон ип адресов
Добавлено: 2009-11-11 14:00:30
terminus_
Хотя стоп. Уточните что именно надо - вы хотите пул из внешних адресов отдать для подсети, или вам надо просто по отдельному нату для каждого клиента? Если пул, то модифицировать 5й пример, если по отдельному нато то это еще проще.
Re: Kernel nat и диапазон ип адресов
Добавлено: 2009-11-11 14:11:23
Spank
Мне надо что бы клиенты выходившие в инет с внутренними ип адресами использовали пул внешних ип, причем таким образом, что бы один ип закреплялся за клиентом. Вот для pf подобное правило.
nat on vlan202 inet from any to any -> 192.0.2.4/31 source-hash
А вот сейчас как заруливаются правила в нат.
Код: Выделить всё
#-> out
fwd 172.25.0.254 ip from внешние.ипишники to any
nat 123 ip from any to any
#in->
nat 123 ip from any to any in recv vlan202
Тут если клиентский ип внешний, тогда я не натирую его и отправляю в другой шлюз, туда идет весь не натированный траф.
И еще такой вопрос, нужно ли вешать внешники на ифес что бы их натировать? Или достаточно в нате указать?
Re: Kernel nat и диапазон ип адресов
Добавлено: 2009-11-11 14:26:21
Гость
Сколько всего внешних адресов? предположим 10?
Настройте 10 экземпляров натов
Код: Выделить всё
nat 1 config log ip 1.2.3.4 reset same_ports deny_in
nat 2 config log ip 1.2.3.5 reset same_ports deny_in
nat 3 config log ip 1.2.3.6 reset same_ports deny_in
nat 4 config log ip 1.2.3.7 reset same_ports deny_in
...
а потом заварачиваете каждого кдиента в его нат
Код: Выделить всё
ipfw add nat 1 ip from 192.168.1.0/24 to any out
ipfw add nat 1 ip from any to 1.2.3.4 in
ipfw add nat 2 ip from 192.168.2.0/24 to any out
ipfw add nat 2 ip from any to 1.2.3.5 in
...
Re: Kernel nat и диапазон ип адресов
Добавлено: 2009-11-11 14:34:30
Spank
Это конешно вариант, но тут если грубо 20 внешников, то добавится 40 правил дополнительных (хотя ту таблички наверное можно прикрутить ), а так же придется разбивать клиентскую подсеть на несколько и как бы проводить аналитику, какие адреса используются, какие подсетки в нат закинуть, а с течением времени новые начнут пользоваться и тп. Не очень красиво получается, да и балансировки не добится, на одном ип будет 100 клиентов, а на другом 10. К тому же в будущем будут еще наты по разным направлениям.
Re: Kernel nat и диапазон ип адресов
Добавлено: 2009-11-11 14:59:51
schizoid
ниче собсна не мешает использовать 2 фаервола...
на одном чисто НАТ, на втором все остальное
Re: Kernel nat и диапазон ип адресов
Добавлено: 2009-11-11 15:32:09
Spank
schizoid писал(а):ниче собсна не мешает использовать 2 фаервола...
на одном чисто НАТ, на втором все остальное
То есть я заменяю свои правила на
Код: Выделить всё
#-> out vlan202
fwd 172.25.0.254 ip from внешние.ипишники to any
allow ip from any to any
#in->
allow ip from any to any in recv vlan202
Тут еще вопрос в том, что если pf нат отработает раньше чем ipfw->out vlan202 тогда мое правило fwd не отработает...
pf.conf
Код: Выделить всё
pass all
nat on vlan202 inet from ng* to any -> 192.0.2.4/31 source-hash
Прокатит ли конструкция ng* для указания всех ng интерфейсов?
Вся фильтрация будет проходить на ipfw.
Re: Kernel nat и диапазон ип адресов
Добавлено: 2009-11-11 15:38:52
---nebo---
schizoid писал(а):ниче собсна не мешает использовать 2 фаервола...
на одном чисто НАТ, на втором все остальное
допустим правила фильтрации будут на ipfw, а нат на PF. Куда будет попадать приходящий пакет с начала, на фильтрующие правила или на НАТ? Как разруливается такая ситуация вообще?
Re: Kernel nat и диапазон ип адресов
Добавлено: 2009-11-11 21:08:13
terminus
нарисовал как "сделать пул" из внешних адресов.
http://www.lissyara.su/?id=1967#example_7
---
на счет 2х фаерволов - nuclight рассказывал, что в сетевом стеке FreeBSD они вызываются как фильтры - один после другого. В какой именно очередности будет вызываться ipfw и pf я незнаю, но наверное, если вкомпилить ipfw в ядро, а pf вызывать как модуль, то приоритет будет у ipfw.
http://smotri.com/video/view/?id=v9864889761#none

Re: Kernel nat и диапазон ип адресов
Добавлено: 2009-11-11 21:45:28
Spank
Решение довольно таки интересное получается. Есть пара вопросов. Как поведет себя prob с одними одинаковым ип. Может получится такое, что например первый пакет пошел во внешку через один ип, а второй через другой, хотя оба эти пакета из одной сессии. Ну и вапще будет ли привязка внутреннего ип к внешнему в данном случае.
Re: Kernel nat и диапазон ип адресов
Добавлено: 2009-11-11 22:06:51
terminus
prob поведет себя отлично так как там еще и keep-state используется. Я пока поленился расписывать полное, нудное описание прохождения трафика, но идея там такая же как пятом примере. Для пятого расписано. Фишка в том, что keep-state запоминают через какое правило оно в первые было вызвано и потом всегда перепрыгивает на него. То есть сессии (а конкретно назначение тега для пакета) не должны ломаться - если раз пошло через второй нат, то и весь последующий трафик в рамках сессии тоже пойдет через него.
На привязку внутреннего к внешнему этот пример не расчитан - тут просто динамическое использование пула адресов для внутренней подсети. Один и тот же внутренний IP может выходить в мир через все внешние адреса пула.
Уточните вашу задачу более детально.
Просто, если надо именно "привязать" 1:1, то тогда надо делать по схеме как я днем написал (свой нат для конкретных клиентских IP), а если нужна комбинация и привязки, и динамического распределения, то тут надо мозговать...
Re: Kernel nat и диапазон ип адресов
Добавлено: 2009-11-12 4:51:41
Spank
Нужна комбинация и привязки, и динамического распределения. Можно конешно и так обойтись, но если еще к ип удастся привязать будет посто славно.
Re: Kernel nat и диапазон ип адресов
Добавлено: 2009-11-12 16:29:05
Spank
terminus писал(а):нарисовал как "сделать пул" из внешних адресов.
на счет 2х фаерволов - nuclight рассказывал, что в сетевом стеке FreeBSD они вызываются как фильтры - один после другого. В какой именно очередности будет вызываться ipfw и pf я незнаю, но наверное, если вкомпилить ipfw в ядро, а pf вызывать как модуль, то приоритет будет у ipfw.
http://smotri.com/video/view/?id=v9864889761#none

В таком раскладе пакетики у меня идут так.
Исход ipfw->pf_nat
Вход pf_nat->ipfw
ipfw:
Код: Выделить всё
00104 allow ip from any to 10.25.0.0/16 in recv vlan202
00105 skipto 4000 ip from any to any out xmit vlan202
04005 allow ip from 10.25.0.0/16 to any
04999 deny ip from any to any
pf
Код: Выделить всё
nat on vlan202 inet from 10.25.0.0/16 to any -> out_net source-hash
Re: Kernel nat и диапазон ип адресов
Добавлено: 2009-11-13 22:53:42
terminus
Доделал описание движения трафика через 7-й пример.
Пока писал, нашел ошибки в первоначальном варианте

все же "нудное описалово" имеет свои плюсы - ошибки отлавливаются.