Балансировка при помощи ipfw+natd

Проблемы установки, настройки и работы Правильной Операционной Системы

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
neko
рядовой
Сообщения: 38
Зарегистрирован: 2009-02-04 21:24:24

Балансировка при помощи ipfw+natd

Непрочитанное сообщение neko » 2009-02-04 21:28:45

Попытка:

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

00500 check-state
01000 prob 0.500000 skipto 2000 ip from any to any via xl0
01500 divert 8668 ip from any to any via rl1 keep-state
02000 divert 8669 ip from any to any via rl0 keep-state
65535 allow ip from any to any
Как результат:

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

00500         0          0 check-state
01000      2358     193466 prob 0.500000 skipto 2000 ip from any to any via xl0
01500 140074131 3922075668 divert 8668 ip from any to any via rl1 keep-state
02000     67188    7115752 divert 8669 ip from any to any via rl0 keep-state
65535     74310    7770501 allow ip from any to any
Самое интерестное что на rl1 вообще не наблюдаеться ничего.

Где ошибка кроме как в генетическом коде?

Хостинговая компания 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/

kirgudu
сержант
Сообщения: 185
Зарегистрирован: 2009-01-16 23:14:00

Re: Балансировка при помощи ipfw+natd

Непрочитанное сообщение kirgudu » 2009-02-04 22:03:22

Че хочешь то?

Аватара пользователя
neko
рядовой
Сообщения: 38
Зарегистрирован: 2009-02-04 21:24:24

Re: Балансировка при помощи ipfw+natd

Непрочитанное сообщение neko » 2009-02-04 22:15:51

В смысле какую цель преследую?

Вот - пытаюсь применить 50% вероятность к заворотам в два экземпляра natd. А на что же это еще похоже?

Аватара пользователя
hizel
дядя поня
Сообщения: 9031
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: Балансировка при помощи ipfw+natd

Непрочитанное сообщение hizel » 2009-02-04 22:26:04

занятно, а что там в ipfw -d show ?
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

kirgudu
сержант
Сообщения: 185
Зарегистрирован: 2009-01-16 23:14:00

Re: Балансировка при помощи ipfw+natd

Непрочитанное сообщение kirgudu » 2009-02-04 22:26:37

neko писал(а):В смысле какую цель преследую?

Вот - пытаюсь применить 50% вероятность к заворотам в два экземпляра natd. А на что же это еще похоже?
Не так. Похоже ты хочешь двум разным провайдерам скормить траффик. Так не получится, у тебя дивертятся во второй нат и все равно уходят с первого интерфейса, потому что там дефолтный шлюз. Надо принудительно форвардить пакеты с IP второго интерфейса, на шлюз второго провайдера.

Аватара пользователя
hizel
дядя поня
Сообщения: 9031
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: Балансировка при помощи ipfw+natd

Непрочитанное сообщение hizel » 2009-02-04 22:50:01

все таки интересно, что там за ппц происходит !
учитвая, что после natd пакетик измененым или первоначальным попадает обратно в фаер :roll:
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Аватара пользователя
neko
рядовой
Сообщения: 38
Зарегистрирован: 2009-02-04 21:24:24

Re: Балансировка при помощи ipfw+natd

Непрочитанное сообщение neko » 2009-02-04 23:20:12

занятно, а что там в ipfw -d show ?

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

00500         0          0 check-state
01000      5692     443336 prob 0.500000 skipto 2000 ip from any to any via xl0
01500 333365653 9334238284 divert 8668 ip from any to any via rl1 keep-state
02000    169863   17643479 divert 8669 ip from any to any via rl0 keep-state
65535    184360   18884275 allow ip from any to any
## Dynamic rules (226):
01500 333365652 9334238256 (5s) STATE igmp 192.168.4.1 0 <-> 224.0.0.1 0
02000         4        176 (181s) STATE tcp 10.1.1.1 3200 <-> 87.250.251.11 80
02000        22       1616 (10s) STATE udp 10.10.10.5 53 <-> 192.168.3.2 51040
02000        67       4923 (10s) STATE udp 10.1.1.1 51040 <-> 10.10.10.5 53
Не так. Похоже ты хочешь двум разным провайдерам скормить траффик.
Ну скажем так - в принципе четырем разным в перспективе, особо качетсво клейки не интересует так как в финале должен просто получиться дешевый резервный 16-ти мбитный канал, время использования которого до часа в месяц. Просто нужен сам факт клейки как таковой + для общего развития :)

Так как должна выглядеть практическая реализация распределения нагрузки по № каналов при помощи ipfw+natd? Либо таки сворачивать свои шизоидные идеи и скрипя зубами смотреть на тему раундробина в pf? (не люблю и не хочу :oops: )

Аватара пользователя
hizel
дядя поня
Сообщения: 9031
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: Балансировка при помощи ipfw+natd

Непрочитанное сообщение hizel » 2009-02-04 23:43:38

я бы предложил такой концепт, на основе примера из хэндбука, поставил метки FIXME примерно куда обратить внимание

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

#!/bin/sh
cmd="ipfw -q add"
skip="skipto 500"
pif=rl0
pifpif=rl1
anydefault='xx.xx.xx.xx'
ks="keep-state"
good_tcpo="22,25,37,43,53,80,443,110,119"
nat1=8668
nat2=8669

ipfw -q -f flush

