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


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: 2 провайдера со статическим ip, в 1 локальную сеть  (Прочитано 2958 раз)

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

Оффлайн fisher74

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 13758
    • Просмотр профиля
думаю функции подбираются из другого скрипта, в котором есть уже все определения переменных

Оффлайн BHE3AIIHO

  • Автор темы
  • Новичок
  • *
  • Сообщений: 24
    • Просмотр профиля
BHE3AIIHO,
А как переменные определяются в твоем последнем скрипте?

ну на сколько я понял они из файла /etc/balance/vars берутся, скрипт /etc/balance/routing.sh и на проверку /etc/balance/check.sh

все лежат /etc/balance/
оттуда и берутся

Оффлайн fisher74

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 13758
    • Просмотр профиля
в последнем листинге vars-ы у Вас закомментированы, видимо поэтому и появился вопрос.

Оффлайн kasadas

  • Новичок
  • *
  • Сообщений: 14
    • Просмотр профиля
# Без шебага.
# Переменные не нужно экспортировать..
#  . /etc/balance/vars.sh
# Тоже костыль, правильно будет единожды выполнить в терминале.
# echo 'net.ipv4.ip_forward = 1' >>/etc/sysctl.conf; sysctl -p
# И это для маршрутизатора.
# А у тебя, по всей видимости - хост
#echo "1" > /proc/sys/net/ipv4/ip_forward
тут нет ни #bash
а все переменные закомментированы.
Покажи тогда все скрипты. У меня подобная проблема просто хотелось бы увидеть все скрипты.

Оффлайн BHE3AIIHO

  • Автор темы
  • Новичок
  • *
  • Сообщений: 24
    • Просмотр профиля
при копировании не все вошло, извиняются, вот такие файлы, все работает

vars

#!/bin/bash
# сетевка локалка
IF0="eth1"
# инет1 крафт
IF1="eth0"
# инет2 домру
IF2="eth2"

IP1="80.242.71.53"
IP2="94.180.105.17"
# шлюз крафт
P1="80.242.71.1"
# шлюз домру
P2="94.180.105.254"

# локалка маска
P0_NET="192.168.0.0/24"
# крафт маска
P1_NET="80.242.71.0/24"
# домру маска
P2_NET="94.180.105.0/24"

TBL1="provider1"
TBL2="provider2"

# Realtive weight of channels bandwidth
W1="2"
W2="1"

routing.sh

#!/bin/bash

. /etc/balance/vars
 # Без шебага.
# Переменные не нужно экспортировать..
#. /etc/balance/vars
# Тоже костыль, правильно будет единожды выполнить в терминале.
# echo 'net.ipv4.ip_forward = 1' >>/etc/sysctl.conf; sysctl -p
# И это для маршрутизатора.
# А у тебя, по всей видимости - хост
#echo "1" > /proc/sys/net/ipv4/ip_forward

# Объявляем функцию...
add_provider1() {
ip rule add from $IP1 table $TBL1 > /dev/null 2>&1
ip route add $P1_NET dev $IF1 src $IP1 table $TBL1 > /dev/null 2>&1
ip route add $P0_NET dev $IF0 table $TBL1 > /dev/null 2>&1
ip route add $P2_NET dev $IF2 table $TBL1 > /dev/null 2>&1
ip route add 127.0.0.0/8 dev lo table $TBL1 > /dev/null 2>&1
ip route add default via $P1 table $TBL1 > /dev/null 2>&1
}

# Объявляем функцию.
add_provider2() {
ip rule add from $IP2 table $TBL2 > /dev/null 2>&1
ip route add $P2_NET dev $IF2 src $IP2 table $TBL2 > /dev/null 2>&1
ip route add $P0_NET dev $IF0 table $TBL2 > /dev/null 2>&1
ip route add $P1_NET dev $IF1 table $TBL2 > /dev/null 2>&1
ip route add 127.0.0.0/8 dev lo table $TBL2 > /dev/null 2>&1
ip route add default via $P2 table $TBL2 > /dev/null 2>&1
}

# Лишнее. C системе есть ifupdown, если устройство получило адрес
# такой машрут уже существует.
#ip route add $P1_NET dev $IF1 src $IP1 > /dev/null 2>&1
#ip route add $P2_NET dev $IF2 src $IP2
# Тоже лишнее. Шлюз по умаолчанию лучше обозначить в настройках сети.
# ip route add default via $P1 > /dev/null 2>&1
# NAT - это для роутера. А тут, похоже конечный хост..
# И Nat лучше будет смотреться в вункциях
#iptables -t nat -F POSTROUTING
#iptables -t nat -A POSTROUTING -s $P0_NET -o $IF1 -j MASQUERADE
#iptables -t nat -A POSTROUTING -s $P0_NET -o $IF2 -j MASQUERADE

