On пн, 12 гру 2011 17:36:37 Зеленяк Алексей wrote:
> On 12.12.2011 17:08, Maxim Ignatenko wrote:
> > Тебе надо явно задать как отделять мух от котлет. А то в том письме на
> > которое ссылка полная каша. Например, до правила 101 пакет уже доходит
> > с изменённым src-ip и он не матчится. Если уж у тебя пакет и так out
> > xmit ng0, то ясен хрен что он и так профорвардится через шлюз который
> > на этом интерфейсе указан.
>
> Мне необходимо чтобы для каждой TCP сессии случайным образом выбирался нат.
Немного перефразируя пример из упомянутого поста:
ipfw add 100 skipto 300 tag 1 in recv $ext_if1 keep-state
ipfw add 200 skipto 300 tag 2 in recv $ext_if2 keep-state
# поскольку возникает проблема с доступностью одного адреса через линк
# другого провайдера, можно предположить что входящий интерфейс однозначно
# определяет dst-ip
ipfw add 300 nat 1 in tagged 1
ipfw add 310 nat 2 in tagged 2
ipfw add 320 allow { recv $ext_if1 or recv $ext_if2 }
ipfw add 410 prob 0.5 skipto 450 in recv $int_if keep-state
ipfw add 420 skipto 470 in recv $int_if keep-state
ipfw add 450 nat 1
ipfw add 460 skipto 500
ipfw add 470 nat 2
ipfw add 500 allow in recv $int_if
ipfw add 600 fwd $gw1 tagged 1
ipfw add 700 fwd $gw2 tagged 2
Это несколько приблизительно, но суть, надеюсь, понятна.
> Как поступать с UDP?
>
точно также. стейты просто запоминают 5 значений:
номер протокола, (src|dst)-(ip|port)
Что такое "TCP-сессия" они не знают и знать не хотят.