Перейти к содержимому
Калькуляторы

2 шлюза одновременно на одном сервере 2 шлюза одновременно на одном сервере

всем спасибо

Изменено пользователем electro_

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Второй дефолт поднимается с метрикой, больше 1

 

ip ro add default via 194.44.239.73 dev eth0.1365

ip ro add default via 194.44.6.65 dev eth1.1368 metric 2

 

Первый можно прописать через gateway в самом начале.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Дефолты переключаться так не будут (точнее будут, но если шлюз перестанет отвечать на ARP-запросы), т.е. это не полноценное резервирование.

Еще могут переключиться, если физически линк пропадет на интерфейсе, но это не ваш случай (при vlan не сработает, он всегда UP).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Примите фул вью об обоих операторов? Нафига эта свистопляска с горожением костылей и сомнительными схемами фейлавера? Лучшая схема фейлавера, что я видел в своей жизни - это принятый BGP Full view.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

' timestamp='1454944047' post='1239203']

Дефолты переключаться так не будут (точнее будут, но если шлюз перестанет отвечать на ARP-запросы), т.е. это не полноценное резервирование.

Еще могут переключиться, если физически линк пропадет на интерфейсе, но это не ваш случай (при vlan не сработает, он всегда UP).

В чем прикол, что эта схема не работает, когда гасится первый дефолт, второй не подхватывает

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

А как вы его гасите?

Вы в курсе, что по-хорошему еще conntrack надо очистить?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

' timestamp='1454944371' post='1239208']

А как вы его гасите?

Вы в курсе, что по-хорошему еще conntrack надо очистить?

 

Вытащил кабель. Нет пинга -- переход на второй шлюз, вот что мне нужно. conntrack - iptables не использую

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Блин, B-G-P! Ставите препенд на входящий трафик для бэкап провайдера. Ставите препенд на исходящий трафик на маршруты через бэкап провайдера. Как только основной сдохнет, входящий _автоматом_ полетит на вас. А исходяший полетит через нескоько секунду - как только отвалятся лучшие маршруты.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Примите фул вью об обоих операторов? Нафига эта свистопляска с горожением костылей и сомнительными схемами фейлавера? Лучшая схема фейлавера, что я видел в своей жизни - это принятый BGP Full view.

 

ДА, принимаю Full view, оператов один, два канала, один Киев, второй резерв Львов. Каким образом сие чудо сконфигурировать ?

 

Блин, B-G-P! Ставите препенд на входящий трафик для бэкап провайдера. Ставите препенд на исходящий трафик на маршруты через бэкап провайдера. Как только основной сдохнет, входящий _автоматом_ полетит на вас. А исходяший полетит через нескоько секунду - как только отвалятся лучшие маршруты.

 

Да, простите, но я не очень силен в БГП. Можете на это примере соорудить конфиг, а его волью и на стенде потестирую. Буду очень благодарен.

Я так понял BGP дает работать без дефолтных маршутов ? или мне на сервере нужно принимать 2 дефолта ?

Изменено пользователем electro_

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ну и что что один пров, стыка то два. Они независимые. Не вижу проблемы резервировать через БГП. У самого сейчас есть линк с двумя каналами от одного прова - 2 сессии БГП. Все прекрасно работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

BGP может работать в двух режимах (условно) - 1) default 2) full view. При фул вью вы получаете таблицу маршрутов всего интернета, которые видны через данного аплинка при дефалте - 1 путь.

 

Пример дать не могу, у вас же итак BGP настроен, просто примите full view от обоих (обычно нужно написать/позвонить оператору) и посмотрите, что будет. Самое страшное что случится - вольется трафик на бэкап канал. Ну и памяти чтобы на машине было хотя бы гигабайта два, а-то не влезет :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

pavel.odintsov

И на кой ему для 1 ноги фуллвью? :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

pavel.odintsov

И на кой ему для 1 ноги фуллвью? :)

 

У всех когда то бывает первый раз :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

electro_

Это как младенцу презерватив вручить, когда-то пригодится :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

electro_

Это как младенцу презерватив вручить, когда-то пригодится :)

 

-j DROP

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Возможно подойдет следующий вариант (Ubuntu 14)

 

Нужно добавить две дополнительные таблицы роутинга (по одной для каждого провайдера) в файл /etc/iproute2/rt_tables

 