$cmd 002 allow all from any to any via xl0  # exclude LAN traffic
$cmd 003 allow all from any to any via lo0  # exclude loopback traffic
#FIXME
$cmd 100 divert $nat1 ip from any to any in via $pif
$cmd 100 divert $nat2 ip from any to any in via $pifpif
$cmd 101 check-state

# Authorized outbound packets
$cmd 120 $skip udp from any to xx.168.240.2 53 out via $pif $ks
$cmd 121 $skip udp from any to xx.168.240.5 53 out via $pif $ks
$cmd 125 $skip tcp from any to any $good_tcpo out via $pif setup $ks
$cmd 130 $skip icmp from any to any out via $pif $ks
$cmd 135 $skip udp from any to any 123 out via $pif $ks


# Deny all inbound traffic from non-routable reserved address spaces
$cmd 300 deny all from 192.168.0.0/16  to any in via $pif  #RFC 1918 private IP
$cmd 301 deny all from 172.16.0.0/12   to any in via $pif  #RFC 1918 private IP
$cmd 302 deny all from 10.0.0.0/8      to any in via $pif  #RFC 1918 private IP
$cmd 303 deny all from 127.0.0.0/8     to any in via $pif  #loopback
$cmd 304 deny all from 0.0.0.0/8       to any in via $pif  #loopback
$cmd 305 deny all from 169.254.0.0/16  to any in via $pif  #DHCP auto-config
$cmd 306 deny all from 192.0.2.0/24    to any in via $pif  #reserved for docs
$cmd 307 deny all from 204.152.64.0/23 to any in via $pif  #Sun cluster
$cmd 308 deny all from 224.0.0.0/3     to any in via $pif  #Class D & E multicast

# Authorized inbound packets
$cmd 400 allow udp from xx.70.207.54 to any 68 in $ks
$cmd 420 allow tcp from any to me 80 in via $pif setup limit src-addr 1

$cmd 450 deny log ip from any to any

#FIXME
$cmd 110 prob 0.500000 skipto 700 ip from any to any out via $pif

# This is skipto location for outbound stateful rules
$cmd 600 divert $nat1 ip from any to any out via $pif
$cmd 610 allow ip from any to any
#FIXME
$cmd 700 divert $nat2 ip from any to any out via $pif
$cmd 701 fwd $anydefault ip from any to any out
$cmd 701 allow ip from any to any
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Аватара пользователя
neko
рядовой
Сообщения: 38
Зарегистрирован: 2009-02-04 21:24:24

Re: Балансировка при помощи ipfw+natd

Непрочитанное сообщение neko » 2009-02-05 0:12:52

Итого концепт сводиться в своей сути к следущему? :

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

аплинк1=rl0
аплинк2=rl1
дефолтгейтвей='xx.xx.xx.xx'

нат_на_аплинк1=8668
нат_на_аплинк2=8669

#сие в принципе понятно - нат как нат
ipfw 100 divert $нат_на_аплинк1 ip from any to any in via $аплинк1
ipfw 100 divert $нат_на_аплинк2 ip from any to any in via $аплинк2

#не трогаем что уже походило - незачем
ipfw 101 check-state 

#собственно либо с вероятностью 50% уходим далее либо прокидываемся на второй нат
ipfw 110 prob 0.5 skipto 700 ip from any to any out via $аплинк1

#  вот тут мы будем ходить в аплинк1
ipfw 600 divert $нат_на_аплинк1 ip from any to any out via $аплинк1
ipfw 610 allow ip from any to any
#FIXME
ipfw 700 divert $нат_на_аплинк2 ip from any to any out via $аплинк1 # (???)
ipfw 701 fwd $дефолтгейтвей ip from any to any out # (???)
ipfw 701 allow ip from any to any
Не понял честно говоря хода мысли про рулесы 700 и 701.

Аватара пользователя
hizel
дядя поня
Сообщения: 9031
Зарегистрирован: 2007-06-29 10:05:02
Откуда: Выборг

Re: Балансировка при помощи ipfw+natd

Непрочитанное сообщение hizel » 2009-02-05 0:25:06

исходящий пакет который мы хотим пнуть в другой канал, все равно выходит через $аплинк1
согласно таблице роутинга, где только один дефолтный роут, соотвественно натим его на ip
на $аплинке2, далее после ната попадаем на 701 правило как пакет от ip аплинка2 в мир
и форвардим его на алтернативный гатевей за аплинком вторым, как то так :)

ммм, можно поменять для кросоты
-ipfw 700 divert $нат_на_аплинк2 ip from any to any out via $аплинк1
+ipfw 700 divert $нат_на_аплинк2 ip from any to any out

грымм, тут у нас получается keep-state только в промежутке между натами, хм
блин видимо надо и сюды добавить
-ipfw 110 prob 0.5 skipto 700 ip from any to any out via $аплинк1
+ipfw 110 prob 0.5 skipto 700 ip from any to any out via $аплинк1 keep-state

.... опять я запутался, надо вздремнуть и на свежую голову взглянуть :(
В дурацкие игры он не играет. Он просто жуткий, чу-чу, паровозик, и зовут его Блейн. Блейн --- это Боль.

Аватара пользователя
neko
рядовой
Сообщения: 38
Зарегистрирован: 2009-02-04 21:24:24

Re: Балансировка при помощи ipfw+natd

Непрочитанное сообщение neko » 2009-02-06 11:05:07

Еще чуть помедитировал - таки да, моя ошибка кроме траблов с генетическим кодом состояла в забытии о факте наличия дефолтраута. Перекидывать пробом надо было таки его а не только диверты.

Благодарствую.