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

Исходное сообщение
"Squid и два внешних IP(реализация разделения трафика)"

Отправлено edem337 , 04-Апр-07 12:38 
Господа, в недавнем прошлом(месяц назад) перевел тариф с лимитки на безлимит. Как водится обещали приемлемую скорость, в итоге вышло "возвращение в 90е". Долго ругался с провайдером, в итоге дали второй IP и лимит 3Гб с уверенной скоростью.
Теперь стоит вопрос реализации.
Стоит Linux RH 9.0, eth0 - смотрит наружу, eth1 - LAN.
Стоит FireStarter(могу ходить в инет без прокси)
В идеале хочется, чтобы пользователи ходили по страничкам через лимит, а грузили файлы через анлим.
Внешние ip - 83.217.х.х и 83.234.х.х
eth0 -83.234.х.х
Завел alias eth0:0 - 83.217.х.х

Решил проверить на Squid'e
Squid позволяет с помощью ACL создать правило(tcp_outgiong_address) для отправки через нужный канал.
сначала установил ip одного клиента, чисто для проверки
acl S_HOST src 192.168.1.5
tcp_outgoing_address 83.217.х.х S_HOST
запускаю браузер - не рабоатет.
Настраиваю ходить без прокси - идет через et0:0.
до старта aliasa gw 83.234.х.х после - менятеся на 83.217.х.х.
Кто нибудь бился с подобным?


Содержание

Сообщения в этом обсуждении
"Squid и два внешних IP(реализация разделения трафика)"
Отправлено Sloboda , 04-Апр-07 14:18 
iproute2 осваивать
если не получиться, и у меня будет время - подскажу
ключевые слова: /etc/iproute2/rt_tables и в iproute2: table, from, via


"Squid и два внешних IP(реализация разделения трафика)"
Отправлено edem337 , 04-Апр-07 14:57 
>iproute2 осваивать
>если не получиться, и у меня будет время - подскажу
>ключевые слова: /etc/iproute2/rt_tables и в iproute2: table, from, via

прочел статью
http://www.opennet.ru/base/net/iproute2_cebka.txt.html
Познавательная статья
На примере показано каким образом можно клиентские ip раскидать на разные ip провайдеров.
Алгоритм я вижу так
1) настраиваю alias
2) устанавливаю в squid'е ACL
по IP клиента
   acl FAST_HOST src 192.168.1.5
   ...
   acl SLOW_HOST src 192.168.1.100
по расширениям
   acl SLOW_DOWN urlpath_regex -i \.exe$
   ....
   acl SLOW_DOWN urlpath_regex -i \.rar$
по размеру заачки(правда на сколько я читал не все сервера поддерживают)
и  потом подставляю IP-шники своих реальных IP которые смотрят в инет
tcp_outgiong_address 83.217.х.х FAST_HOST
tcp_outgiong_address 83.234.х.х SLOW_HOST
3)  далее для пакетов должны быть применены соответсвующие GetWay, то бишь
FAST_HOST(начальство etc.) - GW 83.217.х.GW
SLOW_DOWN (файлы+простые смертные) -  GW 83.234.х.GW

Затруднение у меня в пункте 3. Но возможно я что-то упустил.



"Squid и два внешних IP(реализация разделения трафика)"
Отправлено Sloboda , 04-Апр-07 15:31 
всё правильно и статья хорошая

"Squid и два внешних IP(реализация разделения трафика)"
Отправлено edem337 , 04-Апр-07 16:31 
>всё правильно и статья хорошая
Статью изучил, вот только вопрос если честно возникает следкющий
Вроде как бы iproute надо пакеты

полагаю, что разруливать должно быть что-то типа, по живому тестить пока не могу
#echo 200 inet_dsl1 >> /etc/iproute2/rt_tables
#echo 201 inet_dsl2 >> /etc/iproute2/rt_tables
#ip route add default via 83.217.x.GW dev eth0:0 table inet_dsl1
#ip route add via 83.234.x.GW dev eth0 table inet_dsl2

Но вопрос - как мне подать через squid команду(отмаркировать пакет) чтобы он пошел при объявлении tcp_outgoing_address именно по тому GW?


"Squid и два внешних IP(реализация разделения трафика)"
Отправлено Sloboda , 04-Апр-07 17:10 
>Но вопрос - как мне подать через squid команду(отмаркировать пакет) чтобы он
>пошел при объявлении tcp_outgoing_address именно по тому GW?

это не сквид делает
сквид выставляет source
а роутингом рулит ядро :-) (iproute2 - это userspace-утилита)

перечитай статью на предмет таких конструкций
# ip rule add from 192.168.1.20 table inet_adsl


"Squid и два внешних IP(реализация разделения трафика)"
Отправлено edem337 , 05-Апр-07 14:15 
>это не сквид делает
>сквид выставляет source
>а роутингом рулит ядро :-) (iproute2 - это userspace-утилита)
Прошу прощения за squid.

