Jump to content
Калькуляторы

Linux часть сайтов грузить с другого eth

Возникла дурацкая задача, нет понимания чем ее решать.

На фирме дорогой инет с платой за трафик.

Изначально на squid были запрещены всякие видеосервисы типа yotube? но сейчас возникла производственная необходимость им пользоваться.

Для этого был куплен безлимитный радиоканал, который естественно все запросы предприятия не потянет.

Есть мысль, повесить на этот радиоканал всякие низкоприоритетные сервисы типа youtube.com и прочего.

Сходу совершенно непонятно, чем это сделать?

Где можно прописать, что к примеру для сайта *.youtube.com default route eth2 ?

Подскажите, в какую сторону смотреть?

.

Share this post


Link to post
Share on other sites

ip r add подсеть via адрес_на_eth2

Как-то так. Подсети нужно искать самому.

Share this post


Link to post
Share on other sites

Abram

Это и так очевидно. Вопрос-то как сделать по имени домена, а не по IP.

 

Michail

Делайте так:

1. Пишите acl в squid

2. Используете директиву tcp_outgoing_address сквида, чтобы назначить src ip для определённых доменов

3. По исходящему src ip с помощью iptables в таблице mangle маркируете интересный исходящий трафик

4. С помощью ip rule выпускаете промаркированный трафик через нужный gw.

5. Не забудьте отключить rp_filter, иначе обратный трафик через 2ой интерфейс будет дропаться.

 

Идея понятна?

Edited by s.lobanov

Share this post


Link to post
Share on other sites
Michail

Делайте так:

1. Пишите acl в squid

2. Используете директиву tcp_outgoing_address сквида, чтобы назначить src ip для определённых доменов

3. По исходящему src ip с помощью iptables в таблице mangle маркируете интересный исходящий трафик

4. С помощью ip rule выпускаете промаркированный трафик через нужный gw.

5. Не забудьте отключить rp_filter, иначе обратный трафик через 2ой интерфейс будет дропаться.

 

Идея понятна?

В общих чертах да, но подробней придется читать документацию.

Более простых вариантов не существует?

Или более подробных руководств вам не попадалось?

Share this post


Link to post
Share on other sites

Мне кажется кабельный оператор вас разводит, может с ним проще поговорить?

Это как так что вам по дохлому радио дают без учёта трафика, а на кабеле дерут за трафик?

Share this post


Link to post
Share on other sites
Мне кажется кабельный оператор вас разводит, может с ним проще поговорить?

Это как так что вам по дохлому радио дают без учёта трафика, а на кабеле дерут за трафик?

Увы, интернет прилагается к договору аренды, где прямым текстом запрещено пользоваться услугами других операторов связи. Канал 100 мегабит, трафик стоит 0,1$ мег, что для youtube - убийственно. Соответственно дополнительный радиоканал это махровая нелегальщина, с целью снизить ежемесячные платежи. Использование дополнительного канала надо замаскировать.

Share this post


Link to post
Share on other sites
Или более подробных руководств вам не попадалось?

Иногда пишу более подробно, но squid не входит в мою область интересов, поэтому всю схему собирать не буду.

По iptables/ip rule могу более подробно расписать, если надо, тогда вам останется только разобраться с acl и установкой source ip

Share this post


Link to post
Share on other sites
Более простых вариантов не существует?

Или более подробных руководств вам не попадалось?

1. ACL-ем описываете youtube-овский домены, ну и другие по желанию.

http://www.squid-cache.org/Doc/config/acl/

2. Squid-ом разворачиваете трафик на них.

http://www.squid-cache.org/Doc/config/tcp_outgoing_address/

 

А вот зачем s.lobanov предлагает ещё iptables-ом пакеты метить я как-то не догоняю...

Share this post


Link to post
Share on other sites

Kirya

