FreeBSD с двумя интерфейсами на два шлюза в инет

Простые/общие вопросы по UNIX системам. Спросите здесь, если вы новичок

Модераторы: vadim64, terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
MrCondor
проходил мимо
Сообщения: 5
Зарегистрирован: 2012-02-16 15:40:42

FreeBSD с двумя интерфейсами на два шлюза в инет

Непрочитанное сообщение MrCondor » 2012-02-16 16:12:52

Помогите! Есть сервер под FreeBSD 8.2 (достался по наследству). Ядро перебрано с опциями

Код: Выделить всё

options><------>IPFIREWALL
options><------>IPFIREWALL_VERBOSE
options><------>IPFIREWALL_VERBOSE_LIMIT=10
options><------>IPDIVERT
options><------>IPFIREWALL_DEFAULT_TO_ACCEPT
options><------>IPFIREWALL_FORWARD
options><------>IPFIREWALL_NAT
options><------>LIBALIAS
options><------>DUMMYNET
На нем два интерфейса bge0 и bge1 на разные шлюзы в интернет.
netstat -rn

Код: Выделить всё

default            172.24.110.62      UGS        39    71080   bge0
127.0.0.1          link#5             UH          0        0    lo0
172.24.110.48/28   link#1             U           6      475   bge0
172.24.110.60      link#1             UHS         0        0    lo0
172.24.110.68/30   link#2             U           0        0   bge1
172.24.110.70      link#2             UHS         0        0    lo0
На шлюзах проброшен порт на сервер.
iptables -t nat -S|grep 80

Код: Выделить всё

-A PREROUTING -i eth0.201 -p tcp -m tcp --dport 80 -j DNAT --to-destination 172.24.110.60:80
и

Код: Выделить всё

