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


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Два провайдера одновременно (если DHCP?!!!)  (Прочитано 6394 раз)

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

Оффлайн Laplanya

  • Автор темы
  • Участник
  • *
  • Сообщений: 130
    • Просмотр профиля
    • Laplanya Home
 ???
Вот как это работает если имеем двух провайдеров со статическими IP:

Интерфейс "провайдера №1" = eth0
IP = 10.10.10.100
MASK = 255.255.248.0 (*.*.*.*/21)
GW = 10.10.10.1
DNS = 10.10.10.254

Интерфейс "провайдера №2" = eth1
IP = 20.20.20.100
MASK = 255.255.248.0 (*.*.*.*/21)
GW = 20.20.20.1
DNS = 20.20.20.254

Интерфейс "интернет шлюза" = eth2
IP = 192.168.0.1
MASK = 255.255.255.0

+dnsmasq +MASQUERADE

Далее скрипт в автозагрузке /etc/init.d/gateway.sh

#!/bin/sh
#

ip route add 10.10.0.0/21 dev eth0 table lan1
ip route add default via 10.10.10.1 dev eth0 table lan1
ip route add 127.0.0.0/8 dev lo table lan1
ip rule add from 10.10.10.100 table lan1

ip route add 20.20.0.0/21 dev eth1 table lan2
ip route add default via 20.20.20.1 dev eth1 table lan2
ip route add 127.0.0.0/8 dev lo table lan2
ip rule add from 20.20.20.100 table lan2

ip route add 10.10.0.0/21 dev eth0
ip route add default via 10.10.10.1 dev eth0

А теперь вопрос!:
Если от провайдеров все получаем по DHCP? Как быть?
Была идея сделать скрипт опрашивающий параметры интерфейсов eth0 и eth1 и пишущий их в некие переменные $IP $MASK $GW и.т.п. а потом подставлять в скрипт маршрутизации...

ну например как то так:
#!/bin/sh
#

бла бла бла часть скрипта получающая параметры по DHCP от интерфейсов eth0 и eth1 и типа пишут это дело в переменные типа:

$IP1 $GW1 $MASK1 $NET1 $DNS1 и $IP2 $GW2 $MASK2 $NET2 $DNS2 ну а дальше как то так:

ip route add $NET1/$MASK1 dev eth0 table lan1
ip route add default via $GW1 dev eth0 table lan1
ip route add 127.0.0.0/8 dev lo table lan1
ip rule add from $IP1 table lan1

ip route add $NET2/$MASK2 dev eth1 table lan2
ip route add default via $GW2 dev eth1 table lan2
ip route add 127.0.0.0/8 dev lo table lan2
ip rule add from $IP2 table lan2

ip route add $NET1/$MASK1 dev eth0
ip route add default via $GW1 dev eth0

Но как такое написать ума не приложу :-\

S.O.S.
Мой маленький Блог о любимых Debian и Ubuntu!
http://www.laplanya.com

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28511
    • Просмотр профиля
Re: Два провайдера одновременно (если DHCP?!!!)
« Ответ #1 : 14 Сентября 2009, 14:39:32 »
Во-первых, почему маскарад, у тебя что IP меняются каждые 2 часа? Ставь SNAT.
Во-вторых, раз у тебя два физических канала, пиши не адреса а интерфейсы.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

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

Оффлайн Laplanya

  • Автор темы
  • Участник
  • *
  • Сообщений: 130
    • Просмотр профиля
    • Laplanya Home
Re: Два провайдера одновременно (если DHCP?!!!)
« Ответ #2 : 14 Сентября 2009, 14:55:58 »
Во-первых, почему маскарад, у тебя что IP меняются каждые 2 часа? Ставь SNAT.
Во-вторых, раз у тебя два физических канала, пиши не адреса а интерфейсы.

1. маскарад нужен..
2. про интерфейсы можно поподробнее!!! очень интересно увидеть примеры!
Мой маленький Блог о любимых Debian и Ubuntu!
http://www.laplanya.com

Оффлайн Frank

  • Старожил
  • *
  • Сообщений: 1799
  • Профессиональный любитель
    • Просмотр профиля
    • Народный форум Николаева
Re: Два провайдера одновременно (если DHCP?!!!)
« Ответ #3 : 14 Сентября 2009, 15:37:10 »
пиши не via 10.10.10.1, а via eth0

Оффлайн Laplanya

  • Автор темы
  • Участник
  • *
  • Сообщений: 130
    • Просмотр профиля
    • Laplanya Home
