dadv: (Default)
[personal profile] dadv

Всплыла интересная задачка: на FreeBSD с работающим CARP заставить определённое приложение ходить к одним сетям с виртуального IP-адреса протокола CARP, к другим с других IP-адресов. Само приложение такой гибкости не обеспечивает и работает с сетью, не привязываясь к конкретным IP-адресам.

Одно из решений для современных версий FreeBSD состоит в использовании дополнительной таблицы маршрутизации. Добавляем в неё маршрут по умолчанию и несколько специальных маршрутов:

setfib 1 route add default gw1
setfib 1 route add -iface -host target1 -link carp0:1.2.3.4.5.6
setfib 1 route add -iface -net  target2 -link carp0:1.2.3.4.5.6
ipfw add 10 fwd gw2 ip from any to target1 fib 1 out
ipfw add 20 fwd gw3 ip from any to target2 fib 1 out

И запускаем наше приложение, назначая ему эту таблицу маршрутизации:

setfib 1 /usr/local/etc/rc.d/srv start

Таким образом, для приложения маршруты на target1 и target2 лежат через интерфейс carp0 и поэтому адрес источника для пакетов, предназначенных этим точкам назначения, будет взят ядром с интерфейса carp0. Фейковый MAC-адрес 1:2:3:4:5:6 нужен для того, чтобы отключить работу протокола ARP для этих адресатов. Файрвол же устанавливает действительный адрес шлюза для пакетов, при этом gw2 и gw3 могут быть равны gw1, конечно.

Решение работает не только для сокетов TCP/UDP, но и вообще для любого IP-трафика. Например, для ICMP (приложение может захотеть мониторить targets при помощи echo-requests).

Date: 2011-07-23 22:22 (UTC)
From: [identity profile] pluknet.livejournal.com
Боюсь, в будущим версиях carp, как интерфейс, перестанет существовать.

Date: 2011-07-24 09:08 (UTC)
From: [identity profile] dadv.livejournal.com
Мешает кому-то?

Date: 2011-07-24 10:29 (UTC)
From: [identity profile] pluknet.livejournal.com
Пообщайся с glebius@, у него грандиозные планы по ембендингу карповых IP в родительский интерфейс (типа алиасов, но не алиасы).

Date: 2011-09-14 09:54 (UTC)
From: [identity profile] http://users.livejournal.com/_dyr/
Э-э-э...а почему просто не использовать route с модификаторам -ifa?
man route
===
     In a change or add command where the destination and gateway are not suf-
     ficient to specify the route (as in the ISO case where several interfaces
     may have the same address), the -ifp or -ifa modifiers may be used to
     determine the interface or interface address.

===

Date: 2011-09-14 11:13 (UTC)
From: [identity profile] dadv.livejournal.com
Потому что man route ужасен своей лаконичностью и не тянет даже на справочник. Синтаксис и семантика описаны, мнээ... неполно, скажем мягко.

Date: 2011-09-14 11:15 (UTC)
From: [identity profile] dadv.livejournal.com
Кроме того, будет ли достаточно указать -ifa carp0 ?
Оно ж ARP-запросы начнёт посылать, где описано, как они будут обрабатываться в случае carp?

Date: 2011-09-14 11:58 (UTC)
From: [identity profile] http://users.livejournal.com/_dyr/
Не знаю, я не пробовал.
На домашней машинке пробовал назначить обратный адрес для маршрутизируемой IPv6 сети, получалось.

Profile

dadv: (Default)
Choose your future

July 2024

M T W T F S S
12 34567
891011121314
15161718192021
22232425262728
293031    

Tags

Style Credit

Powered by Dreamwidth Studios