LINUX.ORG.RU

Сообщения Kluvonog

 

Делать ли шлюз вместе с Zimbra или отдельный комп? И другие вопросы о Zimbra.

Форум — Admin

Добрый день, Уважаемые!

Есть сеть из 50 машин и 3 виндовых сервера. И есть почтовый сервер Zimbra OSE ver 6.0 на Ubuntu Server + SQUID (обычный компьютер). И есть два провайдера воткнутых в 2 роутера d-link и уже роутеры в сеть. И есть я - линуксом занимаюсь очень редко (потому каждый раз как заново - прошлый раз был 3 года назад), плюс с Zimbra не работал, а надо бы настроить хотя бы бэкап.

Хочу сделать так, чтобы провайдеры переключались автоматом, т.к. второй провайдер вообще не используется. Убрать роутеры (т.к. не вижу в них смысла вообще).

Вопросы: 1. Совместить шлюз и почтовик, т.е. всё реализовать на текущем сервере, или поставить старенький компьютер на шлюз? 2. Что нужно настроить в Zimbra в том или другом случае. 3. Стоит ли переносить Zimbra в виртуальную среду (для удобства бэкапа и связанных с этим обновлений и прочих экспериментов)?

Есть и ещё один момент - провайдер1 даёт 4 белых IP и роутер1 через Lan воткнут и в сеть и в почтовик, на котором зачем-то прописан один из этих белых IP, а шлюзом прописан шлюз провайдера, а не роутер1 - я пока понять не могу почему это работает, ведь на роутер 1 не мост настроен, а NAT- разве что роутер1, видя на интерфейсе пакеты предназначенные для шлюза провайдера, туда их и пересылает.

 ,

Kluvonog
()

как сделать «ping -I eth1 ya.ru» если default via eth4

Форум — Admin

Приветствую, Уважаемые!
Пишу (переделываю) скрипт на переключение между провайдерами (одновременный доступ). Все примеры в инете идут с проверкой на доступность шлюзов провайдеров, а если инет лежит у самого провайдера, то мне совсем такой провайдер не нужен в multipath-маршруте (через nexthop). Значит нужно проверить доступность адресов интернета. Сначала думал пинг на ya.ru, потом решил, что наверное лучше обойтись без DNS и решил делать пинги на DNS-сервера гугла 8.8.8.8 и 8.8.4.4 (можно и другие предложения рассмотреть - это, то что в голову пришло, больше ничего не пришло) Замечательно, но если уже лежит первый провайдер (eth1) и default gateway сделан через второго (eth4), то ping -I eth1 8.8.8.8 - не знает куда слать пакет - или знает? И это я ничего не понимаю? При этом ping -I 192.168.20.2 8.8.8.8 - работает но пакеты идут через eth4. Я и правда не всё понимаю, т.к. не всё разжёвано в «Linux Advanced Routing & Traffic Control HOWTO».

Короче вот скрипт:

#!/bin/bash
GW1="192.168.20.1"
GW2="192.168.30.1"
IPADDR1="8.8.8.8" # DNS google
IPADDR2="8.8.4.4" # DNS google
IF1="eth1"
IF2="eth4"
PROV1="/home/ssv/scripts/rc.prov1.sh"
PROV2="/home/ssv/scripts/rc.prov2.sh"
ROUTING2GW="/home/ssv/scripts/rc.routing.sh"



check_real_gates()
{
	if ping -I $IF1 -c5 -l5 -W2 $GW1 2>&1 | grep "100% packet loss" > /dev/null && ping -I $IF2 -c5 -l5 -W2 $GW2 2>&1 | grep "100% packet loss" > /dev/null ; # Если оба провайдера лежат
	then echo WARNING TWO GATEWAYS Is DOWN!!! ; logger WARNING TWO GATEWAYS Is DOWN!!!;
	elif ping -I $IF1 -c5 -l5 -W2 $GW1 2>&1 | grep "100% packet loss" > /dev/null ; # иначе если лежит первый
		then $PROV2 ;                                                       # запускаем скрипт на второго провайдера
	elif ping -I $IF2 -c5 -l5 -W2 $GW2 2>&1 | grep "100% packet loss" > /dev/null ; # иначе если жив первый
		then $PROV1 ;                                                       # то запускаем скрипт на первого провайдера	
	else $ROUTING2GW ;
	fi
}

change_GW1_GW2()
{
	
	if ping -I $IF1 -c5 -l5 -W2 $IPADDR1 2>&1 | grep "64 bytes from" > /dev/null || ping -I $IF2 -c5 -l5 -W2 $IPADDR1 2>&1 | grep "64 bytes from" > /dev/null ;
		then GW1=$IPADDR1 ; GW2=$IPADDR1 ;
	elif ping -I $IF1 -c5 -l5 -W2 $IPADDR2 2>&1 | grep "64 bytes from" > /dev/null || ping -I $IF2 -c5 -l5 -W2 $IPADDR2 2>&1 | grep "64 bytes from" > /dev/null ;
		then GW1=$IPADDR1 ; GW2=$IPADDR1 ;
	else : ; # т.е. google не пингуется, тогда ничего не меняем, пингуем шлюзы провайдеров.
	fi
}


