URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 82478
[ Назад ]

Исходное сообщение
"FreeBSD 2 канала"

Отправлено M_Maniac , 20-Окт-08 11:47 
Понимаю что тема уже пережевана, но ничего не выходит.
Задача стоит в следующем:
Есть 2 канала
rl0 - оплата по трафику IP 81.200.6.190 Шлюз 81.200.6.1
rl2 - безлимитка "стрим" IP 192.168.1.2 Шлюз 192.168.1.1

Внутреняя сетка
rl1 - 192.168.0.0

Задача состоит в том, чтобы из внутренней сетки пользователи ходили в инет и получали HTTP через rl0, весь остальной трафик должен идти через канал с реальными адресами.

На серваке стоит Squid, даже если в нем указывать tcp_outgoing_address 192.168.1.2 то через diver трафик всеравно направляется на rl0, как это решить ??

Пробывал по даннй статье, всеравно не выходит.
http://www.samag.ru/art/02.2007/02.2007_09.html


Содержание

Сообщения в этом обсуждении
"FreeBSD 2 канала"
Отправлено PavelR , 20-Окт-08 11:55 
>[оверквотинг удален]
>Задача состоит в том, чтобы из внутренней сетки пользователи ходили в инет
>и получали HTTP через rl0, весь остальной трафик должен идти через
>канал с реальными адресами.
>
>На серваке стоит Squid, даже если в нем указывать tcp_outgoing_address 192.168.1.2 то
>через diver трафик всеравно направляется на rl0, как это решить ??
>
>
>Пробывал по даннй статье, всеравно не выходит.
>http://www.samag.ru/art/02.2007/02.2007_09.html

Слабо пробовали, в статье расписано достаточно подробно, чтобы добиться желаемого эффекта.



"FreeBSD 2 канала"
Отправлено M_Maniac , 20-Окт-08 12:05 
>[оверквотинг удален]
>>канал с реальными адресами.
>>
>>На серваке стоит Squid, даже если в нем указывать tcp_outgoing_address 192.168.1.2 то
>>через diver трафик всеравно направляется на rl0, как это решить ??
>>
>>
>>Пробывал по даннй статье, всеравно не выходит.
>>http://www.samag.ru/art/02.2007/02.2007_09.html
>
>Слабо пробовали, в статье расписано достаточно подробно, чтобы добиться желаемого эффекта.

Может тогда подскажите где слабо пробывал ??


"FreeBSD 2 канала"
Отправлено PavelR , 20-Окт-08 12:38 
>[оверквотинг удален]
>>>На серваке стоит Squid, даже если в нем указывать tcp_outgoing_address 192.168.1.2 то
>>>через diver трафик всеравно направляется на rl0, как это решить ??
>>>
>>>
>>>Пробывал по даннй статье, всеравно не выходит.
>>>http://www.samag.ru/art/02.2007/02.2007_09.html
>>
>>Слабо пробовали, в статье расписано достаточно подробно, чтобы добиться желаемого эффекта.
>
>Может тогда подскажите где слабо пробывал ??

А может вы тогда скажете, что сделали ?

"у меня не получается ездить на машине, что я делаю не так" ?


"FreeBSD 2 канала"
Отправлено M_Maniac , 20-Окт-08 12:51 
>А может вы тогда скажете, что сделали ?
>
>"у меня не получается ездить на машине, что я делаю не так"
>?

rl0 IP 81.200.6.190 Шлюз 81.200.6.1
rl2 IP 192.168.1.2 Шлюз 192.168.1.1


rl1 интерфейс локалки. IP 192.168.0.1

для начала взял не разбивал трафик по портам, попробывал разбить трафик на 2 ИП
192.168.0.4 - должен ходить через rl2
192.168.0.44 - должен ходить через rl0


# natd -n rl0 -p 8668
# natd -n rl2 -p 8669

defaultrouter="81.200.6.1"

divert 8669 log ip from 192.168.0.4 to any    
divert 8668 log ip from 192.168.0.44 to any  
fwd 192.168.1.1 log ip from 192.168.1.2 to any
fwd 81.200.6.1 log ip from 81.200.6.190 to any
divert 8669 log ip from any to 192.168.1.2    
divert 8668 log ip from any to 81.200.6.190  