# cat /etc/iproute2/rt_tables

1 provider1
2 provider2

 

У каждого провайдера будет своя таблица маршрутизация. Запускаем по крону (5 минут) следующий скрипт.

 

 

#!/bin/bash

#############################################
#                  CONFIG                   # 
#############################################

## IP CONFIG ################################

### LAN
LAN_IF="em2"
LAN_NETWORK="10.0.0.0/8"

### WAN 1 DORIS
WAN1_IF="em1.3"
WAN1_IP="ххх.ххх.ххх.174"
WAN1_GATEWAY="ххх.ххх.ххх.173"
WAN1_NETWORK="ххх.ххх.ххх.172/30"

### WAN 2 EVROTEL
WAN2_IF="em1.4"
WAN2_IP="ххх.ххх.ххх.174"
WAN2_GATEWAY="ххх.ххх.ххх.173"
WAN2_NETWORK="ххх.ххх.ххх.172/30"

# IP ROUTE TABLES
WAN1_ROUTE_TABLE="provider1"
WAN2_ROUTE_TABLE="provider2"

## IP PING HOSTS #############################
PING_HOSTS="8.8.8.8 77.88.8.1"
PING_COUNT=3
PING_MAX_LOSS=2
PING_OPT="-c$PING_COUNT -s 100 -W5 -i1 -I"


## DIRECTORY ################################

# полный путь до скрипта
ABSOLUTE_FILENAME=`readlink -e "$0"`
# каталог в котором лежит скрипт
DIRECTORY=`dirname "$ABSOLUTE_FILENAME"`

## STATUS FILE
FILE_STATUS="${DIRECTORY}/status.dat"

## IPTABLES
IPTABLES_COMMON="${DIRECTORY}/iptables/common.sh"
IPTABLES_WAN1="${DIRECTORY}/iptables/wan1.sh"
IPTABLES_WAN2="${DIRECTORY}/iptables/wan2.sh"
IPTABLES_BOTH="${DIRECTORY}/iptables/both.sh"

## ROUTE
ROUTING="${DIRECTORY}/routing.sh"

## "WHITE" IP
REALIP="${DIRECTORY}/iptables/realip.sh"
REALIP_LIST="${DIRECTORY}/realip.list"

#############################################
#                   VAR                     # 
#############################################

## FILE VAR
VAR_FILE_AUTO_SW=1		# enable auto switch 
VAR_FILE_PING_HOST=0		# not testing hosts
VAR_FILE_IF1=1			# interface 1 up
VAR_FILE_IF2=1			# interface 2 up
VAR_FILE_STATUS=3		# load iptables for both inteface

## TESTING
TEST_RESULT=0			# testing host, return code 0 - not work; 1 - int 1; 2 - int 2; 3 - work both
TEST_WAN1_IFUP=1		# interface 1 up
TEST_WAN2_IFUP=1		# interface 2 up


#############################################
#                 FUNCTION                  # 
#############################################

# log "message" 
function log() {
DATE=$(date +"%d-%m-%y %H:%M:%S");
LOG_FILE="${DIRECTORY}/sw.log";
echo "$DATE | $1" >> $LOG_FILE
return 0
}

############ lock ###########################
LOCK_FILE=${DIRECTORY}/sw.lock
if [ -e $LOCK_FILE ]
then
PID=`cat $LOCK_FILE`
PID_NAME=`ps -p $PID -o comm=`
if [ ! -z $PID_NAME ]
then  
	log "[ERR] The script $0 is found in the list of processes";
	exit -1;
else
	log "[WARNING] Discovered lock-file with a non-existent ID process"
	rm $LOCK_FILE 	
fi
fi
echo $$ > $LOCK_FILE 
######### end lock #########################


# FILE VAR ################################
# Structure file
# AUTO:HOSTS:IF1:IF2:STATUS

function load() {
while IFS=: read F_AUTO F_HOSTS F_IF1 F_IF2 F_STATUS
do
	VAR_FILE_AUTO_SW=$F_AUTO;
	VAR_FILE_PING_HOST=$F_HOSTS;
	VAR_FILE_IF1=$F_IF1;
	VAR_FILE_IF2=$F_IF2;
	VAR_FILE_STATUS=$F_STATUS;
done < $FILE_STATUS
}

