Перейти до

Как разрулить 2 линка в инет.


Рекомендованные сообщения

Вводные:

Появился 2 канал в Интернет ..естественно захотелось прикрутить его к уже существующей машине которая успешно раздает инет на юзеров (Linux MDK8.1 Iptables+STG)

 

Задача: прикрутить 2 канал к существующему серваку и пустить часть пользователей по нему.

 

Танцы с бубнами:

Благополучно установил еще одну сетевую подключил модем прописал на сетевой ай-пи настройки..пинганул шлюз нового провайдера...Все работает. :-)

И тут увидел что такого параметра как "ШЛЮЗ" у каждого интерфейса нет..

он только 1 общий..."Дефаулт роут"

 

Естественно по этой причине пинги в инет по новому интерфейсу бегать категорически отказываются....

 

прописал вручную:

 

route add -net 0.0.0.0 netmask 0.0.0.0 gw yyy.yyy.yyy.yyy (шлюз нового провайдера)

 

Теперь если пингу явно задать интерфейс то все бегает вроде нормально, НО

 

при выводе таблицы роутинга командой route наблюдаются жуткие тормоза...

И что самое гадское сервер перестал роутить.... при подключении с клиентских компов трасерт показывает затык сразу на серваке :-((((

 

Подправил таблицу роутинга добавив метрику route add -net 0.0.0.0 netmask 0.0.0.0 gw yyy.yyy.yyy.yyy metric 1

 

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

 

Подумал "УФФФ слава богу теперь от НАТить кого нужно на новый интерфейс и все ок" Но НЕ ТУТ ТО БЫЛО!!!

 

Тут лирическое отступление:

(Выход в инет реализован с помощью Iptables...

Правила цепочек INPUT и OUTPUT прописаны статически...(привязки к интерфейсам нет)

Также статически прописано использования NAT

iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth1 -j SNAT --to-source xxx.xxx.xxx.xxx+1 (айпи моего старого внешнего интерфейса)

На долю STG (а точнее сприптов Onconnect и ondisconnect) приходится добавление\удаление правил FORWARD

(iptables -A(-D) FORWARD -s $ip -j ACCEPT

iptables -A(-D) FORWARD -d $ip -j ACCEPT)

Может конечно и криво, но работает четко

Конец отступления

 

"Итак" подумал я все что мне нужно єто всего лишь отфорвардить и отнатить пакеты от юзеров на нужный мне интерфейс. И добавил такие правила:

 

iptables -t nat -I POSTROUTING 1 -s 192.168.0.3 -o eth2(новый интерфейс) -j SNAT --to-source yyy.yyy.yyy.yyy+1 (айпи моего нового внешнего интерфейса)

iptables -A FORWARD -s 192.168.0.3 -o eth2(для надежности) -j ACCEPT

iptables -A FORWARD -d 192.168.0.3 -j ACCEPT

 

 

проверил iptables -t nat -L и iptables -L

все как я и хотел правила находятся в начале обеих цепочек....

 

пробую пропинговать инетовский айпи с машины 192.168.0.3....НИФИГА..

трасерт показывает затык на моем роутере... пингую с этой же машины шлюз нового провайдера....ВСЕ ОК... при этом tcpdump показывает что мой роутер успешно НАТит мои пинги провайдерского шлюза....

 

Делаю "Ход конем" и обратно правлю таблицу маршрутизации убирая метрику

 

route add -net 0.0.0.0 netmask 0.0.0.0 gw yyy.yyy.yyy.yyy (шлюз нового провайдера) ...

не работает...

убираю шлюз старого провайдера....РАБОТАЕТ.... МЛЯ :mrrr:

 

 

Итоги..

К чему я пришел одновремено указание 2 шлюзов в интернет с одинаковыми метриками приводит к неработоспособности роутинга...

Указание новому шлюзу большей метрики восстанавливает работоспособность роутинга через старый шлюз, но при этом с помощью iptables я не могу добиться чтобы трафик от определенных клиентов шел по новому каналу....

 

Сам НАТ и форвардинг прекрасно фунциклирует (с клиентской машины с фейковым айпи прекрасно пингуется шлюз нового проавйдера)

 

То есть вилы именно в таблице роутинга....

 

Как разрулить ума не приложу...

Вобщем "помогите люди добрые" :)

Ссылка на сообщение
Поделиться на других сайтах

всё просто.....

вот к примеру на сетку 82,193,96,0/19 нужно ходить через провайдера 2, всё остальное через прова 1:

 

route add default gateway [шлюз_пров1]

ip route add 82.193.96.0/19 via [шлюз_пров2] dev [eth_пров2]

 

после этого трафик для 82.193.96.0/19 будет ходит через пров2 а остальное через пров1

 

 

з.ы. Iproute2 рулит. Курить тут: http://www.opennet.ru/cgi-bin/opennet/ks.c...=16&zoom=&base=

Ссылка на сообщение
Поделиться на других сайтах

Вы наверное неправильно поняли..вопрос не в том чтобы пускать в определенную подсеть по новому каналу...

Как добавить в таблицу роут на определенную подсеть я и сам знаю ;-).

Задача в том чтобы одновременно существовали 2 полноценных канала доступа в интернет на 1 машине... И часть пользователей направлялась по старому каналу а часть по новому. Причем нужно именно статическое распределение например айпи 192.168.0.1-10 ходят в инет по старому каналу, а 192.168.0.11-100 по новому каналу

Ссылка на сообщение
Поделиться на других сайтах

Я линк зачем дал?

http://www.opennet.ru/base/net/adv_route_qos.txt.html

 

ip route add from .....

 

4. Advanced Routing.

 

  Теперь я приведу несколько примеров, иллюстрирующих возможности

  table-routing.

 

  Для начала рассмотрим вариант простейшей маршрутизации по адресу src.

  Предположим, у нас есть высокоскоростной и дорогой линк на провайдера

  (xDSL) и медленный, но дешёвый линк по коммутируемуму доступу

  (dial-up). Маршрут по умолчанию в основной таблице установлен на xDSL,

  но мы хотим одну из машин внутренней сети направить в нашу медленную

  связь, и освободить таким образом основной канал. Теперь мы создадим

  для этой машины отдельную таблицу маршрутов, которую назовем Manager:

 

      # echo 100 Manager >> /etc/iproute2/rt_tables

 

  Далее создаем правило-селектор по адресу нашей выделенной машины,

  чтобы маршрутизация для нее переходила в новую таблицу:

 

      # ip rule add from 191.216.121.1 table Manager

 

  Осталось добавить маршрут по умолчанию в таблицу Manager (там пока

  пусто), и сбросить кэш маршрутов:

 

      # ip route add default via 191.216.121.14 dev ppp2 table Manager

      # ip route flush cache

 

  Все готово. Здесь ppp2 - наш дешёвый линк. Конечно это можно было

  сделать и не создавая отдельную таблицу маршрутов, это просто пример

  работы с таблицами.

Ссылка на сообщение
Поделиться на других сайтах

Мне кажется, это уже зовется polivy based routing.

Хотя нет, точнее не только это

Не знаю, как на линухе, а на фряхе, я думаю, можно сделать так, чтобы какие-то клиенты ходили через одного прова, а другие через другого.

 

Я думаю, что в ipfw это можно сделать так: приходящий из локалки пакет в зависимости от адреса источника форвардить на нужный шлюз прова. А когда этот пакет ставить изходящим, NATить и, наверное, ещё раз форвардить до нужного шлюза =))

 

Как это в линуксе сделать - хуз.

Ссылка на сообщение
Поделиться на других сайтах

Актуальная тема. Я вопрос пробовал решать с помощью iproute2 но там немного криво получается, оно не идет по каналу которвй свободнее как хотелось бы, а как получится. И так пока не очистятся кеши. Сейчас какраз думаю что можно сделать. А пока использую через прокси.

Ссылка на сообщение
Поделиться на других сайтах

Народ! о чёмвы говорите?

что криво? что нетак?

да на базе iproute2 можно реализовать всё... было бы желание почитать....

всё работает прекрасно у меня на 2х каналах. и по клиентам и по подсетям и по типу трафика.

Я лично видел как таким образому роутятся 4 канала..... и никаких проблем...

2XoRe: не знаю как там на фри, но судя по твоим догадкам это геморнее и не логичнее чем в линухах....

Ссылка на сообщение
Поделиться на других сайтах

2Guest_Andrew_green:

Блин! какие ленивые люди.... я вам линку дал, а вы даже почитать не можете?

 

1. в iptables маркируем трафик который нас интересует

2. весь маркированый трафик загоняем в таблицу

3. у таблицы есть свой гейтвей....

Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Вхід

Уже зарегистрированы? Войдите здесь.

Войти сейчас
  • Зараз на сторінці   0 користувачів

    Немає користувачів, що переглядають цю сторінку.

×
×
  • Створити нове...