>перечитай статью на предмет таких конструкций
># ip rule add from 192.168.1.20 table inet_adsl
В описанном случае идет пересылка пакетов от определенных IP в таблицу маршрутизации inet_dsl.
----
1)
создаем таблицу маршрутов для медленного DSL(slow_dsl)
# echo 200 slow_dsl > /etc/iproute2/rt_tables
говорим 192.168.1.6 ходить через таблицу маршрутов slow_dsl
# ip rule add from 192.168.1.6 table slow_dsl
устанавливаем маршрут по умолчанию для slow_dsl с eth0 ходить через шлюз 83.234.0.GW
# ip route add default via 83.234.0.GW dev eth0 table slow_dsl
сбрасываем кэш маршрутизации
# ip route flush cache
2)
создаем таблицу маршрутов для быстрого DSL(fast_dsl)
# echo 201 fast_dsl > /etc/iproute2/rt_tables
говорим 192.168.1.5 ходить через таблицу маршрутов fast_dsl
# ip rule add from 192.168.1.5 table fast_dsl
устанавливаем маршрут по умолчанию для fast_dsl с eth0:0 ходить через шлюз 83.217.0.GW
# ip route add default via 83.217.0.GW dev eth0:0 table fast_dsl
сбрасываем кэш маршрутизации
# ip route flush cache
----
а) Не понял, только в этом случае tcp_outgoing_address необходим или достаточно таблицы маршрутизации?
б) необходимо ли указывать ip моих внешних ip 83.234.x.MyIP_1, 83.217.x.MyIP_2
# ip route add default via 83.234.0.GW dev eth0 src 83.234.x.MyIP_1 table slow_dsl
# ip route add default via 83.234.0.GW dev eth0 src 83.217.x.MyIP_2 table fast_dsl
б) Как разделить закачку файлов и просмотр страниц(что является более приорететным для меня).


"Squid и два внешних IP(реализация разделения трафика)"
Отправлено Sloboda , 05-Апр-07 15:18 
># ip rule add from 192.168.1.6 table slow_dsl
># ip rule add from 192.168.1.5 table fast_dsl
Внимательнее, это правила роутинга для пакетов, которые идут непосредственно с этих ай-пи мимо сквида.

Нужно сделать такие правила для двух инет-ай-пи-адресов _сервера_.

>----
>а) Не понял, только в этом случае tcp_outgoing_address необходим или достаточно таблицы
>маршрутизации?
Необходимо и то, и другое. И это для серверных адресов, потому что в инет уже лезет сквид, а не клиент.

>б) необходимо ли указывать ip моих внешних ip 83.234.x.MyIP_1, 83.217.x.MyIP_2
># ip route add default via 83.234.0.GW dev eth0 src 83.234.x.MyIP_1 table
>slow_dsl
># ip route add default via 83.234.0.GW dev eth0 src 83.217.x.MyIP_2 table
>fast_dsl

Да

>б) Как разделить закачку файлов и просмотр страниц(что является более приорететным для
>меня).

Поищи здесь на опеннете, были обсуждения. С ходу это, увы, сделать невозможно, хотя бы потому, что вначале уставливается соединение (а какому каналу?), потом узнается размер объекта, а потом что? качать по другому каналу? а если авторизация, куки и т.д.

Я делал два порта: 3128 и 3129 (http_port). И потом ацл-ем myPort и tcp_outgoing_address разруливал по каналам.


"Squid и два внешних IP(реализация разделения трафика)"
Отправлено kvs , 05-Апр-07 15:42 
>>это не сквид делает
>>сквид выставляет source
>>а роутингом рулит ядро :-) (iproute2 - это userspace-утилита)
>Прошу прощения за squid.
>
>>перечитай статью на предмет таких конструкций
>># ip rule add from 192.168.1.20 table inet_adsl
>В описанном случае идет пересылка пакетов от определенных IP в таблицу маршрутизации
>inet_dsl.
>----
>1)
>создаем таблицу маршрутов для медленного DSL(slow_dsl)
># echo 200 slow_dsl > /etc/iproute2/rt_tables
>говорим 192.168.1.6 ходить через таблицу маршрутов slow_dsl
># ip rule add from 192.168.1.6 table slow_dsl
>устанавливаем маршрут по умолчанию для slow_dsl с eth0 ходить через шлюз 83.234.0.GW
>
># ip route add default via 83.234.0.GW dev eth0 table slow_dsl
>сбрасываем кэш маршрутизации
># ip route flush cache
>2)
>создаем таблицу маршрутов для быстрого DSL(fast_dsl)
># echo 201 fast_dsl > /etc/iproute2/rt_tables
>говорим 192.168.1.5 ходить через таблицу маршрутов fast_dsl
># ip rule add from 192.168.1.5 table fast_dsl
>устанавливаем маршрут по умолчанию для fast_dsl с eth0:0 ходить через шлюз 83.217.0.GW
>
># ip route add default via 83.217.0.GW dev eth0:0 table fast_dsl
>сбрасываем кэш маршрутизации
># ip route flush cache
>----
>а) Не понял, только в этом случае tcp_outgoing_address необходим или достаточно таблицы
>маршрутизации?
>б) необходимо ли указывать ip моих внешних ip 83.234.x.MyIP_1, 83.217.x.MyIP_2
># ip route add default via 83.234.0.GW dev eth0 src 83.234.x.MyIP_1 table
>slow_dsl
># ip route add default via 83.234.0.GW dev eth0 src 83.217.x.MyIP_2 table
>fast_dsl
>б) Как разделить закачку файлов и просмотр страниц(что является более приорететным для
>меня).

