The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Несколько шлюзов в одной сети"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Открытые системы на сервере (Маршрутизация, NAT / FreeBSD)
Изначальное сообщение [ Отслеживать ]

"Несколько шлюзов в одной сети"  +/
Сообщение от Double (??) on 22-Апр-10, 16:34 
В сети 10.0.0/24 три шлюза:
10.0.0.1
10.0.0.2(алиас 10.1.1.1)
10.0.0.3(алиас 10.2.2.2)

FreeBSD 7.2(vmware):
(le0) 10.0.0.4
(le1) 10.1.1.11
(le2) 10.2.2.22

10.0.0.1 - дорогой, быстрый, стабильный.
10.0.0.2 и 3 - медленные, анлим, падучие.
Все шлюзы натят сетку 10.0.0/24 во внешний мир.

Подцепить шлюзы физически на машину с FreeBSD не получится.

Идея была - прописать у всех пользователей в сети 10.0.0.4 как шлюз, а 10.0.0.4 сам будет решать в зависимости от правил к какому из шлюзов направить запрос. Грубо говоря логика планировалась следующая: все сайты которые касаются работы - проходят через 10.0.0.1, остальные через 10.0.0.2 и 10.0.0.3

Посоветовали делать это через PF, но увы, у меня не получилось. Споткнулся я на том, что шлюзы на FreeBSD не ведут в инет, а ведут в сетку, в которой есть шлюз в инет. NAT правила не срабатывают, в итоге трафик течет по шлюзу указанному в defaultrouter. Тогда я сделал алиасы для шлюзов, чтобы каждый шлюз был в своей подсетке, но и тут меня ждала неудача. Фрюха роутит только в гейт указанный в defaultrouter, как объяснить фрюхе, что если она натит пакет в сеть 10.2.2/24, то там есть шлюз 10.2.2.2, в который нужно передать пакет.

Вопросы следующие:
1. Решаема-ли эта задача стандартными средствами?
2. Если да, то можно-ли это сделать без использования алиасов(10.1.1.1 и 10.2.2.2)
3. Можно-ли это сделать с помощью PF?
4. Если это решаемо, можно сразу коротенький пример правил/настроек. Мануалов я уже начитался до белой горячки.

Высказать мнение | Ответить | Правка | Cообщить модератору

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Несколько шлюзов в одной сети"  +/
Сообщение от reader (ok) on 22-Апр-10, 20:42 
>[оверквотинг удален]
>Все шлюзы натят сетку 10.0.0/24 во внешний мир.
>
>Подцепить шлюзы физически на машину с FreeBSD не получится.
>
>Идея была - прописать у всех пользователей в сети 10.0.0.4 как шлюз,
>а 10.0.0.4 сам будет решать в зависимости от правил к какому
>из шлюзов направить запрос. Грубо говоря логика планировалась следующая: все сайты
>которые касаются работы - проходят через 10.0.0.1, остальные через 10.0.0.2 и
>10.0.0.3
>

если вы собираетесь рулить сайтами то используйте прокси, если по ip то продолжайте мучить pf.

>Посоветовали делать это через PF, но увы, у меня не получилось. Споткнулся
>я на том, что шлюзы на FreeBSD не ведут в инет,
>а ведут в сетку, в которой есть шлюз в инет. NAT
>правила не срабатывают, в итоге трафик течет по шлюзу указанному в
>defaultrouter. Тогда я сделал алиасы для шлюзов, чтобы каждый шлюз был
>в своей подсетке, но и тут меня ждала неудача. Фрюха роутит
>только в гейт указанный в defaultrouter, как объяснить фрюхе, что если
>она натит пакет в сеть 10.2.2/24, то там есть шлюз 10.2.2.2,
>в который нужно передать пакет.

для переопределения шлюза используйте route-to.

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

если вы меняете , с помощью nat, адрес источника в пакете, и больше ничего не делаете, то это не повлияет на маршрут, но с помощью route-to вы можете заставить пакет идти через другой шлюз.