while : ; do
	change_GW1_GW2
	check_real_gates
	sleep 3
done
------------------------- rc.routing.sh -------------------------
#!/bin/bash

# Определим некоторые переменные. Пусть $IF1 будет именем первого интерфейса (if1 на рисунке), а $IF2 -- именем второго.
# Тогда $IP1 будет IP адресом $IF1 , а $IP2 -- IP адресом $IF2 .
# Далее, $GW1 это IP-адрес шлюза провайдера 1, а GW2 -- IP адрес шлюза провайдера 2.
# Наконец, $GW1_NET это IP сеть, к которой принадлежит $GW1 , а GW2_NET -- сеть, к которой принадлежит GW2 . 

IF0="eth0"
IF1="eth1"
IF2="eth4"
#IP0= "192.168.0.26"
IP1="192.168.20.2"
IP2="192.168.30.2"
GW1="192.168.20.1"
GW2="192.168.30.1"
GW1_NET="192.168.20.0/24"
GW2_NET="192.168.30.0/24"
LAN_NET="192.168.0.0/24"


ip route flush table T1 #обнуляем первую таблицу маршрутов
ip route flush table T2 #обнуляем вторую таблицу маршрутов

ip route add $GW1_NET dev $IF1 src $IP1 table T1 #закидываем в первую таблицу инфу о сети первого провайдера
ip route add default via $GW1 table T1           #закидываем в первую таблицу дефолтный гейт на первого провайдера
ip route add $GW2_NET dev $IF2 src $IP2 table T2 #закидываем во вторую таблицу инфу о сети второго провайдера
ip route add default via $GW2 table T2           #закидываем во вторую таблицу дефолтный гейт на второго провайдера


ip route add $GW1_NET dev $IF1 src $IP1 &> /dev/null #заполняем основную таблицу адресов. сеть на первого провайдера
ip route add $GW2_NET dev $IF2 src $IP2 &> /dev/null #заполняем основную таблицу адресов. сеть на второго провайдера


ip rule add from $IP1 table T1     #все пакеты с нашего IP-адреса первого провайдера маршрутизировать по таблице T1
ip rule add from $IP2 table T2     #все пакеты с нашего IP-адреса второго провайдера маршрутизировать по таблице T2



ip route add $LAN_NET     dev $IF0 table T1 #закидываем в первую таблицу инфу о том, что у нас существует локальная сеть
ip route add $GW2_NET     dev $IF2 table T1 #закидываем в первую таблицу инфу о том, что у нас существует еще одна сеть
ip route add 127.0.0.0/8 dev lo   table T1  #закидываем в первую таблицу инфу о существовании лупбека
ip route add $LAN_NET     dev $IF0 table T2 #закидываем во вторую таблицу инфу о том, что у нас существует локальная с
ip route add $GW1_NET     dev $IF1 table T2 #закидываем во вторую таблицу инфу о том, что у нас существует еще одна се
ip route add 127.0.0.0/8 dev lo   table T2  #закидываем во вторую таблицу инфу о существовании лупбека.

ip route del default 
ip route add default scope global nexthop via $GW1 dev $IF1 weight 1 nexthop via $GW2 dev $IF2 weight 1           

ip route flush cache #сбросить кеш маршрутизации

rc.prov2
#!/bin/bash
IF0="eth0"
IF1="eth1"
IF2="eth4"
#IP0= "192.168.0.26"
IP1="192.168.20.2"
IP2="192.168.30.2"
GW1="192.168.20.1"
GW2="192.168.30.1"
GW1_NET="192.168.20.0/24"
GW2_NET="192.168.30.0/24"
LAN_NET="192.168.0.0/24"

ip route flush table T1 #обнуляем первую таблицу маршрутов
ip route flush table T2 #обнуляем вторую таблицу маршрутов

ip route del default 
ip route add default via $GW2 &> /dev/null     #заполняем основную таблицу адресов. дефолтный гейт.

ip route flush cache #сбросить кеш маршрутизации

Команды iptables не стал приводить - итак дофига всего написано. В целом основной вопрос как сделать пинг в инет через «неактивного» провайдера (узнать активен он или нет). Ну и попутно лучше понять linux routing или найти более понятное и детальное руководство или учебник (на русском, английский знаю - но нюансы плохо понимаю).

 , , ,

Kluvonog
()

RSS подписка на новые темы