-A PREROUTING -i ppp+ -p tcp -m tcp --dport 80 -j DNAT --to-destination 172.24.110.70:80
Соответственно возникает проблема - как сделать, чтобы пакеты с сервера возвращались в нужный интерфейс, а не в дефаултроут? Возможно ли как в iproute из linux задать правила маршрутизации?
Я нашел такие правила для ipfw на просторе интеренета, но не работает :( Что не так?

Код: Выделить всё

ipfw add 100 skipto 300 tag 1 in recv bge0 keep-state
ipfw add 200 skipto 300 tag 2 in recv bge1 keep-state
ipfw add 300 allow { recv bge0 or recv bge1 } # входящие снаружи
ipfw add 500 fwd 172.24.110.62 tagged 1 # остались ответы на внешнем интерфейсе,
ipfw add 600 fwd 172.24.110.69 tagged 2 # зарулим их куда надо
Я не очень понимаю 300-е правило. Ткните носом, пожалуйста в man, мануал или подскажите хоть в какую сторону копать?

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

gardener
рядовой
Сообщения: 18
Зарегистрирован: 2012-01-25 19:11:14

Re: FreeBSD с двумя интерфейсами на два шлюза в инет

Непрочитанное сообщение gardener » 2012-02-16 18:08:41

MrCondor писал(а):

Код: Выделить всё

ipfw add 100 skipto 300 tag 1 in recv bge0 keep-state
ipfw add 200 skipto 300 tag 2 in recv bge1 keep-state
ipfw add 300 allow { recv bge0 or recv bge1 } # входящие снаружи
ipfw add 500 fwd 172.24.110.62 tagged 1 # остались ответы на внешнем интерфейсе,
ipfw add 600 fwd 172.24.110.69 tagged 2 # зарулим их куда надо
Я не очень понимаю 300-е правило. Ткните носом, пожалуйста в man, мануал или подскажите хоть в какую сторону копать?
На 300-е правило скипаются два предыдущих правила, чтобы корректно работало сохраненное состояние, чтобы ответный исходящий пакет был правильно обработан. При этом 300-е разрешает пакеты только принятые любым из двух интерфейсов.
Для исходящих предназначена другая дорога.

Где располагается правило CHECK-STATE? Оно должно быть в начале, до правила №100.

Аватара пользователя
ADRE
майор
Сообщения: 2645
Зарегистрирован: 2007-07-26 8:53:49
Контактная информация:

Re: FreeBSD с двумя интерфейсами на два шлюза в инет

Непрочитанное сообщение ADRE » 2012-02-16 18:27:08

по идее да. чтобы проверить свормированный динамичиский путь.
//del

MrCondor
проходил мимо
Сообщения: 5
Зарегистрирован: 2012-02-16 15:40:42

Re: FreeBSD с двумя интерфейсами на два шлюза в инет

Непрочитанное сообщение MrCondor » 2012-02-17 9:47:47

Про правило 300 я вроде понял, что нужно ибо по-умолчанию всё запрещено. Сделал попытку № 2.
Пересобрал ядро с

Код: Выделить всё

options         ROUTETABLES=4
и

Код: Выделить всё

setfib -1 route add default 172.24.110.62
setfib -2 route add default 172.24.110.69
ipfw add 100 skipto 300 tag 1 in recv bge0 keep-state
ipfw add 200 skipto 400 tag 2 in recv bge1 keep-state
ipfw add 300 setfib 1 tagged 1
ipfw add 400 setfib 2 tagged 2
setfib -1 netstat -rn

Код: Выделить всё

setfib -1 route add default 172.24.110.62
setfib -2 route add default 172.24.110.69
ipfw add 100 skipto 300 tag 1 in recv bge0 keep-state
ipfw add 200 skipto 400 tag 2 in recv bge1 keep-state
ipfw add 300 setfib 1 tagged 1
ipfw add 400 setfib 2 tagged 2
setfib -2 netstat -rn

Код: Выделить всё

Routing tables

Internet:
Destination        Gateway            Flags    Refs      Use  Netif Expire
default            172.24.110.69      UGS         0        2   bge1
127.0.0.1          link#5             UH          0        0    lo0
172.24.110.48/28   link#1             U           0        0   bge0
172.24.110.68/30   link#2             U           0        0   bge1
netstat -rn

Код: Выделить всё

Routing tables

Internet:
Destination        Gateway            Flags    Refs      Use  Netif Expire
default            172.24.110.62      UGS        41    97708   bge0
127.0.0.1          link#5             UH          0        0    lo0
172.24.110.48/28   link#1             U           6     1792   bge0
172.24.110.60      link#1             UHS         0        1    lo0
172.24.110.68/30   link#2             U           0        0   bge1
172.24.110.70      link#2             UHS         0      324    lo0
ipfw list

Код: Выделить всё

00100 skipto 300 tag 1 ip from any to any in recv bge0 keep-state
00200 skipto 400 tag 2 ip from any to any in recv bge1 keep-state
00300 setfib 1 ip from any to any tagged 1
00400 setfib 2 ip from any to any tagged 2
65535 allow ip from any to any
Tcp-дамплю, а пакеты снова убегают по дефаулроут :( :( :( :'( Причём
ipfw show

Код: Выделить всё

00100 123776  85192447 skipto 300 tag 1 ip from any to any in recv bge0 keep-state
00200   1098     56148 skipto 400 tag 2 ip from any to any in recv bge1 keep-state
00300 109265  74300376 setfib 1 ip from any to any tagged 1
00400    970     49688 setfib 2 ip from any to any tagged 2
65535 201489 141111877 allow ip from any to any
Т.е. пакеты пробегают по правилам для второй таблицы... :-( Не срабатывает 400 что ли? Может в ядро что добавить надо было?

Аватара пользователя
ADRE
майор
Сообщения: 2645
Зарегистрирован: 2007-07-26 8:53:49
Контактная информация:

Re: FreeBSD с двумя интерфейсами на два шлюза в инет

Непрочитанное сообщение ADRE » 2012-02-18 10:32:30

на pf было прикольно правило возвращать пакет на тотже интерфейс с которого пришло.
а вот на ipfw незнаю -( думаю тоже должно быть.
--
У тебя пакеты возвращаются от сервера по default rotuter 100%
ipfw поэтому и не использует это т.е. равило и не отработает т.к. он пойдет по 1 интерфейсу. надо дальше копать. меня ломало это делать _), но думаю стоит посмотреть как делают типа интренет для двух провайдеров, но там не рассматривается что соединения происходят из внешней сети.
а если сменить правила местами?
//del

Аватара пользователя
ADRE
майор
Сообщения: 2645
Зарегистрирован: 2007-07-26 8:53:49
Контактная информация:

Re: FreeBSD с двумя интерфейсами на два шлюза в инет

Непрочитанное сообщение ADRE » 2012-02-18 10:48:40

попробуй через fwd может прокатит, вроде локальные интерфейсы.
//del

MrCondor
проходил мимо
Сообщения: 5
Зарегистрирован: 2012-02-16 15:40:42

Re: FreeBSD с двумя интерфейсами на два шлюза в инет

Непрочитанное сообщение MrCondor » 2012-02-20 11:59:30

ADRE писал(а):на pf было прикольно правило возвращать пакет на тотже интерфейс с которого пришло.
а вот на ipfw незнаю -( думаю тоже должно быть.
Подскажи, пожалуйста, а как с pf такое сделать? А то я бьюсь бьюсь, а все стоит :-(

arkan
ст. прапорщик
Сообщения: 559
Зарегистрирован: 2008-08-03 19:58:13
Откуда: Новосибирск
Контактная информация:

Re: FreeBSD с двумя интерфейсами на два шлюза в инет

Непрочитанное сообщение arkan » 2012-02-20 12:37:10

У меня вот так работало

Код: Выделить всё

add 50 fwd 89.189.177.158 ip from 89.189.177.132 to any
add 60 fwd 178.49.215.1 ip from 178.49.215.2 to any

89.189.177.132  /  178.49.215.2    мой IP
89.189.177.158  /  178.49.215.1   шлюз прова
Но !
это только при условии если с внешки идет запрос типа на веб сервер
от куда прищел запрос туда и уходит ответ

Если излокальной сети пойти через так настроенный сервер то все идет через дефолт

MrCondor
проходил мимо
Сообщения: 5
Зарегистрирован: 2012-02-16 15:40:42

Re: FreeBSD с двумя интерфейсами на два шлюза в инет

Непрочитанное сообщение MrCondor » 2012-02-20 15:33:42

arkan писал(а):У меня вот так работало

Код: Выделить всё

add 50 fwd 89.189.177.158 ip from 89.189.177.132 to any
add 60 fwd 178.49.215.1 ip from 178.49.215.2 to any

89.189.177.132  /  178.49.215.2    мой IP
89.189.177.158  /  178.49.215.1   шлюз прова
Но !
это только при условии если с внешки идет запрос типа на веб сервер
от куда прищел запрос туда и уходит ответ

Если излокальной сети пойти через так настроенный сервер то все идет через дефолт
Заработало :good: Огромное спасибо!