# Объявляем функцию
del_provider1() {
ip rule del from $IP2 table $TBL2 > /dev/null 2>&1
ip route del $P2_NET dev $IF2 src $IP2 table $TBL2 > /dev/null 2>&1
ip route del $P0_NET dev $IF0 table $TBL2 > /dev/null 2>&1
ip route del $P1_NET dev $IF1 table $TBL2 > /dev/null 2>&1
ip route del 127.0.0.0/8 dev lo table $TBL2 > /dev/null 2>&1
ip route del default via $P2 table $TBL2 > /dev/null 2>&1
}

# Объявляем функцию
del_provider2() {
ip rule del from $IP2 table $TBL2 > /dev/null 2>&1
ip route del $P2_NET dev $IF2 src $IP2 table $TBL2 > /dev/null 2>&1
ip route del $P0_NET dev $IF0 table $TBL2 > /dev/null 2>&1
ip route del $P1_NET dev $IF1 table $TBL2 > /dev/null 2>&1
ip route del 127.0.0.0/8 dev lo table $TBL2 > /dev/null 2>&1
ip route del default via $P2 table $TBL2 > /dev/null 2>&1
}


check.sh

#!/bin/bash

. /etc/balance/vars

OLDIF1=0
OLDIF2=0

. /etc/balance/routing.sh
while true; do
    ping -c 5 -s 100 $P1 -I $IF1 > /dev/null
    if [ $? -ne 0 ]; then
    echo "Failed IF1!"
    NEWIF1=0
    else
    NEWIF1=1
    fi
    ping -c 5 -s 100 $P2 -I $IF2 > /dev/null
    if [ $? -ne 0 ]; then
    echo "Failed IF2!"
    NEWIF2=0
    else
    NEWIF2=1
    fi

if (( ($NEWIF1!=$OLDIF1) || ($NEWIF2!=$OLDIF2) )); then
    echo "Changing routes"

    if (( ($NEWIF1==1) && ($NEWIF2==1) )); then
    echo "Both channels"
    ip route delete default
    ip route add default scope global nexthop via $P1 dev $IF1 weight $W1 \
    nexthop via $P2 dev $IF2 weight $W2
    elif (( ($NEWIF1==1) && ($NEWIF2==0) )); then
    echo "First channel"
    ip route delete default
    ip route add default via $P1 dev $IF1
    elif (( ($NEWIF1==0) && ($NEWIF2==1) )); then
    echo "Second channel"
    ip route delete default
    ip route add default via $P2 dev $IF2
    fi
else
     echo "Not changed"
     fi

OLDIF1=$NEWIF1
OLDIF2=$NEWIF2
sleep 3
done



Оффлайн kasadas

  • Новичок
  • *
  • Сообщений: 14
    • Просмотр профиля
BHE3AIIHO
вопрос куда эти файлы вставить что б они заработали автоматически? И в каком порядке?

Оффлайн BHE3AIIHO

  • Автор темы
  • Новичок
  • *
  • Сообщений: 24
    • Просмотр профиля
а Вы часто перезагружаете сервер? тогда в cron задачу сделать надо, мне проще руками запустить 1 раз после ручной перезагрузки.
файлы лежат в etc/balance, запускаю руками сначала роутинг, потом чек

Оффлайн kasadas

  • Новичок
  • *
  • Сообщений: 14
    • Просмотр профиля
BHE3AIIHO,
ну ясно я так же )

Пользователь решил продолжить мысль 24 Апреля 2015, 13:58:44:
у меня скрипт routing.sh отрабатывает как будто без ошибок но в тоже время и не изменяется ничего.
« Последнее редактирование: 24 Апреля 2015, 13:58:44 от kasadas »

Оффлайн AnrDaemon

  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 28506
    • Просмотр профиля
sudo -e /etc/init/setup-my-route.conf
description "Routing setup script"
task
start on local-filesystems and net-device-up IFACE!=lo
console log
start /opt/scripts/balance.sh
Хотите получить помощь? Потрудитесь представить запрошенную информацию в полном объёме.

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

Оффлайн BHE3AIIHO

  • Автор темы
  • Новичок
  • *
  • Сообщений: 24
    • Просмотр профиля
всплыла проблемка, при включении скриптов интернет работает как надо, но, АТС(asterisk) начинает мозг сношать, она настроена на работу только через провайдера 1, при включении/балансировки звонки через астериск полностью отключаются к сожалению, как это можно исправить?

Оффлайн BHE3AIIHO

  • Автор темы
  • Новичок
  • *
  • Сообщений: 24
    • Просмотр профиля
всплываем, ситуация такая:
мучаюсь все с тем же, есть у меня 2 подсети:
192.168.9.0/24 через ppp0
192.168.8.0/24 через ppp1
работают они через эти 2 команды:
ip route add 192.168.9.0/24 via 192.168.101.2
ip route add 192.168.8.0/24 via 192.168.101.3

