Форум русскоязычного сообщества Ubuntu


Хотите сделать посильный вклад в развитие Ubuntu и русскоязычного сообщества?
Помогите нам с документацией!

Автор Тема: IPROUTE2 + 2 провайдера  (Прочитано 50344 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Scorpikor

  • Автор темы
  • Новичок
  • *
  • Сообщений: 17
    • Просмотр профиля
IPROUTE2 + 2 провайдера
« : 20 Июня 2009, 20:57:13 »
Привет всем !
Есть роутер под Ubuntu 9.04 Desktop
В роутере торчит 3 сетевых карты:

eth0 (IP 10.13.80.111/255.255.248.0 ) смотрит на провайдера №1 с гейтом  с IP 10.13.87.254                  (провайдер№1)
eth1 (IP 192.168.1.2/255.255.255.0 ) смотрит на ADSL модем , который является гейтом  №2 с IP 192.168.1.1   (провайдер №2)

eth2 (IP 10.235.153.227/255.255.255.0) смотрит в локальную сеть

задача - пустить трафик на порты 80, 443,110,25,5190 через провайдера №2 а все остальное пустить через провайдера №1

1) создал 2 таблицы в файле /etc/iproute2/rt_tables

207 A1
208 T1

2) написал скрипт :

#! /bin/sh

# Обнуляем таблицы
ip route flush table A1
ip route flush table T1
#===================================================
# Таблица маршрутов для  провайдера №1
ip route add 10.13.80.0/21 dev eth0 src 10.13.80.111 table T1
ip route add 10.235.153.0/24 dev eth2 src 10.235.153.227 table T1
ip route add 127.0.0.0/8 dev lo table T1
ip route add default via 10.13.87.254 table T1

# Таблица маршрутов для  провайдера №2
ip route add 192.168.1.0/24 dev eth1 src 192.168.1.2 table A1
ip route add 10.235.153.0/24 dev eth2 src 10.235.153.227 table A1
ip route add 127.0.0.0/8 dev lo table A1
ip route add default via 192.168.1.1 table A1

#===================================================

#
ip route add 10.13.80.0/21 dev eth0 src 10.13.80.111
ip route add 192.168.1.0/24 dev eth1 src 192.168.1.2

# Default ROUTE
ip route add default via 10.13.87.254

#===========================
ip rule add from 10.13.80.111 table T1
ip rule add from 192.168.1.2 table A1

#================================================
ip rule add fwmark 1 table A1
ip rule add fwmark 2 table T1

#================================================
ip route flush cache
#================================================
iptables -t mangle -A PREROUTING  -s 10.235.153.0/24 -p tcp --dport 80  -j MARK --set-mark 1
iptables -t mangle -A PREROUTING  -s 10.235.153.0/24 -p tcp --dport 80 -j RETURN
iptables -t mangle -A PREROUTING  -s 10.235.153.0/24 -p tcp --dport 110  -j MARK --set-mark 1
iptables -t mangle -A PREROUTING  -s 10.235.153.0/24 -p tcp --dport 110 -j RETURN
iptables -t mangle -A PREROUTING  -s 10.235.153.0/24 -p tcp --dport 25  -j MARK --set-mark 1
iptables -t mangle -A PREROUTING  -s 10.235.153.0/24 -p tcp --dport 25 -j RETURN
iptables -t mangle -A PREROUTING  -s 10.235.153.0/24 -p tcp --dport 443  -j MARK --set-mark 1
iptables -t mangle -A PREROUTING  -s 10.235.153.0/24 -p tcp --dport 443 -j RETURN
iptables -t mangle -A PREROUTING  -s 10.235.153.0/24 -p tcp --dport 5190  -j MARK --set-mark 1
iptables -t mangle -A PREROUTING  -s 10.235.153.0/24 -p tcp --dport 5190 -j RETURN
iptables -t mangle -A PREROUTING  -s 10.235.153.0/24 -p tcp --dport 443  -j MARK --set-mark 1
iptables -t mangle -A PREROUTING  -s 10.235.153.0/24 -p tcp --dport 443 -j RETURN
iptables -t mangle -A PREROUTING  -s 10.235.153.0/24 -j MARK --set-mark 2
#================================================

iptables -t nat -A POSTROUTING -s 10.235.153.0/24 -m mark --mark 1 -j SNAT --to-source 192.168.1.2
iptables -t nat -A POSTROUTING -s 10.235.153.0/24 -m mark --mark 2 -j SNAT --to-source 10.13.80.111