https://www.opennet.ru/base/net/pf_faq.txt.html

>
>Вопросы следующие:
>1. Решаема-ли эта задача стандартными средствами?
>2. Если да, то можно-ли это сделать без использования алиасов(10.1.1.1 и 10.2.2.2)
>
>3. Можно-ли это сделать с помощью PF?
>4. Если это решаемо, можно сразу коротенький пример правил/настроек. Мануалов я уже
>начитался до белой горячки.

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

2. "Несколько шлюзов в одной сети"  +/
Сообщение от Double (??) on 23-Апр-10, 20:04 
defaultrouter в rc.conf не задан.
В очередной раз удалил конфиг pf.
Сделал минимум:

set skip on lo0
nat on le1 from 10.1.1.0/24 to any -> 10.1.1.11
pass out on route-to (le1 10.1.1.1) from 10.1.1.11 to any

Если я правильно понимаю смысл этих правил, то в первом правиле любому пакету поступившиму на le1 интерфейс заменяется адрес отправителя на 10.1.1.11
Во втором правиле все пакеты с адресом отправителя 10.1.1.11 кидаются на адрес 10.1.1.1
По логике должно работать, но не работает.


Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

3. "Несколько шлюзов в одной сети"  +/
Сообщение от reader (ok) on 24-Апр-10, 00:17 
>defaultrouter в rc.conf не задан.
>В очередной раз удалил конфиг pf.
>Сделал минимум:
>
>set skip on lo0
>nat on le1 from 10.1.1.0/24 to any -> 10.1.1.11
>pass out on route-to (le1 10.1.1.1) from 10.1.1.11 to any
>
>Если я правильно понимаю смысл этих правил, то в первом правиле любому
>пакету поступившиму на le1 интерфейс заменяется адрес отправителя на 10.1.1.11

не в пришедших, а в исходящих

>Во втором правиле все пакеты с адресом отправителя 10.1.1.11 кидаются на адрес
>10.1.1.1
>По логике должно работать, но не работает.

pass in on le1 route-to (le1 10.1.1.1) from 10.1.1.0/24 to any

пакеты пришедшие через le1 из 10.1.1.0/24, отправить через интерфейс le1 на шлюз 10.1.1.1

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

4. "Несколько шлюзов в одной сети"  +/
Сообщение от Double (??) on 29-Апр-10, 14:01 
>[оверквотинг удален]
>не в пришедших, а в исходящих
>
>>Во втором правиле все пакеты с адресом отправителя 10.1.1.11 кидаются на адрес
>>10.1.1.1
>>По логике должно работать, но не работает.
>
>pass in on le1 route-to (le1 10.1.1.1) from 10.1.1.0/24 to any
>
>пакеты пришедшие через le1 из 10.1.1.0/24, отправить через интерфейс le1 на шлюз
>10.1.1.1

Увы, не работает. Я помойму перебрал уже все возможные варианты. Решил пробовать роутить пакеты в локальной сети, без алиасов. Т.е. пробрасывать пакеты с FreeBSD на локальные шлюзы.
nat on le0 from any to any -> 10.0.0.4
pass in on le0 from any to any
pass out on le0 from any to any

шлюзы в сети: 10.0.0.1, 10.0.0.2, 10.0.0.3
FreeBSD: 10.0.0.4

И еще интересный глюк обнаружился - при включении tcpdump FreeBSD перестает отвечать по сети даже на пинг.

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

5. "Несколько шлюзов в одной сети"  +/
Сообщение от rr on 29-Апр-10, 14:25 
Схема абсолютно не ясна.
Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

7. "Несколько шлюзов в одной сети"  +/
Сообщение от Double (??) on 29-Апр-10, 15:52 
>Схема абсолютно не ясна.

Сеть: 10.0.0.0/24
Шлюзы: 10.0.0.1, 10.0.0.2, 10.0.0.3 (все шлюзы на разных машинах)
FreeBSD: 10.0.0.4