function save() {
echo "$VAR_FILE_AUTO_SW:$VAR_FILE_PING_HOST:$VAR_FILE_IF1:$VAR_FILE_IF2:$VAR_FILE_STATUS" > $FILE_STATUS
}

function resetif() {
load;
VAR_FILE_AUTO_SW=1;
VAR_FILE_PING_HOST=1;
VAR_FILE_IF1=2;
VAR_FILE_IF2=2;
VAR_FILE_STATUS=4;
echo "$VAR_FILE_AUTO_SW:$VAR_FILE_PING_HOST:$VAR_FILE_IF1:$VAR_FILE_IF2:$VAR_FILE_STATUS" > $FILE_STATUS
log "--RESET CONFIG--"
}

# config to log
configtolog() {
log "Auto=${VAR_FILE_AUTO_SW} Hosts=${VAR_FILE_PING_HOST} Doris=${VAR_FILE_IF1} Evrotel=${VAR_FILE_IF2} Iptables=${VAR_FILE_STATUS}";
}


## PING ##############################################


# lping interface host
function lping() {
status=`ping $PING_OPT $1 $2 | grep "packet loss" | awk '{print $1-$4}'`
	if [ $status -lt $PING_MAX_LOSS ]; then
			echo 1
		else
			echo 0
	fi
}

# testing gateway provider
function tprovider() {

TEST_WAN1_IFUP=$(lping $WAN1_IF $WAN1_GATEWAY)
TEST_WAN2_IFUP=$(lping $WAN2_IF $WAN2_GATEWAY)

#log "Test provider wan1=$TEST_WAN1_IFUP ; wan2=$TEST_WAN2_IFUP "
}


# tetsting hosts
# work on both interface only load route both interface
function thosts() {

# succeful ping in interfaces
PING_IF1=0
PING_IF2=0

# number ping hosts
NUM_HOST=0

for HOST_UP in $PING_HOSTS
do
	if (( $TEST_WAN1_IFUP == 1 )); then	
		PING_IF1=$(( $PING_IF1 + $(lping $WAN1_IF $PING_HOSTS) ))
	fi

	if (( $TEST_WAN2_IFUP == 1 )); then
		PING_IF2=$(( $PING_IF2 + $(lping $WAN2_IF $PING_HOSTS) ))
	fi

	NUM_HOST=$(($NUM_HOST+1))
done

#log "Host test Doris=${PING_IF1} Evrotel=${PING_IF2}";

# result
if (( ($PING_IF1 > 0) || ($PING_IF2 > 0) )); then
# interface enable
	if (( (($PING_IF1 == $NUM_HOST) && ($PING_IF2 == $NUM_HOST)) || ($PING_IF1 == $PING_IF2)  )); then
	# turn on both intrerface
	echo 3
	elif (( $PING_IF1 > $PING_IF2 )); then
	# turn on interface 1
	echo 1
	else 
	# turn on interface 2
	echo 2
	fi
else
	# interface not on
	echo 0
fi

}

# manual turn on inteface
function onWAN1 () {
log "Turn on onWAN1 (хххх) interface"
source $ROUTING
ip route delete default
ip route add default via $WAN1_GATEWAY dev $WAN1_IF 
source $IPTABLES_WAN1
TEST_RESULT=1
VAR_FILE_STATUS=1
       log "Turn on WAN1 finish"
}

function onWAN2 () {
log "Turn on onWAN2 (хххх) interface"
source $ROUTING
ip route delete default
ip route add default via $WAN2_GATEWAY dev $WAN2_IF
source $IPTABLES_WAN2
TEST_RESULT=2
VAR_FILE_STATUS=2
log "Turn on WAN2 finish"
}

function onBOTH() {
log "Turn on both interface (хххх + хххх)"
source $ROUTING
ip route delete default
ip route add default scope global nexthop via $WAN1_GATEWAY dev $WAN1_IF weight 1 nexthop via $WAN2_GATEWAY dev $WAN2_IF weight 1
source $IPTABLES_BOTH
TEST_RESULT=3;
VAR_FILE_STATUS=3
log "Turn on BOTH finish"
}