Проблема в том, что то что идет с локальной сети в интернет через роутер на порты 80, 443,110,25,5190 запросы уходят через второго провайдера, но не возвращаются
Через первого провайдера остальной трафик бегает. В чем может быть бок ?
Пользовался руководством http://www.opennet.ru/base/net/debian_multilink.txt.html

Пользователь решил продолжить мысль 22 Июня 2009, 03:12:15:
Интересная штука наблюдается, если  сделать то же самое но с одной таблицей :
например
1) оставим таблицу T1
2) все что касается таблицы А1 закоментим
3) ip route add default via 192.168.1.1
4) добавим маршруты в сеть первого провайдера ip route add 10.0.0.0/255.0.0.0 dev eth0 src 10.13.80.111
5) заменим SNATы на
iptables -t nat -A POSTROUTING -s 10.235.153.0/24 -m mark --mark 2 -j SNAT --to-source 10.13.80.111
iptables -t nat -A POSTROUTING -s 10.235.153.0/24 -j SNAT --to-source 192.168.1.2
6) маркировку поставим только для направления на подсеть  провайдера 1
iptables -I PREROUTING -t mangle -s 10.235.153.0/24 -i eth2 -d 10.0.0.0/255.0.0.0  -j MARK --set-mark 2

в таком виде работает - если я с компьютера в локальной сети обращаюсь в сеть 10.0.0.0/255.0.0.0 то пакеты нормально бегут не через дефолт гейт а через гейт на 1 провайдера.
Вопрос - разве нельзя в UBUNTU Desktop рулить не по направлениям а по портам ? Кто-нить пробовал такое сделать ?
« Последнее редактирование: 22 Июня 2009, 03:12:15 от Scorpikor »

Оффлайн Nesmit

  • Старожил
  • *
  • Сообщений: 1296
    • Просмотр профиля
Re: IPROUTE2 + 2 провайдера
« Ответ #1 : 23 Июня 2009, 12:56:49 »
а маркировать пакеты по удаленным портам никак?

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28358
    • Просмотр профиля
Re: IPROUTE2 + 2 провайдера
« Ответ #2 : 23 Июня 2009, 13:00:49 »
man iptables
Seriously... это решается двумя строчками, если мой воспаленный бессонницей мозг не клинит.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн Nesmit

  • Старожил
  • *
  • Сообщений: 1296
    • Просмотр профиля
Re: IPROUTE2 + 2 провайдера
« Ответ #3 : 23 Июня 2009, 13:05:16 »
Вот еще бы ссылочку дал на man по лекарству от лени ;) или расширения сознания для ускоренного восприятия. Цены бы небыло. :))))

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28358
    • Просмотр профиля
Re: IPROUTE2 + 2 провайдера
« Ответ #4 : 24 Июня 2009, 22:28:01 »
Целый топик в разделе... мне лично хватило.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

Прежде чем [Отправить], нажми [Просмотр] и прочти собственное сообщение. Сам-то понял, что написал?…

Оффлайн Sam Stone

  • Старожил
  • *
  • Сообщений: 1129
    • Просмотр профиля
Re: IPROUTE2 + 2 провайдера
« Ответ #5 : 25 Июня 2009, 07:52:53 »
Вопрос:
Цитировать
> Имеется 2 канала в инет, по 1 мбиту каждый хочется чтобы инет работал
> сразу через 2 канала :) Кто-нибудь сталкивался с такой проблемой? Есть
> идея заюзать iptables чтобы по правилу (random с 50% вероятностью) пакеты
> раскидывал но что делать с маршрутизацией?
Ответ:
Цитировать
Через iptables + iproute2

-m statistics ...  -j CONNMARK
-m connmark -j MARK

ip rule add fwmark ...
ip route add ...
Jellyfish 5.19.0-43-generic

Оффлайн Nesmit

  • Старожил
  • *
  • Сообщений: 1296
    • Просмотр профиля
Re: IPROUTE2 + 2 провайдера
« Ответ #6 : 25 Июня 2009, 09:06:32 »
http://gazette.linux.ru.net/rus/articles/lartc/x348.html
это официальный документ. там четко прописано что и куда для 50/50

http://www.opennet.ru/base/net/debian_multilink.txt.html
тут более подробно, но все в ручную метишь iptables чего и куда.