Что вы городите, можно сделать проще. Для этого варианта с  двумя  таблицами ему еще  надо фаер задействовать (маркировку пакетов делать).
1. Сделай шлюзом по умолчанию канал через кот. хочеш что-бы народ качал.
2. Дальше заворачиваеш весь http трафик на проксю (делаеш прозрачный прокси).
3. Дальше по моей прежней  ссылке заворачиваеш несь трафик через tcp_outgoing_address dstdomain .  весь http трафик.
4. можеш еще  настроить что-бы  по http не качали  подрезай трафик по 6-8 кб.  вполне хватит странички смотреть.

PS/ блин теоретики, если это делал и работает, советуйте, а  почитав и советовать, сделай так, или иначе, зачем?????


"Squid и два внешних IP(реализация разделения трафика)"
Отправлено kvs , 05-Апр-07 12:29 
>Господа, в недавнем прошлом(месяц назад) перевел тариф с лимитки на безлимит. Как
>водится обещали приемлемую скорость, в итоге вышло "возвращение в 90е". Долго
>ругался с провайдером, в итоге дали второй IP и лимит 3Гб
>с уверенной скоростью.
>Теперь стоит вопрос реализации.
>Стоит Linux RH 9.0, eth0 - смотрит наружу, eth1 - LAN.
>Стоит FireStarter(могу ходить в инет без прокси)
>В идеале хочется, чтобы пользователи ходили по страничкам через лимит, а грузили
>файлы через анлим.
>Внешние ip - 83.217.х.х и 83.234.х.х
>eth0 -83.234.х.х
>Завел alias eth0:0 - 83.217.х.х
>
>Решил проверить на Squid'e
>Squid позволяет с помощью ACL создать правило(tcp_outgiong_address) для отправки через нужный канал.
>
>сначала установил ip одного клиента, чисто для проверки
>acl S_HOST src 192.168.1.5
>tcp_outgoing_address 83.217.х.х S_HOST
>запускаю браузер - не рабоатет.
>Настраиваю ходить без прокси - идет через et0:0.
>до старта aliasa gw 83.234.х.х после - менятеся на 83.217.х.х.
>Кто нибудь бился с подобным?

Можно и через Squid сделать, а  можно и маркировкой пакетов,
Вот посмотри http://forum.sysadmins.ru/2/158278/?start=15&postdays=0&post...
или  поищи тему "делить канал Squid"   если непонятно стучи в  аську  помогу


"Squid и два внешних IP(реализация разделения трафика)"
Отправлено DDD , 05-Апр-07 15:51 
У меня похожая проблема (только немного подругому)):
есть два канала в инет, надо сделать так чтоб часть клиентов ходила через один канал, другая часть через второй.

Прописываю в squid.conf
acl ttt proxy_auth user_name

tcp_outgoing_address ip_inet2 ttt
tcp_outgoing_address ip_inet1_(default)

и в правилах ipfw (у меня Фря)
02240 489 29351 fwd gw2 ip from ip_inet2 to any
02250 0 0 fwd gw2 udp from ip_inet2 to any
02260 0 0 fwd gw2 icmp from ip_inet2 to any

вот клиент user_name вроде ходит через второй канал (судя по trafshow), а если отключить первую линию, то и у него инета тож нет  

где я не прав?


"Squid и два внешних IP(реализация разделения трафика)"
Отправлено kvs , 06-Апр-07 09:17 
>У меня похожая проблема (только немного подругому)):
>есть два канала в инет, надо сделать так чтоб часть клиентов ходила
>через один канал, другая часть через второй.
>
>Прописываю в squid.conf
>acl ttt proxy_auth user_name
>
>tcp_outgoing_address ip_inet2 ttt
>tcp_outgoing_address ip_inet1_(default)
>
>и в правилах ipfw (у меня Фря)
>02240 489 29351 fwd gw2 ip from ip_inet2 to any
>02250 0 0 fwd gw2 udp from ip_inet2 to any
>02260 0 0 fwd gw2 icmp from ip_inet2 to any
>
>вот клиент user_name вроде ходит через второй канал (судя по trafshow), а
>если отключить первую линию, то и у него инета тож нет
>
>
>где я не прав?

http://forum.sysadmins.ru/2/158278/?start=30&postdays=0&post...

Этот-же  вопрос, возможно ты и задавал :-))


"Squid и два внешних IP(реализация разделения трафика)"
Отправлено edem337 , 09-Апр-07 16:42 
>
>http://forum.sysadmins.ru/2/158278/?start=30&postdays=0&post...
>
>Этот-же  вопрос, возможно ты и задавал :-))

Нет - это не мое, я работаю на RH