В итоге в логах получаю
Divert 8672 TCP 192.168.0.4:4728 217.23.134.43:80 in via rl1            
Divert 8672 TCP 192.168.0.4:4728 217.23.134.43:80 out via rl0          
Forward to 192.168.1.1 TCP 192.168.1.2:4728 217.23.134.43:80 out via rl0
Divert 8672 TCP 192.168.0.4:4728 217.23.134.43:80 in via rl1            
Divert 8672 TCP 192.168.0.4:4728 217.23.134.43:80 out via rl0          
Forward to 192.168.1.1 TCP 192.168.1.2:4728 217.23.134.43:80 out via rl0
Divert 8672 TCP 192.168.0.4:4728 217.23.134.43:80 in via rl1            
Divert 8672 TCP 192.168.0.4:4728 217.23.134.43:80 out via rl0          
Forward to 192.168.1.1 TCP 192.168.1.2:4728 217.23.134.43:80 out via rl0


Где я ошибаюсь и где я не дочитал ??


"FreeBSD 2 канала"
Отправлено PavelR , 20-Окт-08 16:04 

>
>Где я ошибаюсь и где я не дочитал ??

В том, что каждый пакет проходит файрволл на входе в одну сетевую и второй раз на выходе через вторую.

форвард и нат надо делать только на выходе. На входе ничего делать не надо.

Добавьте in via rl0, in via rl2 в соответствующие правила.

Не забывайте, что пакет всё еще стремится пойти в тот интерфейс, куда ему говорит таблица маршрутизации.


Без дефолтного шлюза форварда также не будет )


"FreeBSD 2 канала"
Отправлено M_Maniac , 20-Окт-08 16:42 
>[оверквотинг удален]
>форвард и нат надо делать только на выходе. На входе ничего делать
>не надо.
>
>Добавьте in via rl0, in via rl2 в соответствующие правила.
>
>Не забывайте, что пакет всё еще стремится пойти в тот интерфейс, куда
>ему говорит таблица маршрутизации.
>
>
>Без дефолтного шлюза форварда также не будет )

если я правильно вас понял, то сделал вот так
divert 8669 log ip from 192.168.0.4 to any            
divert 8668 log ip from 192.168.0.44 to any          
fwd 192.168.1.1 log ip from 192.168.1.2 to any        
fwd 81.200.6.1 log ip from 81.200.6.190 to any        
divert 8669 log ip from any to 192.168.1.2 in via rl2
divert 8668 log ip from any to 81.200.6.190 in via rl0

но это ничего не дало


"FreeBSD 2 канала"
Отправлено PavelR , 20-Окт-08 19:49 
>[оверквотинг удален]
>
>если я правильно вас понял, то сделал вот так
>divert 8669 log ip from 192.168.0.4 to any
>divert 8668 log ip from 192.168.0.44 to any
>fwd 192.168.1.1 log ip from 192.168.1.2 to any
>fwd 81.200.6.1 log ip from 81.200.6.190 to any
>divert 8669 log ip from any to 192.168.1.2 in via rl2
>divert 8668 log ip from any to 81.200.6.190 in via rl0
>
>но это ничего не дало

Мля, тупость  просто ненавижу. Перечитайте мой ответ вам еще раз.

А, вы на это не способны. Чтож, процитирую еще раз:

>форвард и нат надо делать только на выходе. На входе ничего делать
>не надо.

Тяжко разжеванное пережевать ?


"FreeBSD 2 канала"
Отправлено PavelR , 20-Окт-08 19:54 
>[оверквотинг удален]
>>но это ничего не дало
>
>Мля, тупость  просто ненавижу. Перечитайте мой ответ вам еще раз.
>
>А, вы на это не способны. Чтож, процитирую еще раз:
>
>>форвард и нат надо делать только на выходе. На входе ничего делать
>>не надо.
>
>Тяжко разжеванное пережевать ?

Извините, вырвалось.


"FreeBSD 2 канала"
Отправлено M_Maniac , 21-Окт-08 10:13 
>Мля, тупость  просто ненавижу. Перечитайте мой ответ вам еще раз.
>
>А, вы на это не способны. Чтож, процитирую еще раз:
>
>>форвард и нат надо делать только на выходе. На входе ничего делать
>>не надо.
>
>Тяжко разжеванное пережевать ?

Павел, я попросил помощи, а не оскорблений.

