Скрипт автоматического переключения на резервный канал с приоритезацией необходимого трафика.
Скрипт будет проверять доступность основного шлюза и ещё нескольких узлов для надежности. В случае недоступности основного канала скрипт перепишет дефолтный маршрут и применит политики ограничения скорости.
Приоритет в данном примере расставлен следующим образом:
Скрипт будет проверять доступность основного шлюза и ещё нескольких узлов для надежности. В случае недоступности основного канала скрипт перепишет дефолтный маршрут и применит политики ограничения скорости.
Приоритет в данном примере расставлен следующим образом:
- Network management
- VoIP
- CRM & ICMP
- HTTP & HTTPS
- Остальное.
Топология :
eth2 - смотрит в локальную сеть
ppp100 - резервный 3G модем.
Скрипт переключения
#!/bin/bash
# STGP GW Internet Connection Checker
#
# 21.12.2016
# Targets to check
TARGET1=10.10.7.30
TARGET2=10.10.15.81
TARGET3=10.10.0.2
# Source IP address
SOURCE=10.10.15.82
#Default GW
GOODGW=10.10.15.81
# Reserv Interface
ifPPP=ppp100
# Flag. Reserv connection in use if exist
LOCKFILE="/tmp/reserv.lock"
# Results default
RESULT1=0
RESULT2=0
RESULT3=0
# Checks
ping $TARGET1 -I $SOURCE -c 1 -W 1
if [ $? -ne "0" ];
then RESULT1=1
else RESULT1=0
fi
ping $TARGET2 -I $SOURCE -c 1 -W 1
if [ $? -ne "0" ];
then RESULT2=1
else RESULT2=0
fi
ping $TARGET3 -I $SOURCE -c 1 -W 1
if [ $? -ne "0" ];
then RESULT3=1
else RESULT3=0
fi
SUMM=$RESULT1$RESULT2$RESULT3
case $SUMM in
000 )
if [ -f ${LOCKFILE} ]
then
ip route del default
ip route add default via $GOODGW
/bin/bash /root/config/qos/default.qos.sh
exit 0
else echo "All Good. Nothing to do" >> /dev/null
exit 0
fi
;;
111 )
if [ ! -f ${LOCKFILE} ]
then
ip route del default
ip route add default dev $ifPPP
/bin/bash /root/config/qos/LANto3G.sh
/bin/bash /root/config/qos/3GtoLAN.sh
touch $LOCKFILE
logger "SUPPORT GW: Alarm! GW Changed default route!"
exit 0
else
echo "Somthing WRONG" >> /dev/null
exit 0
fi
fi
;;
* )
echo "You can to create some action" >> /dev/null
exit 1
;;
esac
Скрипты выставления приоритетов.
Скрипт сброса приоритетов - возвращение дефолтного значения.
#!/bin/bash
#/root/config/qos/default.qos.sh
# Default QoS Settings for Gateway
# You can check QoS by command:
# tc -s class show dev $DEV
#
DEV=eth2
tc=/sbin/tc
$tc qdisc del dev $DEV root
Скрипт выставления приоритета на ppp100 подключении
#!/bin/bash
#/root/config/qos/LANto3G.sh
# QoS Settings for Gateway Reserv Channel
# You can check QoS by command:
# tc -s class show dev $DEV
#
# You must change X.X.X.X/32 (VoIP) and Y.Y.Y.Y/26(CRM)
CEIL=2
DEV=ppp100
tc=/sbin/tc
iptables=/sbin/iptables
$tc qdisc del dev $DEV root
$tc qdisc del dev $DEV root
$tc qdisc add dev $DEV root handle 1: htb default 15
$tc class add dev $DEV parent 1: classid 1:1 htb rate ${CEIL}mbit ceil ${CEIL}mbit
$tc class add dev $DEV parent 1:1 classid 1:10 htb rate 1 mbit ceil 1mbit prio 0
$tc class add dev $DEV parent 1:1 classid 1:11 htb rate 512kbit ceil ${CEIL}mbit prio 1
$tc class add dev $DEV parent 1:1 classid 1:12 htb rate 512kbit ceil ${CEIL}mbit prio 2
$tc class add dev $DEV parent 1:1 classid 1:13 htb rate 512kbit ceil ${CEIL}mbit prio 3
$tc class add dev $DEV parent 1:1 classid 1:14 htb rate 128kbit ceil ${CEIL}mbit prio 4
$tc class add dev $DEV parent 1:1 classid 1:15 htb rate 64kbit ceil ${CEIL}mbit prio 5
$tc qdisc add dev $DEV parent 1:12 handle 120: sfq perturb 10
$tc qdisc add dev $DEV parent 1:13 handle 130: sfq perturb 10
$tc qdisc add dev $DEV parent 1:14 handle 140: sfq perturb 10
$tc qdisc add dev $DEV parent 1:15 handle 150: sfq perturb 10
$tc filter add dev $DEV parent 1:0 protocol ip prio 1 handle 1 fw classid 1:10
$tc filter add dev $DEV parent 1:0 protocol ip prio 2 handle 2 fw classid 1:11
$tc filter add dev $DEV parent 1:0 protocol ip prio 3 handle 3 fw classid 1:12
$tc filter add dev $DEV parent 1:0 protocol ip prio 4 handle 4 fw classid 1:13
$tc filter add dev $DEV parent 1:0 protocol ip prio 5 handle 5 fw classid 1:14
$tc filter add dev $DEV parent 1:0 protocol ip prio 6 handle 6 fw classid 1:15
$iptables -t mangle -F
$iptables -t mangle -I PREROUTING -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j MARK --set-mark 1
$iptables -t mangle -I PREROUTING -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j RETURN
$iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 22 -j MARK --set-mark 1
$iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 22 -j RETURN
$iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 23 -j MARK --set-mark 1
$iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 23 -j RETURN
$iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 53 -j MARK --set-mark 1
$iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 53 -j RETURN
$iptables -t mangle -A PREROUTING -p udp -m udp --dport 53 -j MARK --set-mark 1
$iptables -t mangle -A PREROUTING -p udp -m udp --dport 53 -j RETURN
$iptables -t mangle -A PREROUTING -d X.X.X.X/32 -j MARK --set-mark 2
$iptables -t mangle -A PREROUTING -d X.X.X.X/32-j RETURN
$iptables -t mangle -A PREROUTING -p icmp -j MARK --set-mark 3
$iptables -t mangle -A PREROUTING -p icmp -j RETURN
$iptables -t mangle -A PREROUTING -d Y.Y.Y.Y/26 -j MARK --set-mark 3
$iptables -t mangle -A PREROUTING -d Y.Y.Y.Y/26 -j RETURN
$iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 80 -j MARK --set-mark 4
$iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 80 -j RETURN
$iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 443 -j MARK --set-mark 4
$iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 443 -j RETURN
$iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 8080 -j MARK --set-mark 4
$iptables -t mangle -A PREROUTING -p tcp -m tcp --dport 8080 -j RETURN
Скрипт выставления приоритета на eth2 интерфейсе
#!/bin/bash
#/root/config/qos/3GtoLAN.sh
# QoS Settings for Gateway Reserv Channel
# You can check QoS by command:
# tc -s class show dev $DEV
## You must change X.X.X.X/32 (VoIP) and Y.Y.Y.Y/26(CRM)
CEIL=2
DEV=eth2
tc=/sbin/tc
iptables=/sbin/iptables
$tc qdisc del dev $DEV root
$tc qdisc del dev $DEV root
$tc qdisc add dev $DEV root handle 1: htb default 15
$tc class add dev $DEV parent 1: classid 1:1 htb rate ${CEIL}mbit ceil ${CEIL}mbit
$tc class add dev $DEV parent 1:1 classid 1:10 htb rate 1 mbit ceil 1mbit prio 0
$tc class add dev $DEV parent 1:1 classid 1:11 htb rate 512kbit ceil ${CEIL}mbit prio 1
$tc class add dev $DEV parent 1:1 classid 1:12 htb rate 512kbit ceil ${CEIL}mbit prio 2
$tc class add dev $DEV parent 1:1 classid 1:13 htb rate 512kbit ceil ${CEIL}mbit prio 3
$tc class add dev $DEV parent 1:1 classid 1:14 htb rate 128kbit ceil ${CEIL}mbit prio 4
$tc class add dev $DEV parent 1:1 classid 1:15 htb rate 64kbit ceil ${CEIL}mbit prio 5
$tc qdisc add dev $DEV parent 1:12 handle 120: sfq perturb 10
$tc qdisc add dev $DEV parent 1:13 handle 130: sfq perturb 10
$tc qdisc add dev $DEV parent 1:14 handle 140: sfq perturb 10
$tc qdisc add dev $DEV parent 1:15 handle 150: sfq perturb 10
$tc filter add dev $DEV parent 1:0 protocol ip prio 1 handle 1 fw classid 1:10
$tc filter add dev $DEV parent 1:0 protocol ip prio 2 handle 2 fw classid 1:11
$tc filter add dev $DEV parent 1:0 protocol ip prio 3 handle 3 fw classid 1:12
$tc filter add dev $DEV parent 1:0 protocol ip prio 4 handle 4 fw classid 1:13
$tc filter add dev $DEV parent 1:0 protocol ip prio 5 handle 5 fw classid 1:14
$tc filter add dev $DEV parent 1:0 protocol ip prio 6 handle 6 fw classid 1:15
$iptables -t mangle -F
$iptables -t mangle -I PREROUTING -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j MARK --set-mark 1
$iptables -t mangle -I PREROUTING -p tcp -m tcp --tcp-flags SYN,RST,ACK SYN -j RETURN
$iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 22 -j MARK --set-mark 1
$iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 22 -j RETURN
$iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 23 -j MARK --set-mark 1
$iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 23 -j RETURN
$iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 53 -j MARK --set-mark 1
$iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 53 -j RETURN
$iptables -t mangle -A PREROUTING -p udp -m udp --sport 53 -j MARK --set-mark 1
$iptables -t mangle -A PREROUTING -p udp -m udp --sport 53 -j RETURN
$iptables -t mangle -A PREROUTING -s X.X.X.X/32 -j MARK --set-mark 2
$iptables -t mangle -A PREROUTING -s X.X.X.X/32 -j RETURN
$iptables -t mangle -A PREROUTING -p icmp -j MARK --set-mark 3
$iptables -t mangle -A PREROUTING -p icmp -j RETURN
$iptables -t mangle -A PREROUTING -s Y.Y.Y.Y/26 -j MARK --set-mark 3
$iptables -t mangle -A PREROUTING -s Y.Y.Y.Y/26 -j RETURN
$iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 80 -j MARK --set-mark 4
$iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 80 -j RETURN
$iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 443 -j MARK --set-mark 4
$iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 443 -j RETURN
$iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 8080 -j MARK --set-mark 4
$iptables -t mangle -A PREROUTING -p tcp -m tcp --sport 8080 -j RETURN
Комментариев нет:
Отправить комментарий