Страница 1 из 1
Балансировка при помощи ipfw+natd
Добавлено: 2009-02-04 21:28:45
neko
Попытка:
Код: Выделить всё
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 вообще не наблюдаеться ничего.
Где ошибка кроме как в генетическом коде?
Re: Балансировка при помощи ipfw+natd
Добавлено: 2009-02-04 22:03:22
kirgudu
Че хочешь то?
Re: Балансировка при помощи ipfw+natd
Добавлено: 2009-02-04 22:15:51
neko
В смысле какую цель преследую?
Вот - пытаюсь применить 50% вероятность к заворотам в два экземпляра natd. А на что же это еще похоже?
Re: Балансировка при помощи ipfw+natd
Добавлено: 2009-02-04 22:26:04
hizel
занятно, а что там в ipfw -d show ?
Re: Балансировка при помощи ipfw+natd
Добавлено: 2009-02-04 22:26:37
kirgudu
neko писал(а):В смысле какую цель преследую?
Вот - пытаюсь применить 50% вероятность к заворотам в два экземпляра natd. А на что же это еще похоже?
Не так. Похоже ты хочешь двум разным провайдерам скормить траффик. Так не получится, у тебя дивертятся во второй нат и все равно уходят с первого интерфейса, потому что там дефолтный шлюз. Надо принудительно форвардить пакеты с IP второго интерфейса, на шлюз второго провайдера.
Re: Балансировка при помощи ipfw+natd
Добавлено: 2009-02-04 22:50:01
hizel
все таки интересно, что там за ппц происходит !
учитвая, что после natd пакетик измененым или первоначальным попадает обратно в фаер

Re: Балансировка при помощи ipfw+natd
Добавлено: 2009-02-04 23:20:12
neko
занятно, а что там в 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? (не люблю и не хочу

)
Re: Балансировка при помощи ipfw+natd
Добавлено: 2009-02-04 23:43:38
hizel
я бы предложил такой концепт, на основе примера из хэндбука, поставил метки 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
Re: Балансировка при помощи ipfw+natd
Добавлено: 2009-02-05 0:12:52
neko
Итого концепт сводиться в своей сути к следущему? :
Код: Выделить всё
аплинк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.
Re: Балансировка при помощи ipfw+natd
Добавлено: 2009-02-05 0:25:06
hizel
исходящий пакет который мы хотим пнуть в другой канал, все равно выходит через $аплинк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
.... опять я запутался, надо вздремнуть и на свежую голову взглянуть

Re: Балансировка при помощи ipfw+natd
Добавлено: 2009-02-06 11:05:07
neko
Еще чуть помедитировал - таки да, моя ошибка кроме траблов с генетическим кодом состояла в забытии о факте наличия дефолтраута. Перекидывать пробом надо было таки его а не только диверты.
Благодарствую.