# AUTO ####################################
function auto_sw() {

load;
# Выводим данные о начальных данных
#configtolog;
# Тестируем интерфейсы
tprovider;

if (( ( $TEST_WAN1_IFUP == 1 ) || ( $TEST_WAN2_IFUP == 1 ) )); then
  # Если работает хоть один интерфейс

  if (( ($TEST_WAN1_IFUP != $VAR_FILE_IF1) || ($TEST_WAN2_IFUP != $VAR_FILE_IF2) )); then
  	# Если изменилось состояние одного из интерфейса
  	log "Interface changes";

  	# Сохраняем данные о интерфейсах
	VAR_FILE_IF1=$TEST_WAN1_IFUP;
	VAR_FILE_IF2=$TEST_WAN2_IFUP;

		if (( ($TEST_WAN1_IFUP == 1) && ($TEST_WAN2_IFUP == 1) )); then 
    	# Если включились оба интервейса
		log "WAN1 and WAN2 to UP"

			if (( $VAR_FILE_PING_HOST == 1 )); then
				#log "Enable check host"
				onBOTH;
				#ip route delete default
				#ip route add default scope global nexthop via $P1 dev $IF1 weight $W1 nexthop via $P2 dev $IF2 weight $W2
			else
				log "Fast switch - BOTH"
				onBOTH;
			fi
		else 
    # Если включился только один интерфейс
			if (( $TEST_WAN1_IFUP == 1 )); then
				log "Fast switch - WAN1 (хххх)"
				onWAN1;
			else
				log "Fast switch - WAN2 (хххх)"
				onWAN2;
			fi
		fi
	fi

	# host testing
	if (( ($VAR_FILE_PING_HOST == 1) && ($TEST_WAN1_IFUP == 1) && ($TEST_WAN2_IFUP == 1) )); then

      TEST_RESULT=$(thosts);
      #log "debug ${TEST_RESULT} ${VAR_FILE_STATUS}"
      if (( $TEST_RESULT != $VAR_FILE_STATUS )); then
        log "Host changes ${TEST_RESULT}"

        case $TEST_RESULT in
        1) onWAN1;;
        2) onWAN2;;
        *) onBOTH;
           VAR_FILE_STATUS=$TEST_RESULT;
           ;;
        esac 

      fi

	fi

else 
  # Выключенны оба информацию
	log "DOWN BOTH INTERFACE!!!"
	onBOTH;
	VAR_FILE_AUTO_SW=1;
	VAR_FILE_IF1=2;
	VAR_FILE_IF2=2;
	VAR_FILE_STATUS=4;
	TEST_RESULT=0;
fi

save;
}


#############################################
#                 Command                   # 
#############################################

# echo enable params
function echo_help() {
echo " "
echo "[input params]"
echo "--------------------------"
echo "-start) reset and start"
echo "-wan1) switch provider 1 (хххх). auto=off"
echo "-wan2) switch provider 2 (хххх). auto=off"
echo "-all) switch both provider. auto=off"
echo "-hosts) on check hosts and -nohosts) off check hosts"
echo "-auto) auto switch only else auto=on"
echo "-t) test"
echo "-a) set auto"
return 0
}


if [ $# = 0 ]; then

echo_help
exit 0 

else
load;

case $1 in
	-wan1) #switch if1;
	VAR_FILE_AUTO_SW=0;
	#log "Console switch if1."
	log "[OFF] Auto mode"
	onWAN1;
	save;
	;;

	-wan2) #switch if2;
	VAR_FILE_AUTO_SW=0;
	#log "Console switch if2"
	log "[OFF] Auto mode"
	onWAN2;
	save;
	;;

	-all) #Switch all if;
	VAR_FILE_AUTO_SW=0;
	#log "Console switch both"
	log "[OFF] Auto mode"
	onBOTH;
	save;
	;;

	-start) # Start
	log ">>> START >>>";
	onBOTH;
	VAR_FILE_AUTO_SW=1;
	save;
	resetif;
	auto_sw;
	;;

	-auto) #AUTO TESTING
	if (( $VAR_FILE_AUTO_SW == 1 )); then
		auto_sw;
	else
		log "[ERR] Auto switch DISABLE - auto mode off";
	fi
	;;

	-t) # Set auto mode
	#log "Test";
	tprovider;
	;;

	-a) # Set auto mode
	log "Console on auto mode";
	VAR_FILE_AUTO_SW=1;
	save;
	resetif;
	;;

	-hosts) # Set on check hosts
	log "[ON ] check hosts";
	VAR_FILE_PING_HOST=1;
	save;
	#resetif;
	;;

	-nohosts) # Set off check hosts
	log "[OFF] check hosts";
	VAR_FILE_PING_HOST=0;
	save;
	#resetif;
	;;

	-d) # Set off check hosts
	log "Debug";
	tprovider;
	TEST_RESULT=$(thosts);
    echo "debug ${TEST_RESULT}"
	#resetif;
	;;

	*) echo "Error command";
	log "ERROR Console command"
	echo_help;
	;;