FreeBSD(10.0.0.4) прописывается как дефолтный шлюз на всех клиентских машинах. При поступлении запросов от пользователей на 10.0.0.4, FreeBSD распределяет запросы пользователей по шлюзам (10.0.0.1, 10.0.0.2, 10.0.0.3) в зависимости от пользователя и запрашиваемого им адреса.

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

11. "Несколько шлюзов в одной сети"  +/
Сообщение от rr on 29-Апр-10, 17:04 
>>Схема абсолютно не ясна.
>
>Сеть: 10.0.0.0/24
>Шлюзы: 10.0.0.1, 10.0.0.2, 10.0.0.3 (все шлюзы на разных машинах)
>FreeBSD: 10.0.0.4
>
>FreeBSD(10.0.0.4) прописывается как дефолтный шлюз на всех клиентских машинах. При поступлении запросов
>от пользователей на 10.0.0.4, FreeBSD распределяет запросы пользователей по шлюзам (10.0.0.1,
>10.0.0.2, 10.0.0.3) в зависимости от пользователя и запрашиваемого им адреса.

на FreeBSD выключены редирект сообщения icmp ?

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

13. "Несколько шлюзов в одной сети"  +/
Сообщение от Double (??) on 29-Апр-10, 19:03 
>[оверквотинг удален]
>>
>>Сеть: 10.0.0.0/24
>>Шлюзы: 10.0.0.1, 10.0.0.2, 10.0.0.3 (все шлюзы на разных машинах)
>>FreeBSD: 10.0.0.4
>>
>>FreeBSD(10.0.0.4) прописывается как дефолтный шлюз на всех клиентских машинах. При поступлении запросов
>>от пользователей на 10.0.0.4, FreeBSD распределяет запросы пользователей по шлюзам (10.0.0.1,
>>10.0.0.2, 10.0.0.3) в зависимости от пользователя и запрашиваемого им адреса.
>
>на FreeBSD выключены редирект сообщения icmp ?

log_redirect и drop_redirect равны нулю. Или речь не о них?

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

16. "Несколько шлюзов в одной сети"  +/
Сообщение от rr on 30-Апр-10, 08:38 
Рисую.
Сеть: 10.0.0.0/24
Шлюзы: 10.0.0.1, 10.0.0.2, 10.0.0.3 (все шлюзы на разных машинах)
FreeBSD: 10.0.0.4 со шлюзом по-умолчанию - скажем 10.0.0.1
Клиенты: сеть 10.0.0.0/24 со шлюзом по-умолчанию 10.0.0.4

Клиенты всё шлют на 10.0.0.4, как на шлюз по-умолчанию.
Хост 10.0.0.4 в свою очередь шлет icmp сообщения клиенту, что в сети есть шлюз 10.0.0.1.
У клиента появляется новый маршрут по умолчанию, указывающий на шлюз 10.0.0.1.
В следующий раз клиент всё шлет на новый шлюз 10.0.0.1, т.е. на 10.0.0.4 ничего не попадает.

А вот если попробывать множественные таблицы маршрутизации Freebsd.
Потом подключаешь таблицы в зависимости от адреса источника или адреса назначния.
Каждому клиенту будет выдаваться своий маршрут по-умолчанию.

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

18. "Несколько шлюзов в одной сети"  +/
Сообщение от Double (??) on 30-Апр-10, 14:45 
>[оверквотинг удален]
>Клиенты всё шлют на 10.0.0.4, как на шлюз по-умолчанию.
>Хост 10.0.0.4 в свою очередь шлет icmp сообщения клиенту, что в сети
>есть шлюз 10.0.0.1.
>У клиента появляется новый маршрут по умолчанию, указывающий на шлюз 10.0.0.1.
>В следующий раз клиент всё шлет на новый шлюз 10.0.0.1, т.е. на
>10.0.0.4 ничего не попадает.
>
>А вот если попробывать множественные таблицы маршрутизации Freebsd.
>Потом подключаешь таблицы в зависимости от адреса источника или адреса назначния.
>Каждому клиенту будет выдаваться своий маршрут по-умолчанию.

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

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