Re: Два провайдера одновременно (если DHCP?!!!)
« Ответ #4 : 14 Сентября 2009, 15:45:07 »
пиши не via 10.10.10.1, а via eth0
В чем сокровенный смысл сего действа? Не ну понятно что для шлюза это подойдет а IP а маска?  Если знаете как решить поставленную задачу попробуйте по моему примеру написать свой вариант (так нагляднее..) плизз :)
Мой маленький Блог о любимых Debian и Ubuntu!
http://www.laplanya.com

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28511
    • Просмотр профиля
Re: Два провайдера одновременно (если DHCP?!!!)
« Ответ #5 : 14 Сентября 2009, 16:24:22 »
Во-первых, почему маскарад, у тебя что IP меняются каждые 2 часа? Ставь SNAT.
Во-вторых, раз у тебя два физических канала, пиши не адреса а интерфейсы.

1. маскарад нужен..
2. про интерфейсы можно поподробнее!!! очень интересно увидеть примеры!

Ну раз вы лучше нас знаете, то сами и настраивайте...
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

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

Оффлайн Laplanya

  • Автор темы
  • Участник
  • *
  • Сообщений: 130
    • Просмотр профиля
    • Laplanya Home
Re: Два провайдера одновременно (если DHCP?!!!)
« Ответ #6 : 14 Сентября 2009, 20:54:40 »
Ну раз вы лучше нас знаете, то сами и настраивайте...

Это типа вариант решения проблемы? :) стыдно уважаемый!
Мой маленький Блог о любимых Debian и Ubuntu!
http://www.laplanya.com

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28511
    • Просмотр профиля
Re: Два провайдера одновременно (если DHCP?!!!)
« Ответ #7 : 14 Сентября 2009, 21:49:43 »
Кому стыдно то? Мне? Ничуть.
Я сказал, как по моему мнению должно быть, основываясь на ваших же приведенных выше настройках, вы сказали "нет" - значит, лучше меня знаете. Не смею вам мешать.
Примеры - те же самое, только вместо конкретных IP писать имена интерфейсов. Классика-с.
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

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

Оффлайн Laplanya

  • Автор темы
  • Участник
  • *
  • Сообщений: 130
    • Просмотр профиля
    • Laplanya Home
Re: Два провайдера одновременно (если DHCP?!!!)
« Ответ #8 : 15 Сентября 2009, 10:43:58 »
AnrDaemon - написал:

Кому стыдно то? Мне? Ничуть.
Я сказал, как по моему мнению должно быть, основываясь на ваших же приведенных выше настройках, вы сказали "нет" - значит, лучше меня знаете. Не смею вам мешать.
Примеры - те же самое, только вместо конкретных IP писать имена интерфейсов. Классика-с.


Ок. Давайте без взаимных упреков! То есть получается типа так (исходя из вашей рекомендации):

#!/bin/sh
#

ip route add eth0 dev eth0 table lan1
ip route add default via eth0 dev eth0 table lan1
ip route add 127.0.0.0/8 dev lo table lan1
ip rule add from eth0 table lan1

ip route add eth1 dev eth1 table lan2
ip route add default via eth1 dev eth1 table lan2
ip route add 127.0.0.0/8 dev lo table lan2
ip rule add from eth1 table lan2

ip route add eth0 dev eth0
ip route add default via eth0 dev eth0

Вы утверждаете что это будет работать? Я спрашиваю без иронии! :) Если я не правильно вас понял поправьте пожалуйста! Плизз..

---добавлено---

Первая же строчка в скрипте
ip route add eth0 dev eth0 table lan1

ответила ошибкой! ???
Error: an inet prefix is expected rather than "eth0"

Пользователь решил продолжить мысль 15 Сентября 2009, 11:48:00:
Дорогие форумчане! Я понимаю что достал вас со своей трайблой, но все таки надеюсь на вашу посильную помощь! У нас тут все таки не ЛОР :)

После долгого курения забугорных манов я вижу следующее решение проблемы:

Пишем скрипт dual-gateway.sh со следующим содержимым:
#!/bin/sh
#

NET1= #команда для опроса интерфейса о сети и маске в формате *.*.*.*/* (например 10.128.16.0/21) для eth0 
NET2= #команда для опроса интерфейса о сети и маске в формате *.*.*.*/* (например 10.128.23.0/21) для eth1
IP1= #команда для опроса интерфейса о IP адресе для eth0
IP2= #команда для опроса интерфейса о IP адресе для eth1
GW1= #команда для опроса интерфейса о шлюзе для eth0
GW2= #команда для опроса интерфейса о шлюзе для eth1

#То есть при выполнении команды ее "вывод" (в требуемом формате!!!) должен приравниваться к заданной "переменной"!!!