esac
fi

########### delete lock #################
rm $LOCK_FILE
exit 0;

 

routing.sh

   #!/bin/bash

   # Clear route table
   ip route flush table $WAN1_ROUTE_TABLE > /dev/null 2>&1
   ip route flush table $WAN2_ROUTE_TABLE > /dev/null 2>&1

   # Create route table
   ip route add $WAN1_NETWORK dev $WAN1_IF src $WAN1_IP table $WAN1_ROUTE_TABLE > /dev/null 2>&1
   ip route add default via $WAN1_GATEWAY table $WAN1_ROUTE_TABLE > /dev/null 2>&1
   ip route add $WAN2_NETWORK dev $WAN2_IF src $WAN2_IP table $WAN2_ROUTE_TABLE > /dev/null 2>&1
   ip route add default via $WAN2_GATEWAY table $WAN2_ROUTE_TABLE > /dev/null 2>&1

   ip route add $WAN1_NETWORK dev $WAN1_IF src $WAN1_IP > /dev/null 2>&1
   ip route add $WAN2_NETWORK dev $WAN2_IF src $WAN2_IP > /dev/null 2>&1

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

   ip rules add from $WAN1_IP table $WAN1_ROUTE_TABLE > /dev/null 2>&1
   ip rules add from $WAN2_IP table $WAN2_ROUTE_TABLE > /dev/null 2>&1

   ip route add $LAN_NETWORK dev $LAN_IF table $WAN1_ROUTE_TABLE > /dev/null 2>&1
   ip route add $WAN2_NETWORK dev $WAN2_IF table $WAN2_ROUTE_TABLE > /dev/null 2>&1
   ip route add 127.0.0.1/8 dev lo table $WAN1_ROUTE_TABLE > /dev/null 2>&1
   ip route add $LAN_NETWORK dev $LAN_IF table $WAN2_ROUTE_TABLE > /dev/null 2>&1
   ip route add $WAN1_NETWORK dev $WAN1_IF table $WAN2_ROUTE_TABLE > /dev/null 2>&1
   ip route add 127.0.0.1/8 dev lo table $WAN2_ROUTE_TABLE > /dev/null 2>&1

   # Set rules for mark trafic
   ip rule add fwmark 10 table $WAN1_ROUTE_TABLE 2>&1
   ip rule add fwmark 20 table $WAN2_ROUTE_TABLE 2>&1

   source $IPTABLES_COMMON;

   ip route delete default 
   ip route add default scope global nexthop via $WAN1_GATEWAY dev $WAN1_IF weight 1 \
   nexthop via $WAN2_GATEWAY dev $WAN2_IF weight 1

 

status.dat

   1:1:1:1:3

 

common.sh

#!/bin/bash

# Start config iptables

# Enable forward
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/ip_dynaddr
echo 1 > /proc/sys/net/ipv4/conf/default/forwarding

#CLEAR IPTABLE ##########################

iptables -F
iptables -F -t nat
iptables -t mangle -F
iptables -X

#DEFAULT POLICE ##########################

iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD ACCEPT

#LOCALHOST INTERFACE #####################

iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

#OUT SERVICE #############################

#SSH
iptables -A INPUT -i ${LAN_IF} -s ${LAN_NETWORK} -p TCP --dport 22 -j ACCEPT
iptables -A INPUT -i ${WAN1_IF} -p TCP --dport 22 -j DROP
iptables -A INPUT -i ${WAN2_IF} -p TCP --dport 22 -j DROP

#PING
iptables -A INPUT -p icmp --icmp-type 0 -j ACCEPT
iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
iptables -A OUTPUT -p icmp -j ACCEPT

#BLACKLIST

iptables -A FORWARD -m set --match-set blacklist src -j DROP
iptables -t nat -A PREROUTING -s ${LAN_NETWORK} -m set --match-set blacklist dst -p tcp -m tcp --dport 80 -j REDIRECT --to-port 3128