19. "Несколько шлюзов в одной сети"  +/
Сообщение от rr on 30-Апр-10, 14:52 
и в чем проблема?
клинеты ходят разными шлюзами в зависимости от адреса назначения.
Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

6. "Несколько шлюзов в одной сети"  +/
Сообщение от reader (ok) on 29-Апр-10, 14:27 
>[оверквотинг удален]
>>>По логике должно работать, но не работает.
>>
>>pass in on le1 route-to (le1 10.1.1.1) from 10.1.1.0/24 to any
>>
>>пакеты пришедшие через le1 из 10.1.1.0/24, отправить через интерфейс le1 на шлюз
>>10.1.1.1
>
>Увы, не работает. Я помойму перебрал уже все возможные варианты. Решил пробовать
>роутить пакеты в локальной сети, без алиасов. Т.е. пробрасывать пакеты с
>FreeBSD на локальные шлюзы.

то есть остается один le0 интерфейс на машине?
если да, то так вы будите натить и ответы идущие к клиенту, а этого делать нельзя
>nat on le0 from any to any -> 10.0.0.4
>pass in on le0 from any to any
>pass out on le0 from any to any
>
>шлюзы в сети: 10.0.0.1, 10.0.0.2, 10.0.0.3
>FreeBSD: 10.0.0.4
>
>И еще интересный глюк обнаружился - при включении tcpdump FreeBSD перестает отвечать
>по сети даже на пинг.

такого у меня не было, как вариант пока не разберетесь запускать tcpdump на шлюзе на который перенаправляете и на шлюзе по умолчанию

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

8. "Несколько шлюзов в одной сети"  +/
Сообщение от Double (??) on 29-Апр-10, 16:00 
>[оверквотинг удален]
>>pass out on le0 from any to any
>>
>>шлюзы в сети: 10.0.0.1, 10.0.0.2, 10.0.0.3
>>FreeBSD: 10.0.0.4
>>
>>И еще интересный глюк обнаружился - при включении tcpdump FreeBSD перестает отвечать
>>по сети даже на пинг.
>
>такого у меня не было, как вариант пока не разберетесь запускать tcpdump
>на шлюзе на который перенаправляете и на шлюзе по умолчанию

Да, поторопился я с правилами.
Логика маршрутизации, как я себе это представляю:
1. С клиента на FreeBSD le0 10.0.0.4 приходит пакет
2. PF натит этот пакет, заменяя адрес отправителя на свой
3. Меняет заголовк IP подставляя следующим хопом настоящий роутер.

nat on le0 from !(self) to any -> 10.0.0.4
pass out on le0 on route-to (le0 10.0.0.2) from 10.0.0.4 to any
pass in on le0 from any to any

Сдается мне я где-то упускаю возвращаемые пакеты. Может здесь необходимо добавить reply-to?

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

9. "Несколько шлюзов в одной сети"  +/
Сообщение от reader (ok) on 29-Апр-10, 16:31 
>[оверквотинг удален]
>>на шлюзе на который перенаправляете и на шлюзе по умолчанию
>
>Да, поторопился я с правилами.
>Логика маршрутизации, как я себе это представляю:
>1. С клиента на FreeBSD le0 10.0.0.4 приходит пакет
>2. PF натит этот пакет, заменяя адрес отправителя на свой
>3. Меняет заголовк IP подставляя следующим хопом настоящий роутер.
>
>nat on le0 from !(self) to any -> 10.0.0.4
>pass out on le0 on route-to (le0 10.0.0.2) from 10.0.0.4 to any

на входе
pass in on le0 route-to (le0 10.0.0.2) from any to ! 10.0.0.0/24
и tcpdump на 10.0.0.2
>
>pass in on le0 from any to any
>
>Сдается мне я где-то упускаю возвращаемые пакеты. Может здесь необходимо добавить reply-to?
>

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