Ну так два оператора, в таблице маршрутизации main будет дефолт на основного(дорогого) оператора, в дополнительной таблице маршрутизации(создаём её в файлике /etc/iproute2/rt_tables) будет дефолт на второго оператора. Если не метить трафик и не использовать эти метки в ip rule, то тогда пакеты до ютубов пойдут через default gw таблицы main с src ip второго оператора, что является в чистейшем виде ip spoofing-ом и такой абонентский трафик основной сервис-провайдер должен дропать

Edited by s.lobanov

Share this post


Link to post
Share on other sites
Или более подробных руководств вам не попадалось?

Иногда пишу более подробно, но squid не входит в мою область интересов, поэтому всю схему собирать не буду.

По iptables/ip rule могу более подробно расписать, если надо, тогда вам останется только разобраться с acl и установкой source ip

Со сквидом то понятно, там все относительно просто.

примерно так:

acl radio_net src 10.0.1.0/24

tcp_outgoing_address 10.1.0.2 radio_net

tcp_outgoing_address 10.1.0.3

 

А вот с iptables пока разбираюсь, не совсем понятно.

Share this post


Link to post
Share on other sites

Допустим, на eth1(радио-канал) ip 1.1.1.2, со стороны провайдера 1.1.1.1

 

Тогда

acl radio_net ютубы

tcp_outgoing_address 1.1.1.2 radio_net

 

Дальше добавляете таблицу radio в /etc/iproute2/rt_tables , далее:

 

ip ro add t radio default via 1.1.1.1

ip ru add fwmark 100 lookup radio

iptables -t mangle -I OUTPUT -s 1.1.1.2 -j MARK --set-mark 100

 

 

default gw в таблице main оставляете, т.е. дорого провайдера

Share this post


Link to post
Share on other sites
Kirya

Ну так два оператора, в таблице маршрутизации main будет дефолт на основного(дорогого) оператора, в дополнительной таблице маршрутизации(создаём её в файлике /etc/iproute2/rt_tables) будет дефолт на второго оператора. Если не метить трафик и не использовать эти метки в ip rule, то тогда пакеты до ютубов пойдут через default gw таблицы main с src ip второго оператора, что является в чистейшем виде ip spoofing-ом и такой абонентский трафик основной сервис-провайдер должен дропать

Это у Вас слишком большой опыт работы в операторских сетях. :)

На 99,9% у Michail стоящий Linux выполняет и функции NAT-а.

Иначе б мы услышали вопрос как средствами BGP развернуть youtube во второй канал. :)))

Соответственно метить ничего не надо.

Просто забивается командочка

ip route add default dev $IF2 src $IP2 metric 2

где нужно подставить значения второго интерфейса.

(Пишу на память, linux-а под рукой нет)

Iproute2 в отличии от сисек умеет роутить по src-ip.

Далее все, имеющее IP второго интерфейса, полетит соответсвенно через второй канал.

Edited by Kirya

Share this post


Link to post
Share on other sites
Kirya

Ну так два оператора, в таблице маршрутизации main будет дефолт на основного(дорогого) оператора, в дополнительной таблице маршрутизации(создаём её в файлике /etc/iproute2/rt_tables) будет дефолт на второго оператора. Если не метить трафик и не использовать эти метки в ip rule, то тогда пакеты до ютубов пойдут через default gw таблицы main с src ip второго оператора, что является в чистейшем виде ip spoofing-ом и такой абонентский трафик основной сервис-провайдер должен дропать

Это у Вас слишком большой опыт работы в операторских сетях. :)

На 99,9% у Michail стоящий Linux выполняет и функции NAT-а.

Иначе б мы услышали вопрос как средствами BGP развернуть youtube во второй канал. :)))

Соответственно метить ничего не надо.

Просто забивается командочка

ip route add default dev $IF2 src $IP2 metric 2

где нужно подставить значения второго интерфейса.

(Пишу на память, linux-а под рукой нет)

Iproute2 в отличии от сисек умеет роутить по src-ip.

Далее все, имеющее IP второго интерфейса, полетит соответсвенно через второй канал.

Точно!

"Внутриофис" естественно натится. ;)

Спасибо за упрощение задачи.

Share this post


Link to post
Share on other sites
Просто забивается командочка