#Таблица для интерфейса eth0
ip route add $NET1 dev eth0 table lan1 #сеть и маска для eth0
ip route add default via $GW1 dev eth0 table lan1 #шлюз для eth0
ip route add 127.0.0.0/8 dev lo table lan1 #Loopback
ip rule add from $IP1 table lan1 #IP адрес для eth0

#Таблица для интерфейса eth1
ip route add $NET2 dev eth1 table lan2 #сеть и маска для eth1
ip route add default via $GW2 dev eth1 table lan2  #шлюз для eth1
ip route add 127.0.0.0/8 dev lo table lan2  #Loopback
ip rule add from $IP2 table lan2 #IP адрес для eth1

#Главная main таблица
ip route add $NET1 dev eth0
ip route add default via $GW1 dev eth0

Очень прошу вас помочь с допиливанием шапки скрипта касательно команд!
Гуру bash/sh скриптинга отзовитесь!!!
« Последнее редактирование: 15 Сентября 2009, 11:48:00 от Laplanya »
Мой маленький Блог о любимых Debian и Ubuntu!
http://www.laplanya.com

Оффлайн Frank

  • Старожил
  • *
  • Сообщений: 1799
  • Профессиональный любитель
    • Просмотр профиля
    • Народный форум Николаева
Re: Два провайдера одновременно (если DHCP?!!!)
« Ответ #9 : 15 Сентября 2009, 22:41:10 »
Читай внимательней man route. От тыканья пальцем в небо не заработает.
       route  [-v] [-A family] add [-net|-host] target [netmask Nm] [gw Gw] [metric N] [mss M] [window W] [irtt I] [reject] [mod] [dyn] [reinstate]
              [[dev] If]
...
       target the destination network or host. You can provide IP addresses in dotted decimal or host/network names.

       -net   the target is a network.

       -host  the target is a host.
...
       gw GW  route packets via a gateway.  NOTE: The specified gateway must be reachable first. This usually means that  you  have  to  set  up  a
              static  route  to the gateway beforehand. If you specify the address of one of your local interfaces, it will be used to decide about
              the interface to which the packets should be routed to. This is a BSDism compatibility hack.
...
       dev If force  the  route to be associated with the specified device, as the kernel will otherwise try to determine the device on its own (by
              checking already existing routes and device specifications, and where the route is added to). In most normal networks you won’t  need
              this.

              If  dev If is the last option on the command line, the word dev may be omitted, as it’s the default. Otherwise the order of the route
              modifiers (metric - netmask - gw - dev) doesn’t matter.
Там даже примеры есть, тебе только циферки поменять на свои надо:
       route add -net 192.56.76.0 netmask 255.255.255.0 dev eth0
              adds a route to the local network 192.56.76.x via "eth0".  The word "dev" can be omitted here.
Тут собственно таблицы вообще не нужны, всё должно заработать в три-четыре строчки.
« Последнее редактирование: 15 Сентября 2009, 22:45:24 от Frank »

Оффлайн Laplanya

  • Автор темы
  • Участник
  • *
  • Сообщений: 130
    • Просмотр профиля
    • Laplanya Home
Re: Два провайдера одновременно (если DHCP?!!!)
« Ответ #10 : 16 Сентября 2009, 20:01:39 »
to Frank: Напомню, у меня от обоих провайдеров все по DHCP  >:(

Перепробовал тучу вариантов найденных в google, большинство заработало до первой же смены ip :P

Итак.. в последний раз о птичках!

Имеем 3 сетевых карты:

eth0-первый провайдер все по DHCP
eth1-второй провайдер все по DHCP
eth2-шлюз локальной сети, установлен и работает dnsmasq адрес 192.168.1.1 маска 255.255.255.0,
DHCP диапазон IP 192.168.1.2-200

Надо:
Заставить работать интернет по двум провайдерам ОДНОВРЕМЕННО, для пользователей локальной сети скорость канала должна быть СУММОЙ каналов "провайдера 1" и "провайдера 2"!

КАК? S.O.S.


P.S. Убедительная просьба! не тыкать в google поиск и прочее... я там был мед пиво пил... да решение для DHCP не нашол!
Если у вас есть мысль или готовое решение... пишите здесь!
Зделаем совмесными усилиями HowTo.

P.S.S. Заранее извиняюсь если что не так..
Мой маленький Блог о любимых Debian и Ubuntu!
http://www.laplanya.com

Оффлайн kostryukov

  • Старожил
  • *
  • Сообщений: 1588
  • everybody lies
    • Просмотр профиля
    • kostryukov.net
Re: Два провайдера одновременно (если DHCP?!!!)
« Ответ #11 : 16 Сентября 2009, 20:56:00 »
может пригодится статья
у меня можно спросить=)