http://forum.interzet.ru/index.php?showtopic=24998&mode=threaded
« Последнее редактирование: 25 Июня 2009, 09:27:16 от Nesmit »

Оффлайн Octogenus

  • Новичок
  • *
  • Сообщений: 10
    • Просмотр профиля
Re: IPROUTE2 + 2 провайдера
« Ответ #7 : 25 Июня 2009, 09:43:07 »
скажите пожалуйста так а если у меня постоянно меняющийся ip адрес , каждый раз когда я подключаюсь провайдер дает мне разные адреса , тогда что мне писать вместо $IP2 ?

Оффлайн Scorpikor

  • Автор темы
  • Новичок
  • *
  • Сообщений: 17
    • Просмотр профиля
Re: IPROUTE2 + 2 провайдера
« Ответ #8 : 03 Июля 2009, 05:39:01 »
а маркировать пакеты по удаленным портам никак?

iptables -t mangle -A PREROUTING  -s 10.235.153.0/24 -p tcp --dport 80  -j MARK --set-mark 1
iptables -t mangle -A PREROUTING  -s 10.235.153.0/24 -p tcp --dport 110  -j MARK --set-mark 1

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

ip rule add fwmark 1 table A1

после чего попасть в таблицу А1 и уже двигаться по маршруту в таблице А1
Правильно ?


Оффлайн zilog82

  • Активист
  • *
  • Сообщений: 420
  • Hello, World!!!
    • Просмотр профиля
Re: IPROUTE2 + 2 провайдера
« Ответ #9 : 03 Июля 2009, 06:45:09 »

Оффлайн Lion-Simba

  • Старожил
  • *
  • Сообщений: 1126
    • Просмотр профиля
Re: IPROUTE2 + 2 провайдера
« Ответ #10 : 03 Июля 2009, 06:46:07 »
скажите пожалуйста так а если у меня постоянно меняющийся ip адрес , каждый раз когда я подключаюсь провайдер дает мне разные адреса , тогда что мне писать вместо $IP2 ?
Использовать MASQUERADE вместо SNAT.
Оказываю индивидуальную платную техподдержку широкого профиля. Обращаться в ЛС или Jabber.

Оффлайн Nesmit

  • Старожил
  • *
  • Сообщений: 1296
    • Просмотр профиля
Re: IPROUTE2 + 2 провайдера
« Ответ #11 : 29 Августа 2009, 23:51:19 »
И все-таки подниму тему еще раз. Как промаркировать нужные порты и направить на нужный шлюз?
PS: хотелось бы иметь целостное решение и занесение в HOWTO.

Оффлайн admin4ek

  • Участник
  • *
  • Сообщений: 105
    • Просмотр профиля
Re: IPROUTE2 + 2 провайдера
« Ответ #12 : 30 Августа 2009, 11:46:18 »
ссылки не осталось (( Вот то что у мну есть может поможет))

Балансировка нагрузки по каналам 
Для   реализации   этого  коварного  плана  нам  понадобиться  немного
   поработать.

   Нам  нужно  ядро  версии  Linux  2.6.14.2 которое можно найти на сайте
   http://kernel.org    ,    Iptables   v.1.3.4   и   патчи   из   набора
   "patch-o-matic-ng" которые добавляют поддержку ROUTE, nth и random для
   Iptables.     Патчи    и    iptables    вы    можете    найти    здесь
   http://www.netfilter.org/downloads.html#ftp      Описывать     процесс
   наложения патчей и сборки ядра я думаю нет необходимости.

Установки:

   Итак  начнем  самое  интерессное,  но  сначала  определимся с тем, что
   имеем.

   В  силу сложившихся обстоятельств инетернет поступает на сервер с двух
   роутеров расстояние между которыми около 1км.
   Поэтому  была  выделена  маленькая  подсеть именно для транспортировки
   трафика на сервер.
   Конфигурация компьютера который все это обьединяет вместе.
   -eth0  -  интерфейс  с  адресом 192.168.1.1/24 (направленный во внутрь сети).
   -eth1   -   интерфейс   с   адресом   192.168.0.1/29  (направленный  в транспортную подсеть).
   -192.168.0.2/29 и 192.168.0.3/29 - адреса шлюзов.
   -192.168.1.2/24  -  адрес  прокси  сервера,  который  раздает  инет пользователям.