балансировку делал по этому мануалу
https://help.ubuntu.ru/wiki/ip_balancing

до запуска скриптов:
vars
#!/bin/bash

# LAN interface
IF0="eth1"

# WAN interface 1
IF1="eth0"

# WAN interface 2
IF2="eth2"

IP1="80.242.71.53"
IP2="94.180.105.17"

# gateway 1
P1="80.242.71.1"
# gateway 2
P2="94.180.105.254"

# LAN netmask
P0_NET="192.168.0.0/24"
# WAN1 netmask
P1_NET="80.242.71.0/24"
# WAN2 netmask
P2_NET="94.180.105.0/24"

TBL1="provider1"
TBL2="provider2"

# Realtive weight of channels bandwidth
W1="2"
W2="1"
routing.sh
#!/bin/bash

. /etc/balance/vars

echo "1" > /proc/sys/net/ipv4/ip_forward

ip route add 80.242.71.0/24 dev eth0 src 80.242.71.53 table provider1 > /dev/null 2>&1
ip route add default via 80.242.71.1 table provider1 > /dev/null 2>&1
ip route add 94.180.105.0/24 dev eth2 src 94.180.105.17 table provider2 > /dev/null 2>&1
ip route add default via 94.180.105.254 table provider2 > /dev/null 2>&1

ip route add 80.242.71.0/24 dev eth0 src 80.242.71.53 > /dev/null 2>&1
ip route add 94.180.105.0/24 dev eth2 src 94.180.105.17

ip route add default via 80.242.71.1 > /dev/null 2>&1

ip rule add from 80.242.71.53 table provider1 > /dev/null 2>&1
ip rule add from 94.180.105.17 table provider2 > /dev/null 2>&1

ip route add 192.168.0.0/24 dev eth1 table provider1 > /dev/null 2>&1
ip route add 94.180.105.0/24 dev eth2 table provider1 > /dev/null 2>&1
ip route add 127.0.0.0/8 dev lo table provider1 > /dev/null 2>&1
ip route add 192.168.0.0/24 dev eth1 table provider2 > /dev/null 2>&1
ip route add 80.242.71.0/24 dev eth0 table provider2 > /dev/null 2>&1
ip route add 127.0.0.0/8 dev lo table provider2 > /dev/null 2>&1

iptables -t nat -F POSTROUTING
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth0 -j MASQUERADE
iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -o eth2 -j MASQUERADE


check.sh
#!/bin/bash

. /etc/balance/vars

OLDIF1=0
OLDIF2=0

. /etc/balance/routing.sh
while true; do

ping -c 5 -s 100 $P1 -I $IF1 > /dev/null
if [ $? -ne 0 ]; then
echo "Failed IF1!"
NEWIF1=0
else
NEWIF1=1
fi

ping -c 5 -s 100 $P2 -I $IF2 > /dev/null
if [ $? -ne 0 ]; then
echo "Failed IF2!"
NEWIF2=0
else
NEWIF2=1
fi

if (( ($NEWIF1!=$OLDIF1) || ($NEWIF2!=$OLDIF2) )); then
echo "Changing routes"

if (( ($NEWIF1==1) && ($NEWIF2==1) )); then
echo "Both channels"
ip route delete default
ip route add default scope global nexthop via $P1 dev $IF1 weight $W1 \
nexthop via $P2 dev $IF2 weight $W2
elif (( ($NEWIF1==1) && ($NEWIF2==0) )); then
echo "First channel"
ip route delete default
ip route add default via $P1 dev $IF1
elif (( ($NEWIF1==0) && ($NEWIF2==1) )); then
echo "Second channel"
ip route delete default
ip route add default via $P2 dev $IF2
fi

else
echo "Not changed"
fi

OLDIF1=$NEWIF1
OLDIF2=$NEWIF2
sleep 5
done


вот до этих скриптов у меня есть соединение и с локальных машин подсети 192.168.0.0/24 в частности с 192.168.0.111 и 192.168.0.250, а так же с самого прокси 192.168.0.1 до подсетей 192.168.8.0/24 и 192.168.9.0/24

а вот уже после запуска скриптов, доступ из подсети 192.168.0.0/24 в частности с 192.168.0.111 и 192.168.0.250 пропадает совсем, ни пинг ни трасировка не доходит, а вот с прокси сервера который 192.168.0.1 и пинг и трасировка до подсетей 192.168.8.0/24 и 192.168.9.0/24 успешно проходит.
так же у меня работает интернет от 2 провайдеров на подсеть 192.168.0.0/24.

я так понимаю что маршруты почему то уходят с одного провайдера, а получить ответ пытается с другого провайдера.
как побороть эту проблему? :idiot2:

 

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