Глава 11. Объединение интернет-каналов
235
# Интерфейс к провайдеру ISP1
IFl="ethl"
# Интерфейс к провайдеру ISP2
IF2="ppp0"
# IP-адрес для первого провайдера задаем статично, для второго - используется
# протокол DHCP, поэтому нам нужно вычислить IP при каждом запуске сценария
1Р1="1.2.3.хх"
IP2="'ip addr show $IF2 | grep inet | awk ’{print $2}’'"
# шлюз 1
GW1=”1.2.3.1"
# шлюз 2
GW2="2.2.2.1"
# Маска локальной сети
LOCAL_NET="192.168.0.0/24"
# Маска сети провайдера ISP1
ISP1_NET="194.9.хх.хх/хх"
# Маска сети провайдера ISP2
IS P2_NET="195.5.хх.хх/хх"
# Таблицы маршрутизации
TBL1="ISP1"
TBL2="ISP2"
# Относительный "вес" каналов (второй канал более важный)
Wl="l"
W2="2"
Теперь создадим сценарий
/etc/iproute2/routing
, устанавливающий все необходимые
маршруты и правила iptables (листинг 11.4). После редактирования сценария не за-
бываем Сделать его
ИСПОЛНИМЫМ:
chmod +х routing.
#!/bin/bash
# Импортируем файл конфигурации
. /etc/iprouter2/config
# Включаем IPv4 Forwarding
echo "1" > /proc/sys/net/ipv4/ip_forward
# Устанавливаем правила маршрутизации и брандмауэра
ip route add $ISP1_NET dev $IF1 src $IP1 table $TBL1 > /dev/null 2>&1
ip route add default via $GW1 table $TBL1 > /dev/null 2>&1
236
Часть III. Настройка сети и Интернета
ip route add $ISP2_NET dev $IF2 src $IP2 table $TBL2 > /dev/null 2>&1
ip route add default via $GW2 table $TBL2 > /dev/null 2>&1
ip route add $ISP1_NET dev $IF1 src $IP1 > /dev/null 2>&1
ip route add $ISP2_NET dev $IF2 src $IP2
ip route add default via $GW1 > /dev/null 2>&1
ip rule add from $IP1 table $TBL1 > /dev/null 2>&1
ip rule add from $GW2 table $TBL2 > /dev/null 2>&1
ip route add $LOCAL_NET dev $IF0 table $TBL1 > /dev/null 2>&1
ip route
add
$ISP2_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 $LOCAL_NET dev $IF0 table $TBL2 > /dev/null 2>&1
ip route
add
$ISP1_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
iptables -t nat -F POSTROUTING
iptables -t nat -A POSTROUTING -s $LOCAL_NET -o $IF1 -j MASQUERADE
iptables -t nat -A POSTROUTING -s $LOCAL_NET -o $IF2 -j MASQUERADE
Осталось самая малость— написать сценарий, который будет проверять работо-
способность того или иного канала и в случае необходимости менять шлюз по
умолчанию. Сценарий работает просто: он отправляет пять «пингов» подряд, и,
если нет ответа, считается, что канал не работает, и он исключается из таблицы
маршрутизации. Код сценария приведен в листинге 11.5.
#!/bin/bash
# Подключаем конфигурацию
. /etc/iproute2/config
OLDIF1=0
OLDIF2=0
# Настраиваем маршрутизацию
. /etc/iproute2/routing
while true; do
ping -c 5 -s 100 $GW1 -I $IF1 > /dev/null
if [ $? -ne 0 ]; then
echo "Failed ISP1!"
NEWIF1=0
else
NEWIF1=1
fi
Do'stlaringiz bilan baham: |