Страница 1 из 1
FreeBSD с двумя интерфейсами на два шлюза в инет
Добавлено: 2012-02-16 16:12:52
MrCondor
Помогите! Есть сервер под 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, мануал или подскажите хоть в какую сторону копать?
Re: FreeBSD с двумя интерфейсами на два шлюза в инет
Добавлено: 2012-02-16 18:08:41
gardener
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.
Re: FreeBSD с двумя интерфейсами на два шлюза в инет
Добавлено: 2012-02-16 18:27:08
ADRE
по идее да. чтобы проверить свормированный динамичиский путь.
Re: FreeBSD с двумя интерфейсами на два шлюза в инет
Добавлено: 2012-02-17 9:47:47
MrCondor
Про правило 300 я вроде понял, что нужно ибо по-умолчанию всё запрещено. Сделал попытку № 2.
Пересобрал ядро с
и
Код: Выделить всё
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 что ли? Может в ядро что добавить надо было?
Re: FreeBSD с двумя интерфейсами на два шлюза в инет
Добавлено: 2012-02-18 10:32:30
ADRE
на pf было прикольно правило возвращать пакет на тотже интерфейс с которого пришло.
а вот на ipfw незнаю -( думаю тоже должно быть.
--
У тебя пакеты возвращаются от сервера по default rotuter 100%
ipfw поэтому и не использует это т.е. равило и не отработает т.к. он пойдет по 1 интерфейсу. надо дальше копать. меня ломало это делать _), но думаю стоит посмотреть как делают типа интренет для двух провайдеров, но там не рассматривается что соединения происходят из внешней сети.
а если сменить правила местами?
Re: FreeBSD с двумя интерфейсами на два шлюза в инет
Добавлено: 2012-02-18 10:48:40
ADRE
попробуй через fwd может прокатит, вроде локальные интерфейсы.
Re: FreeBSD с двумя интерфейсами на два шлюза в инет
Добавлено: 2012-02-20 11:59:30
MrCondor
ADRE писал(а):на pf было прикольно правило возвращать пакет на тотже интерфейс с которого пришло.
а вот на ipfw незнаю -( думаю тоже должно быть.
Подскажи, пожалуйста, а как с pf такое сделать? А то я бьюсь бьюсь, а все стоит
Re: FreeBSD с двумя интерфейсами на два шлюза в инет
Добавлено: 2012-02-20 12:37:10
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 шлюз прова
Но !
это только при условии если с внешки идет запрос типа на веб сервер
от куда прищел запрос туда и уходит ответ
Если излокальной сети пойти через так настроенный сервер то все идет через дефолт
Re: FreeBSD с двумя интерфейсами на два шлюза в инет
Добавлено: 2012-02-20 15:33:42
MrCondor
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 шлюз прова
Но !
это только при условии если с внешки идет запрос типа на веб сервер
от куда прищел запрос туда и уходит ответ
Если излокальной сети пойти через так настроенный сервер то все идет через дефолт
Заработало
Огромное спасибо!