Вы это имели в виду ??
divert 8669 log ip from 192.168.0.4 to any            
divert 8668 log ip from 192.168.0.44 to any          
divert 8669 log ip from any to 192.168.1.2 in via rl2
divert 8668 log ip from any to 81.200.6.190 in via rl0
fwd 192.168.1.1 log ip from 192.168.1.2 to any        
fwd 81.200.6.1 log ip from 81.200.6.190 to any        



"FreeBSD 2 канала"
Отправлено PavelR , 21-Окт-08 12:17 
>Вы это имели в виду ??
>divert 8669 log ip from 192.168.0.4 to any
>divert 8668 log ip from 192.168.0.44 to any
>divert 8669 log ip from any to 192.168.1.2 in via rl2
>divert 8668 log ip from any to 81.200.6.190 in via rl0
>fwd 192.168.1.1 log ip from 192.168.1.2 to any
>fwd 81.200.6.1 log ip from 81.200.6.190 to any
> В чем я ошибся?

В том, что каждый пакет проходит файрволл на входе в одну сетевую и второй раз на выходе через вторую.

форвард и нат надо делать только на выходе. На входе ничего делать не надо.

Добавьте in via rl0, in via rl2 в соответствующие правила.

Не забывайте, что пакет всё еще стремится пойти в тот интерфейс, куда ему говорит таблица маршрутизации.

Без дефолтного шлюза форварда также не будет )

-----------------

Могу повторить CAPS LOCK-ом.


"FreeBSD 2 канала"
Отправлено Аноним , 20-Окт-08 20:47 
>[оверквотинг удален]
>Задача состоит в том, чтобы из внутренней сетки пользователи ходили в инет
>и получали HTTP через rl0, весь остальной трафик должен идти через
>канал с реальными адресами.
>
>На серваке стоит Squid, даже если в нем указывать tcp_outgoing_address 192.168.1.2 то
>через diver трафик всеравно направляется на rl0, как это решить ??
>
>
>Пробывал по даннй статье, всеравно не выходит.
>http://www.samag.ru/art/02.2007/02.2007_09.html

юзай kernel nat

$cmd nat 10 config ip $NATIP1
$cmd nat 20 config ip $NATIP2

$cmd add nat 20 ip from $myaddr to $anyaddr
$cmd add fwd $GW2 ip from $admins to 159.182.111.0/24
$cmd add nat 10 ip from 192.168.0.0/16 to not 192.168.0.0/16
$cmd add nat 10 ip from any to $NATIP1 via $uif
$cmd add nat 20 ip from 192.168.0.0/16 to not 192.168.0.0/16
$cmd add nat 20 ip from any to $NATIP2 via $tif

Это примерно... Но у меня получалось...


"FreeBSD 2 канала"
Отправлено Аноним , 20-Окт-08 20:49 
>[оверквотинг удален]
>$cmd nat 20 config ip $NATIP2
>
>$cmd add nat 20 ip from $myaddr to $anyaddr
>$cmd add fwd $GW2 ip from $admins to 159.182.111.0/24
>$cmd add nat 10 ip from 192.168.0.0/16 to not 192.168.0.0/16
>$cmd add nat 10 ip from any to $NATIP1 via $uif
>$cmd add nat 20 ip from 192.168.0.0/16 to not 192.168.0.0/16
>$cmd add nat 20 ip from any to $NATIP2 via $tif
>
>Это примерно... Но у меня получалось...

поправочка, со спеху опечатался.

$cmd nat 10 config ip $NATIP1
$cmd nat 20 config ip $NATIP2

$cmd add nat 20 ip from $myaddr to $anyaddr
$cmd add fwd $GW2 ip from $myaddr to $anyaddr
$cmd add nat 10 ip from 192.168.0.0/16 to not 192.168.0.0/16
$cmd add nat 10 ip from any to $NATIP1 via $uif
$cmd add nat 20 ip from 192.168.0.0/16 to not 192.168.0.0/16
$cmd add nat 20 ip from any to $NATIP2 via $tif