14. "Несколько шлюзов в одной сети"  +/
Сообщение от Double (??) on 29-Апр-10, 19:19 
>[оверквотинг удален]
>
>на входе
>pass in on le0 route-to (le0 10.0.0.2) from any to ! 10.0.0.0/24
>
>и tcpdump на 10.0.0.2
>>
>>pass in on le0 from any to any
>>
>>Сдается мне я где-то упускаю возвращаемые пакеты. Может здесь необходимо добавить reply-to?
>>

Увы, всеравно бросает все через defaultrouter и tcpdump блокирует любую сетевую активность при этом не отображая никаких пакетов.

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

15. "Несколько шлюзов в одной сети"  +/
Сообщение от reader (ok) on 29-Апр-10, 20:57 
>[оверквотинг удален]
>>
>>и tcpdump на 10.0.0.2
>>>
>>>pass in on le0 from any to any
>>>
>>>Сдается мне я где-то упускаю возвращаемые пакеты. Может здесь необходимо добавить reply-to?
>>>
>
>Увы, всеравно бросает все через defaultrouter и tcpdump блокирует любую сетевую активность
>при этом не отображая никаких пакетов.

тогда ставьте логирование правил, что бы видеть попадают пакеты в правила, или поставьте pftop ( там стрелочки влево, вправо ) будите видеть в реальном режиме какие правила срабатывают или pfctl используйте.

вывод pfctl -s all покажите.

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

10. "Несколько шлюзов в одной сети"  +/
Сообщение от Double (??) on 29-Апр-10, 17:01 
>[оверквотинг удален]
>>pass out on le0 from any to any
>>
>>шлюзы в сети: 10.0.0.1, 10.0.0.2, 10.0.0.3
>>FreeBSD: 10.0.0.4
>>
>>И еще интересный глюк обнаружился - при включении tcpdump FreeBSD перестает отвечать
>>по сети даже на пинг.
>
>такого у меня не было, как вариант пока не разберетесь запускать tcpdump
>на шлюзе на который перенаправляете и на шлюзе по умолчанию

Да, поторопился я с правилами.
Логика маршрутизации, как я себе это представляю:
1. С клиента на FreeBSD le0 10.0.0.4 приходит пакет
2. PF натит этот пакет, заменяя адрес отправителя на свой
3. Меняет заголовк IP подставляя следующим хопом настоящий роутер.

nat on le0 from !(self) to any -> 10.0.0.4
pass out on le0 on route-to (le0 10.0.0.2) from 10.0.0.4 to any
pass in on le0 from any to any

Сдается мне я где-то упускаю возвращаемые пакеты. Может здесь необходимо добавить reply-to?

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

12. "Несколько шлюзов в одной сети"  +/
Сообщение от reader (ok) on 29-Апр-10, 17:47 
>[оверквотинг удален]
>2. PF натит этот пакет, заменяя адрес отправителя на свой
>3. Меняет заголовк IP подставляя следующим хопом настоящий роутер.
>
>nat on le0 from !(self) to any -> 10.0.0.4
>pass out on le0 on route-to (le0 10.0.0.2) from 10.0.0.4 to any
>
>pass in on le0 from any to any
>
>Сдается мне я где-то упускаю возвращаемые пакеты. Может здесь необходимо добавить reply-to?
>

ээээ, это уже было :)

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

17. "Несколько шлюзов в одной сети"  +/
Сообщение от rr on 30-Апр-10, 08:44 
где-то так

one=1
two=2
three=3
setfib $one   route add default 10.0.0.1
setfib $two   route add default 10.0.0.2
setfib $three route add default 10.0.0.3


в правилах ipfw
setfib 1 ip from any to aaa.bbb.ccc.ddd
setfib 2 ip from any to AAA.BBB.CCC.DDD
setfib 3 ip from any to eee.fff.ggg.hhh

Высказать мнение | Ответить | Правка | ^ | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2021 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру