1.7, eGuru (?), 21:45, 10/05/2006 [ответить] [﹢﹢﹢] [ · · · ] [↓] [↑] [п©б╘п╠Б∙≤п©Б√▓п▒Б■╛Б┴╔п▒Б┬≥Б┴┬ п©б╘п╠Б∙≤п©Б√▓п▒Б■╛Б┴╔п▒Б┬≥Б┴╔п©б╘п╠Б∙≤п©Б√▓п▒Б■╛Б┴╔п▒Б┬≥Б▄║п©б╘п╠Б∙≤п©Б√▓п▒Б■╛Б┴╔п▒Б┬≥Б√⌠п©б╘п╠Б∙≤п©Б√▓п▒Б■╛Б┴╔я▐Б√▓я▐Б√░п▒Б┬ Б√▒п©Б√▓п▒Б┬ Б∙░п▒Б√═Б■─п©б╘п╠Б∙≤п©Б√▓п▒Б■╛Б┴╔я├Б∙╔я▐Б√░п▒Б┬ Б√▒п©Б√▓п▒Б┬ Б∙░п▒Б┬ Б■■п©б╘п╠Б∙≤п©Б√▓п▒Б■╛Б┴╔п▒Б┬≥Б▄║я▐Б√░п▒Б┬ Б√▒п©Б√▓п▒Б┬ Б∙░п▒Б√═Б■─я▐Б√░п▒Б┬ Б√▒п©Б√▓п▒Б┬ Б∙░п▒Б┬ Б√▓]
| +/– |
В описанном виде работать не будет.
Объясню. Допустим, клиент соединяется с хостом foo по протоколу tcp. Высылает запрос, его запрос транслируется через ip1, получает ответ, tcp-сессия установлена, хост foo запоминает комбинацию ip1:src-port1 для этой сессии. Теперь, следующий пакет, от клиента, оттранслированный уже через ip2 придет на хост foo с ip2:src-port2 и, есс-но не будет связан с этой сессией и будет отброшен. Соответсвенно, получим 50% потерь для этой сессии.
Автору. Внимательно учим RFC793. | |
|
|
|
4.13, napTu (?), 15:11, 17/05/2006 [^] [^^] [^^^] [ответить] [п©б╘п╠Б∙≤п©Б√▓п▒Б■╛Б┴╔п▒Б┬≥Б┴┬ п©б╘п╠Б∙≤п©Б√▓п▒Б■╛Б┴╔п▒Б┬≥Б┴╔п©б╘п╠Б∙≤п©Б√▓п▒Б■╛Б┴╔п▒Б┬≥Б▄║п©б╘п╠Б∙≤п©Б√▓п▒Б■╛Б┴╔п▒Б┬≥Б√⌠п©б╘п╠Б∙≤п©Б√▓п▒Б■╛Б┴╔я▐Б√▓я▐Б√░п▒Б┬ Б√▒п©Б√▓п▒Б┬ Б∙░п▒Б√═Б■─п©б╘п╠Б∙≤п©Б√▓п▒Б■╛Б┴╔я├Б∙╔я▐Б√░п▒Б┬ Б√▒п©Б√▓п▒Б┬ Б∙░п▒Б┬ Б■■п©б╘п╠Б∙≤п©Б√▓п▒Б■╛Б┴╔п▒Б┬≥Б▄║я▐Б√░п▒Б┬ Б√▒п©Б√▓п▒Б┬ Б∙░п▒Б√═Б■─я▐Б√░п▒Б┬ Б√▒п©Б√▓п▒Б┬ Б∙░п▒Б┬ Б√▓]
| +/– |
ну хорошо, пусть будет "динамические правила", которые запоминают связку адреса источника, назначения, протокол и интерфейс. Т.о. при повторении адресов повторяется и правило ipfw.
check-state:
"Checks the packet against the dynamic ruleset. If a match is
found, execute the action associated with the rule which gener-
ated this dynamic rule, otherwise move to the next rule."
keep-state:
"Upon a match, the firewall will create a dynamic rule, whose
default behaviour is to match bidirectional traffic between
source and destination IP/port using the same protocol."
Возможно немного нужно будет подправить:
ipfw add check-state
ipfw add prob 0.5 divert 8668 ip from 192.168.0.0/16 to any xmit if1 keep-state
ipfw add divert 8669 ip from 192.168.0.0/16 to any xmit if1 keep-state
на:
ipfw add check-state
ipfw add prob 0.5 skip to xxx
ipfw add divert 8668 ip from 192.168.0.0/16 to any xmit if1 keep-state
ipfw add xxx divert 8669 ip from 192.168.0.0/16 to any xmit if1 keep-state
но в общем, пример очень даже рабочий.
| |
|
|
|
3.21, eGuru (??), 11:47, 04/01/2007 [^] [^^] [^^^] [ответить] [п©б╘п╠Б∙≤п©Б√▓п▒Б■╛Б┴╔п▒Б┬≥Б┴┬ п©б╘п╠Б∙≤п©Б√▓п▒Б■╛Б┴╔п▒Б┬≥Б┴╔п©б╘п╠Б∙≤п©Б√▓п▒Б■╛Б┴╔п▒Б┬≥Б▄║п©б╘п╠Б∙≤п©Б√▓п▒Б■╛Б┴╔п▒Б┬≥Б√⌠п©б╘п╠Б∙≤п©Б√▓п▒Б■╛Б┴╔я▐Б√▓я▐Б√░п▒Б┬ Б√▒п©Б√▓п▒Б┬ Б∙░п▒Б√═Б■─п©б╘п╠Б∙≤п©Б√▓п▒Б■╛Б┴╔я├Б∙╔я▐Б√░п▒Б┬ Б√▒п©Б√▓п▒Б┬ Б∙░п▒Б┬ Б■■п©б╘п╠Б∙≤п©Б√▓п▒Б■╛Б┴╔п▒Б┬≥Б▄║я▐Б√░п▒Б┬ Б√▒п©Б√▓п▒Б┬ Б∙░п▒Б√═Б■─я▐Б√░п▒Б┬ Б√▒п©Б√▓п▒Б┬ Б∙░п▒Б┬ Б√▓]
| +/– |
>Внимательно смотрим, что я написал :-) И man ipfw на предмет keep-state.
>Случайным образом выбирается исходящий адрес только для первого пакета tcp/udp соединения.
>Все последующие пакеты этого соединения идут тем же интерфейсом, тем же
>шлюзом и от того же ip, как и первый.
Если динамические правила создаются для пакетов в обе стороны, а не только для ответных входящих, то работать будет. Надо еще проследить за значением переменных ядра касающихся динамических правил, чтобы время жизни правил соответсвовало времени жизни сессий и максимальное количество правил было достаточно.
Данное решение позволит равномерно распределить между каналами TCP/UDP сессии, но не трафик. Зато действовать будет как для исхода так и для входа.
Трудно предсказать, как это решение будет работать для протоколов кроме TCP/UDP. Лучше всего такие протоколы пустить через один из каналов статически. | |
|
|
|