Настроил шлюз на PF (ОС FreeBSD), все прекрасно работает.
У меня 2 канала, хочу между ними переключаться, при этом сохраняя параметры, заданные в PF, для двух различных каналов.
Под "переключаться" я имею ввиду, что если более скоростной (CHNL1) падает, то пакеты начинают лететь через второй канал (CHNL2), при этом шлюз постоянно проверяет, не поднялся ли первый канал и, если поднялся, то переводит передачу пакетов обратно на основной канал.
Сделал два файла, скопировав один в другой и изменив необходимые настройки внутри файлов:
- pf.CHNL1.conf
- pf.CHNL2.conf
После этого нашел такой вот скриптик:
Код: Выделить всё
#Variables
CHNL1=11.11.11.11
CHNL2=22.22.22.22
if [[ `/sbin/ping -c 3 ${CHNL1} | /usr/bin/grep "64 bytes"` ]]
then
if [[ `/usr/bin/netstat -rn | /usr/bin/grep default | /usr/bin/grep ${CHNL1}` ]]
then
echo "`date '+%d-%m-%Y-%H:%M:%S'`: Default gateway is ${CHNL1}" >>/var/log/channel.log
else
{
#Switch chanel to CHNL1 gateway
/sbin/route delete default
/sbin/route add default ${CHNL1}
/sbin/pfctl -f /etc/pf.CHNL1.conf
echo "`date '+%d-%m-%Y-%H:%M:%S'`: Switch channel to CHNL1 gateway" >>/var/log/channel.log
}
fi
else
{
#Switch chanel to CHNL2
/sbin/route delete default
/sbin/route add default ${CHNL2}
/sbin/pfctl -f /etc/pf.CHNL2.conf
echo "`date '+%d-%m-%Y-%H:%M:%S'`: Switch channel to CHNL2 gateway" >>/var/log/channel.log
}
fi
Задание выполняю через крон с интервалом в 1 минуту:
Код: Выделить всё
# Channel checks
*/1 * * * * root /usr/local/bin/channel_check.sh