Настройки Iptables:

   Создаем новую цепочку правил:

          iptables -t mangle -N NEW_OUT_CONN


   Загоняем все новые соединения в созданную цепочку:

          iptables -t mangle -A FORWARD -i eth0 -o eth1 -m state --state NEW -j NEW_OUT_CONN


   Далее указываем каким пакетам через какой шлюз уходить:

          iptables -t mangle -A POSTROUTING -o eth1 -m connmark --mark 0 -j ROUTE
              --gw 192.168.0.2 --continue
          iptables -t mangle -A POSTROUTING -o eth1 -m connmark --mark 1 -j ROUTE
              --gw 192.168.0.3 --continue


   Ну  и  самое  интерессное,  маркировка  пакетов  с  использованием NTH
   метода:

          iptables -t mangle -A NEW_OUT_CONN -j CONNMARK --set-mark 0
          iptables -t mangle -A NEW_OUT_CONN -m nth --counter 1 --every 2 --packet 0 -j RETURN
          iptables -t mangle -A NEW_OUT_CONN -j CONNMARK --set-mark 1
          iptables -t mangle -A NEW_OUT_CONN -m nth --counter 1 --every 2 --packet 1 -j RETURN


   В  завершении замаскируем уходящие пакеты и перекроем доступ всем кому
   ходить сюда не положено:

          iptables -t nat -A POSTROUTING -s 192.168.1.2 -o eth+ -j SNAT --to-source 192.168.0.1      iptables -t nat -P POSTROUTING DROP


   Вот так все работает у меня.
   Для общего развития приведу пример реализации метода RANDOM:

          iptables -t mangle -A NEW_OUT_CONN -j CONNMARK --set-mark 0
          iptables -t mangle -A NEW_OUT_CONN -m random --average 50 -j RETURN
          iptables -t mangle -A NEW_OUT_CONN -j CONNMARK --set-mark 1


   Я  не  утверждаю,  что  NTH  единственно  правильный метод, но меня он
   устраивает.


Оффлайн Nesmit

  • Старожил
  • *
  • Сообщений: 1296
    • Просмотр профиля
Re: IPROUTE2 + 2 провайдера
« Ответ #13 : 10 Сентября 2009, 13:53:09 »
Все слишком просто, 1 сетевая 2 ADSL модема в режиме роутера(ну или просто роутера). Оба в одной подсети.

В моем случае 2 сетевые смотрят на двух провайдеров.
Грубо говоря вот так:
ip1=192.168.1.24/24
gw1=192.168.1.1
ip2=192.168.0.99/24
gw2=192.168.0.1

Оффлайн Nesmit

  • Старожил
  • *
  • Сообщений: 1296
    • Просмотр профиля
Re: IPROUTE2 + 2 провайдера
« Ответ #14 : 02 Октября 2009, 12:34:12 »
вариант1
сносно работает такой вариант
ip route del default && ip route add default scope global nexthop via 192.168.1.1 dev eth1 weight 1 nexthop via 192.168.0.1 dev eth2 weight 1но, сессии рвуться каждые 5 минут. как бороться?
в некоторых местах говорят о таком
ip route add default equalize nexthop via 192.168.1.1 dev eth1 weight 1 nexthop via 192.168.0.1 dev eth2 weight 1equalize  - описания нигде не нашел.

вариант2, нужны патчи. без патчей никак :(
iptables -A PREROUTING -t mangle -m random --average 50 -j ROUTE --gw 192.168.1.1 && iptables -A PREROUTING -t mangle -j ROUTE --gw 192.168.0.1
Цитировать
iptables v1.3.8: Couldn't load match `random':/lib/iptables/libipt_random.so: cannot open shared object file: No such file or directory

# iptables -A PREROUTING -t mangle -s 192.168.160.0/24 -p tcp --dport 80 -j ROUTE --gw 192.168.0.1
Цитировать
iptables v1.3.8: Unknown arg `--gw'


Пользователь решил продолжить мысль 02 Октября 2009, 12:41:48:
equalize - дает кеширование маршрутов.
40 минут работает. сессии не рвуться.

Пользователь решил продолжить мысль 03 Октября 2009, 18:16:09:
ни фи га
рвуться сессии. :(
« Последнее редактирование: 03 Октября 2009, 18:16:09 от Nesmit »

 

Страница сгенерирована за 0.04 секунд. Запросов: 23.