"FreeBSD 2 канала"
Отправлено M_Maniac , 21-Окт-08 11:59 
>$cmd nat 10 config ip $NATIP1
>$cmd nat 20 config ip $NATIP2
>
>$cmd add nat 20 ip from $myaddr to $anyaddr
>$cmd add fwd $GW2 ip from $myaddr to $anyaddr
>$cmd add nat 10 ip from 192.168.0.0/16 to not 192.168.0.0/16
>$cmd add nat 10 ip from any to $NATIP1 via $uif
>$cmd add nat 20 ip from 192.168.0.0/16 to not 192.168.0.0/16
>$cmd add nat 20 ip from any to $NATIP2 via $tif

Сделал по аналогии всеравно стремиться на rl0
divert 8669 log ip from 192.168.0.4 to any        
fwd 192.168.1.1 log ip from 192.168.1.2 to any    
deny ip from 192.168.0.0/16 to not 192.168.0.0/16  
divert 8668 log ip from any to 81.200.6.190 via rl0
deny ip from 192.168.0.0/16 to not 192.168.0.0/16  
divert 8669 log ip from any to 192.168.1.2 via rl2


"FreeBSD 2 канала"
Отправлено M_Maniac , 21-Окт-08 17:12 
Склоняюсь к тому, что Павел сам не знает как это сделать, раз не может помочь или показать рабочий пример.



"FreeBSD 2 канала"
Отправлено PavelR , 21-Окт-08 18:16 
>Склоняюсь к тому, что Павел сам не знает как это сделать, раз
>не может помочь или показать рабочий пример.

да склоняйся к чему хочешь, если прочитать и исправить свои правила не умеешь.


повторять в третий раз написанное мной выше я не буду. Если внимательности ноль - помогать бесполезно. До готового решения в моих словах - полшага.

Мляя. Все таки повторю.

Ключевой момент: пакет проходит через файрволл два раза.

Вы его крутите на входе.

НАДО ПАКЕТ NAT-ить НА ВЫХОДЕ.


"FreeBSD 2 канала"
Отправлено JavaScript , 22-Окт-08 01:09 
выбираем маршрутом по умолчанию - шлюз первого провайдера
  route add default 81.200.6.1

запускаем два natd:
  /sbin/natd -p 8668 -alias_address 81.200.6.190
  /sbin/natd -p 8669 -alias_address 192.168.1.2

сам ipfirewall:

add 100 allow ip from any to any via lo0
add 200 deny ip from 127.0.0.0/8 to any
add 300 deny ip from any to 127.0.0.0/8

add 500 skipto 10000 ip from any to any in recv rl1
add 550 skipto 15000 ip from any to any out xmit rl1
add 600 skipto 20000 ip from any to any in recv rl0
add 650 skipto 25000 ip from any to any out xmit rl0
add 700 skipto 30000 ip from any to any in recv rl2
add 750 skipto 35000 ip from any to any out xmit rl2

add 900 deny log ip from any to any

add 10000 cont ip from any to any
# тут можно блокировать трафик из локалка
add 14000 allow ip from any to any

add 15000 count ip from any to any
# тут можно блокировать трафик в локалку
add 19000 allow ip from any to any

# rl0 - in
add 20000 count ip from any to any
add 21050 deny ip from any to not 81.200.6.190
add 21100 divert 8668 ip from any to any
add 24000 allow ip from any to any

#rl0 - out - сюда пойдет весь трафик!!! - тут вся логика! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !
add 25000 count ip from any to any

# скипаєм на второй диверт трафик, который должен поити на стрим - например весь http из локалки
add 26000 add skipto 28000 tcp from 192.168.0.0/24 to any 80,443

# что не скипнулось - попадает на первый диверт, маскарадится адресом 81.200.6.190 и уходит нашлюз по умолчанию
add 27000 divert 8668 ip from any to any
add 27000 allow ip from any to any

# сюда попадает трафик, который должен ути на стрим
# маскарадим его адресом 192.168.1.2 и принудительно отправляєм на шлюз стрима
add 28000 divert 8669 ip from any to any
add 28100 fwd 192.168.1.1 ip from any to any

add 29000 deny log ip from any to any
# конец логики! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !


#rl2 strim - in
add 30000 count ip from any to any
add 31050 deny ip from any to not 192.168.1.2
add 31100 divert 8669 ip from any to any
add 34000 allow ip from any to any

#rl2 strim - out - сюда вроде ничего не попадет
add 35000 count ip from any to any
add 37000 divert  8669 ip from any to any
add 39000 allow ip from any to any


add 65000 deny log ip from any to any