iptables -A INPUT -i ${LAN_IF} -s ${LAN_NETWORK} -j ACCEPT

 

wan1.sh

   #!/bin/bash

   #LOCAL INTERFACE #########################
   # LOAD REAL IP
   source $REALIP;

   # Marking trafic
   # mark 10 - ххххх trafic
   iptables -t mangle -A PREROUTING -s 10.0.0.0/20 ! -d 10.0.0.0/20 -j MARK --set-mark 10

   # OUT trafic 
   iptables -t nat -A POSTROUTING -m mark --mark 10 -j SNAT --to-source ххх.ххх.ххх.65-ххх.ххх.ххх.94 --persistent

 

wan2.sh

   #!/bin/bash

   # Load iptables 

   #LOCAL INTERFACE #########################

   # Marking trafic
   # mark 20 - Evrotel trafic
   iptables -t mangle -A PREROUTING -s 10.0.0.0/20 ! -d 10.0.0.0/20 -j MARK --set-mark 20

   # OUT trafic
   iptables -t nat -A POSTROUTING -m mark --mark 20 -j SNAT --to-source ${WAN2_IP}

 

both.sh

   #!/bin/bash
   log "start iptables both"
   # Load iptables 

   #LOCAL INTERFACE #########################

   # LOAD REAL IP
   source $REALIP;

   # Marking trafic
   # mark 10 - ххх trafic
   # mark 20 - yyy trafic
   iptables -t mangle -A PREROUTING -s 10.0.0.0/255.255.240.1 -j MARK --set-mark 10
   iptables -t mangle -A PREROUTING -s 10.0.0.1/255.255.240.1 -j MARK --set-mark 20


   # OUT trafic
   iptables -t nat -A POSTROUTING -m mark --mark 10 -j SNAT --to-source xxx.xxx.xxx.65-xxx.xxx.xxx.94 --persistent #{WAN1_IP}
   iptables -t nat -A POSTROUTING -m mark --mark 20 -j SNAT --to-source ${WAN2_IP}


 

sudo crontab -e

*/5 * * * * sudo /etc/script/sw/sw.sh -auto

 

Директории

sw/                 - корневой каталог
- iptables/         - каталог с настройками iptables
       | common.sh - iptables для всех интерфейсов
       | wan1.sh   - iptables для ххх
       | wan2.sh   - iptables для yyy
       | both.sh   - iptables для балансировки нагрузки, работают два канала
       | realip.sh - скрипт выдачи белых ip адресов nat 1-1
| sw.sh             - главный файл и конфигурация
| sw.log            - логи
| routing.sh        - создает маршруты для интерфейсов
| status.dat        - в файле сохраняются данные о состояние интерфейсов между запуском скрипта

 

 

 

 

В скрипте добавьте свои настройки и проверьте скрипт - выдран с рабочего сервера с обвязкой. Есть одна особенность работы при тестирование внешних ip - "check hosts on", не шлюзов - он переключается при потери более 2/3 пакетов и не переключается обратно при восстановлении, только если на активном канале пропадет интернет. Поэтому необходимо раз в сутки по крону перезапускать скрипт -

2 3 * * * sudo /dir/sw.sh -start;

 

6a2d56527921t.jpg

 

Если у Вас на шлюзе не стоит dns и т.п., то выше указанная проблема исправляться удаление строки в скрипте

ip route add default scope global nexthop via $WAN1_GATEWAY dev $WAN1_IF weight 1 nexthop via $WAN2_GATEWAY dev $WAN2_IF weight 1

В этом варианте при пропадание одного из каналов на шлюзе будут нестабильно работать софт, потеря пакетов.

Изменено пользователем trksergey

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

pavel.odintsov

И на кой ему для 1 ноги фуллвью? :)

 

Можно и без фул вью :) Я просто такое с фул вью делал, потому что у меня 3 аплинка и они всегда все active. С дефалтами просто не особо понятно, как их квагга в роут таблицу линукса запихает.

 

Но решать задачу нужно силами BGP, пусть с приемом только дефалта, а не наколенных скриптов. Люди думали, писали, корректировали протокол в котором учтено все, что нужно учесть для роутинга. Нет, блин, все равно у всех желание написать чудо скрпит там, где 1) он сделает хуже 2) он сделает точку отказа.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.