ip route add default dev $IF2 src $IP2 metric 2

где нужно подставить значения второго интерфейса.

(Пишу на память, linux-а под рукой нет)

Iproute2 в отличии от сисек умеет роутить по src-ip.

Далее все, имеющее IP второго интерфейса, полетит соответсвенно через второй канал.

PBR делается с помощью ip rule, а не ip route

 

Что-то я не вижу в документации на ip route возможность классификации пакетов по src_ip. http://www.policyrouting.org/iproute2.doc.html#ss9.5.1

 

src это указание предпочительного src_ip, которое используется в случае, если приложение само не заказывает src_ip (тогда он назначается по лучшей записи в таблице маршрутизации). К маршрутизации на основе адреса источника вроде как никакого отношения не имеет.

 

Если я не прав, подскажите, с удовольствием будут использовать ip route вместо iptables+ip rule+ip route.

 

"Внутриофис" естественно натится. ;)

Исходя из Вашего первого у вас в офисе используется прокси, а не нат. Или и то и то? Или прозрачная прокси? Уточните, пожалуйста.

Share this post


Link to post
Share on other sites
"Внутриофис" естественно натится. ;)

Исходя из Вашего первого у вас в офисе используется прокси, а не нат. Или и то и то? Или прозрачная прокси? Уточните, пожалуйста.

NAT + прозрачный squid на который трафик заворачивает iptables.

Внутриофисные компы имеют адреса из 192 подсети.

Edited by Michail

Share this post


Link to post
Share on other sites
Т.е. на squid заворачивается только 80ый порт?
Вот так заворачивается:

iptables -t nat -A PREROUTING -s 192.168.Х.0/24 -i eth1 -p tcp -m multiport --dport 80,8080 -j DNAT --to 192.168.Х.Х:3128

 

 

 

Share this post


Link to post
Share on other sites
Если я не прав, подскажите, с удовольствием будут использовать ip route вместо iptables+ip rule+ip route.
Хочешь корректно-документированно работать через ip rule - No Problem.

ip rule add from IP_2 table Radio

ip route add default via GW_2 src IP_2 table Radio

 

Зачем только в этой задаче лишнюю маркировку делать - не понимаю.

 

ps. Данная схема кстати в дальнейшем всего лишь игрой содержимого таблицы Radio позволит принудительно заворачивать

не-web-трафик нужных ip внутрисети в радиоканал.

Share this post


Link to post
Share on other sites
Если я не прав, подскажите, с удовольствием будут использовать ip route вместо iptables+ip rule+ip route.
Хочешь корректно-документированно работать через ip rule - No Problem.

ip rule add from IP_2 table Radio

ip route add default via GW_2 src IP_2 table Radio

 

Зачем только в этой задаче лишнюю маркировку делать - не понимаю.

Ага, так согласен. Забыл что у rule есть селектор from, поэтому сходу дал универсальное решение(с помощью mark).

 

Всё же интересно, без ip rule можно обойтись? похоже что нельзя.

Share this post


Link to post
Share on other sites

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

 

Поднимаю старую тему, возник дурацкий вопрос, а как проверить, что эта конструкция работает нормально?

Делать с клиентских машин из внутрисети "tracert youtube.com" бессмысленно - пакеты не попадут на squid.

Из браузера youtube.com открывается, но как проверить, что он ходит через правильный интерфейс и что не образовалось "петель"?

 

Сетевая карта с дополнительным каналом - eth2

eth2 addr - 192.168.89.252

eth2 gw - 192.168.89.76

Текущие настройки:

/etc/squid/squid.conf

acl radio_net dstdomain youtube.com

tcp_outgoing_address 192.168.89.76 radio_net

 

/etc/iproute2/rt_tables

100 radio

 

и три команды:

ip ro add t radio default via 192.168.89.252

ip ru add fwmark 100 lookup radio

iptables -t mangle -I OUTPUT -s 192.168.89.76 -j MARK --set-mark 100

 

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

Share this post


Link to post
Share on other sites

Послушать tshark-ом например. Или посмотреть iftop-ом.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this