Оффлайн Frank

  • Старожил
  • *
  • Сообщений: 1799
  • Профессиональный любитель
    • Просмотр профиля
    • Народный форум Николаева

Оффлайн Laplanya

  • Автор темы
  • Участник
  • *
  • Сообщений: 130
    • Просмотр профиля
    • Laplanya Home
Re: Два провайдера одновременно (если DHCP?!!!)
« Ответ #13 : 16 Сентября 2009, 22:41:09 »
 :) Спасибо за наводку!

Вот что получается для меня: (то как это все работает смогу проверить завтра.. дома 2-х провайдеров нема ;D)

1. Для eth0 (что смотрит на локальную сеть) настроим IP адрес 192.168.0.1 с маской 255.255.255.0
2. Установим dnsmasq
sudo apt-get install dnsmasq3. Отредактируем файл /etc/dnsmasq.conf
и пропишем интерфейс для dnsmasq
interface=eth0и правило раздачи IP адресов по DHCP
dhcp-range=192.168.0.50,192.168.0.150,255.255.255.0,12h4. Отредактируем файл /etc/sysctl.conf и пропишем параметр
net.ipv4.ip_forward = 15. Отредактируем файл /etc/iproute2/rt_tables и добавим таблицы T1 и T2
200 T1
201 T2
6. Далее для eth1 и eth2 что смотрят на провайдеров и получают все по DHCP напишем скрипт dual-route.sh следующего содержания:
#!/bin/bash
sleep 5
# Задаем интерфейсы и локальную сеть
IFLOCAL=eth0      # Сетевой интерфейс локальной сети LAN1
IFWAN1=eth1  # Сетевой интерфейс первого провайдера WAN1
IFWAN2=eth2  # Сетевой интерфейс второго провайдера WAN2
LOCALNET=192.168.0.0/24 # Локальная сеть (для IP интернет шлюза 192.168.0.* с маской 255.255.255.0)

# Определяем IP и GATEWAY наших интерфейсов
IPLOCAL=`ifconfig ${IFLOCAL}|grep "inet addr"|awk '{print $2}'|cut -d ':' -f 2`
IPWAN1=`ifconfig ${IFWAN1}|grep "inet addr"|awk '{print $2}'|cut -d ':' -f 2`
GW1=`ifconfig ${IFWAN1}|grep "inet addr"|awk '{print $3}'|cut -d ':' -f 2`
IPWAN2=`ifconfig ${IFWAN2}|grep "inet addr"|awk '{print $2}'|cut -d ':' -f 2`
GW2=`ifconfig ${IFWAN2}|grep "inet addr"|awk '{print $3}'|cut -d ':' -f 2`

# Задаем таблицы маршрутизации
TABLE1=T1
TABLE2=T2


# Удаляем статические таблицы маршрутизации по умолчанию
route del default gw ${GW1} &> /dev/null
route del default gw ${GW2} &> /dev/null

# Описываем через какие таблицы кто ходит
ip route add ${LOCALNET} via ${IPLOCAL} table ${TABLE1} &> /dev/null
ip route add ${LOCALNET} via ${IPLOCAL} table ${TABLE2} &> /dev/null
ip route add 127.0.0.0/8 dev lo table ${TABLE1} &> /dev/null
ip route add 127.0.0.0/8 dev lo table ${TABLE2} &> /dev/null
ip route add 0/0 via ${GW1} table ${TABLE1} &> /dev/null
ip route add 0/0 via ${GW2} table ${TABLE2} &> /dev/null

# Задание правил маршрутизации по IP-адресу источника
ip rule add from ${IPWAN1} lookup ${TABLE1}
ip rule add from ${IPWAN2} lookup ${TABLE2}

# Распределяем нагрузку на два канала
ip route add default equalize nexthop via ${GW1} dev ${IFWAN1} weight 1 nexthop via ${GW2} dev ${IFWAN2} weight 1 &> /dev/null
7. Ну вот и осталось маскарад как то реализовать с eth1 и eth2 на eth0...



Мой маленький Блог о любимых Debian и Ubuntu!
http://www.laplanya.com

Гарри Кашпировский

  • Гость
Re: Два провайдера одновременно (если DHCP?!!!)
« Ответ #14 : 16 Сентября 2009, 23:43:52 »
Такие скрипты наворотил, а на маскараде запнулся. =)
Пример
iptables -t nat -A POSTROUTING -s 1.0.0.0/24 -j MASQUERADE
И в едре включить форвард пакетов
echo 1 >/proc/sys/net/ipv4/ip_forward
Хотя уже увидел в /etc/systcl.conf оно  есть :)

 

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