On 12.12.2011 23:17, Maxim Ignatenko wrote:
> On пн, 12 гру 2011 17:36:37 Зеленяк Алексей wrote:
>> On 12.12.2011 17:08, Maxim Ignatenko wrote:
>> Мне необходимо чтобы для каждой 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

Вот у меня как-то так:

01000 nat 20 ip from any to 195.181.1.1 in recv ng1
01010 nat 10 ip from any to 89.162.1.5 in recv ng0
01410 count tag 1 ip from any to any in recv ng0 keep-state
01420 count tag 2 ip from any to any in recv ng1 keep-state
03000 nat 10 ip from 10.0.1.0/24 to any out xmit ng1 tagged 1
03010 nat 20 ip from 10.0.1.0/24 to any out xmit ng0 tagged 2
03100 nat 10 ip from 10.0.1.0/24 to any out xmit ng0
03110 nat 20 ip from 10.0.1.0/24 to any out xmit ng1
03410 fwd 91.201.1.5 ip from any to any out xmit ng0 tagged 2
03420 fwd 212.109.4.2 ip from any to any out xmit ng1 tagged 1
03510 fwd 91.201.1.5 ip from 195.18.1.1 to any out xmit ng0
03520 fwd 212.109.4.2 ip from 89.162.1.5 to any out xmit ng1
65000 allow ip from any to any

ipfw nat 10 config ip 89.162.1.5 same_ports reset redirect_port tcp
10.0.1.99:80 10080 redirect_port tcp 10.0.1.17:80 20080
ipfw nat 20 config ip 195.18.1.1 same_ports reset redirect_port tcp
10.0.1.99:80 10080 redirect_port tcp 10.0.1.17:80 20080

default            91.201.1.5       UGS         0  1034622    ng1
default            212.109.4.2      UGS         0  1788715    ng0

Это в 8.2-STABLE, в релизе не работало тегирование в check-state.

Вся эта свистопляска с тегами нужна только для пробросов портов, шлюз
можно правильно разрулить без тегирования. Это я пользовал еще с
какой-то беты 8.0 :).


> # поскольку возникает проблема с доступностью одного адреса через линк
> # другого провайдера, можно предположить что входящий интерфейс однозначно
> # определяет 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-сессия" они не знают и знать не хотят.

-- 
Cheers, Denis Zaika,                            ZDS-RIPE
"Soniko-svyaz" NOC engineer,                    ZDS-UANIC
Donetsk, Ukraine                                ZDS-EUNIC
+380933407844, +380623323232

Ответить