Может не сильно
Дано: локальная сеть и два (мое решение предусматривает и большее количество) разных провайдера, а так же ЭВМ (ПК или сервере) с тремя сетевыми картами и установленной RELS 6.5
Нужно: обеспечить локальную сеть доступом в интернет через оба канала с примитивной балансировкой.
Решение:
1. Настраиваем сетевые интерфейсы. Для внешних интерфейсов настраиваем getway
2. Создаем каталог /etc/static-routes
Его содержимое
eth1 # - файл с именем сетевого интерфейса, "смотрящего" на провайдера
eth2 # - файл с именем сетевого интерфейса, "смотрящего" на провайдера
local_int.lst # - Файл с указанием локальных интерфейсов и локальных сетей с префиксом в формате : {DEVICE}::{NET_IP}/{PREFIX} , по одному на строку
к примеру
Код: Выделить всё
eth0::192.168.0.0/24
eth3::192.171.4.8/29
В соответствующий файл статических маршрутов эти IP я добавляю скриптом64.233.165.101
64.233.165.113
64.233.165.138
route_add.sh <Имя-интерфейса> <Номер таблицы маршрутизации>
route_add.sh eth2 1
Код: Выделить всё
#!/bin/bash
ETH=$1
TBR=$2
STPATH="/etc/static-routes"
VAR_DATA=( "" )
funk_read_array ()
{
VAR_DATA=( "" )
ind=0
for line in `cat $STPATH/$1 | grep -v "#" | awk -F' //' '{print $1}'`
do
if [ "$line" != "" ]
then
VAR_DATA[$ind]=$line
ind=$[$ind+1]
fi
done
}
STATIC_ROUTE="/etc/sysconfig/network-scripts/route-$ETH"
GW=$(cat /etc/sysconfig/network-scripts/ifcfg-$ETH | grep GATEWAY | awk -F'=' '{print $2}')
IP=$(cat /etc/sysconfig/network-scripts/ifcfg-$ETH | grep IPADDR | awk -F'=' '{print $2}')
ROUTELIST=""
#echo -e
LOCIN=( "" )
LOCNET=( "" )
while read line
do
LOCIN=$(echo $line | awk -F'::' '{print $1}' )
LIP=$(cat /etc/sysconfig/network-scripts/ifcfg-$LOCIN | grep IPADDR | awk -F'=' '{print $2}')
LOCNET=$(echo $line | awk -F'::' '{print $2}' )
ROUTELIST="$ROUTELIST$LOCNET via $LIP table $TBR""\n"
done < <(cat $STPATH/local_int.lst)
ROUTELIST="$ROUTELIST""0/0 via $GW table $TBR""\n"
funk_read_array $ETH
i=0
while [ "$i" -lt ${#VAR_DATA[@]} ]
do
ROUTELIST="$ROUTELIST""${VAR_DATA[$i]} dev $ETH src $IP""\n"
i=$[$i+1]
done
echo -e $ROUTELIST > $STATIC_ROUTE
exit 0
Код: Выделить всё
#!/bin/bash
ETH=$1
TBR=$2
STPATH="/etc/static-routes"
EXTDEV=( "" )
i=0
while read line
do
if [ "$(ifconfig | grep $line)" != "" ]
then
EXTDEV[$i]=$line
i=$[$i+1]
fi
done < <(ls -1 $STPATH | grep -v "local_int.lst")
if [ "${#EXTDEV[@]}" -gt 1 ]
then
DEFROUTE=""
i=0
while [ "$i" -lt ${#EXTDEV[@]} ]
do
GW=$(cat /etc/sysconfig/network-scripts/ifcfg-${EXTDEV[$i]} | grep GATEWAY | awk -F'=' '{print $2}')
DEFROUTE="$DEFROUTE nexthop via $GW dev ${EXTDEV[$i]}"
i=$[$i+1]
done
if [ "$(ip route | grep "default equalize")" == "" ]
then
ip route del default
ip route add default equalize $DEFROUTE
elif [ "${#EXTDEV[@]}" -gt 2 ]
then
i=0
FLAG=1
while [ "$i" -lt ${#EXTDEV[@]} ]
do
if [ "$(ip route | grep "nexthop" | grep ${EXTDEV[$i]})" == "" ]
then
FLAG=0
fi
i=$[$i+1]
done
if [ "$FLAG" = 0 ]
then
ip route del default
ip route add default equalize $DEFROUTE
fi
fi
fi
exit 0
exec /etc/sysconfig/network-scripts/setmultiroutes.sh
(Есть готовый патч)
/etc/sysconfig/network-scripts/ifup-post
Код: Выделить всё
cat ifup-post.patch
--- ifup-post_orig 2013-10-10 21:48:43.000000000 +0700
+++ ifup-post 2014-08-12 16:49:50.667590073 +0700
@@ -100,4 +100,6 @@
/sbin/ifup-local ${DEVICE}
fi
+exec /etc/sysconfig/network-scripts/setmultiroutes.sh
+
exit 0
Код: Выделить всё
service network restart