Ответа сам не нашел, поиск не дал ничего. Если вдруг что просмотрел - каюсь, ткните носом.
Есть сервак на RedHat, обслуживает локалку.
В локалку смотрят три его интерфейса:
eth0 Гигабит - 192.168.0.2
eth1 100 мегабит - 192.168.0.4
wlan0 Wi-Fi - 192.168.0.6
Ест-но предпочтительно работать на гигабите, но свитч бывает падает, eth1 надежнее, и на крайняк Wi-Fi
Нужно чтобы на сервер можно было добиться по 0.2 независимо от используемого интерфейса.
Я вижу скрипт, цикл, пинг 0.1 (роутер), пинг пропадает, опускаем eth0, меняем его IP, меняем IP у eth1, поднимаем eth1, пингуем, пропадает, пробуем Wi-Fi, возможно с отсылкой уведомления администратору на мыло, хотя это не самое важное.
Скрипт реализовать не получилось, незнаю как условия писать( Может есть примеры?
Возможно есть уже готовые програмные решения?
Резервние интерфейсы с одинм IP для сервера (Поднять резерв, если основной упал)
Модераторы: SLEDopit, Модераторы разделов
-
Delfer
- Сообщения: 11
- ОС: Debian, Mandriva, WinXP
-
nesk
- Сообщения: 2268
- Статус: Линукссаксовец
- ОС: MS Windows XP Home SP3
Re: Резервние интерфейсы с одинм IP для сервера
можно сделать bonding
Внимание: У меня под рукой нет машины с Linux. Я не использую эту ОС. Ответы я даю либо по памяти, либо мне помогает гугл. Тщательно читайте маны по тем командам и конфигурационным файлам, которые я упоминаю.
0xDEFEC8ED
0xDEFEC8ED
-
Delfer
- Сообщения: 11
- ОС: Debian, Mandriva, WinXP
Re: Резервние интерфейсы с одинм IP для сервера
Я понимаю что-то типа
Код: Выделить всё
ifconfig bond0 192.168.0.2 netmask 255.255.255.0 broadcast 192.18.0.255 up
ifenslave bond0 eth0
ifenslave bond0 eth1
ifenslave bond0 wlan0-
Delfer
- Сообщения: 11
- ОС: Debian, Mandriva, WinXP
Re: Резервние интерфейсы с одинм IP для сервера
Итак, что сделал:
/etc/modprobe.conf
/etc/sysconfig/network-scripts/ifcfg-bond0
/etc/sysconfig/network-scripts/ifcfg-ath0
/etc/sysconfig/network-scripts/ifcfg-eth0
/etc/sysconfig/network-scripts/ifcfg-eth1
При загрузке рукется(Warning) на то, что не может получить скорость и дуплекс с ath0. Если вытащить провод из eth0 то еще и на скорость и дуплекс eth0 будет ругаться.
Если в работе вытащить кабель из eth0, то ядро выдаст "bad page state in process 'ifdown-eth'". После чего отваливаются все интерфейсы и восстанавливаются только после ребута.
В режиме 0 (rr) теряются 70% пакетов. Все интерфейсы без соединения в bond0 работают нормально...
В догонку. Содержимое /etc/sysconfig/network-scripts/ifdown-eth
/etc/modprobe.conf
Код: Выделить всё
alias bond0 bonding
options bond0 mode=1 arp_interval=60 arp_ip_target=192.168.0.1 primary=eth0/etc/sysconfig/network-scripts/ifcfg-bond0
Код: Выделить всё
DEVICE=bond0
BOOTPROTO=static
IPADDR=192.168.0.2
NETMASK=255.255.255.0
GATEWAY=192.168.0.1
ONBOOT=yes
METRIC=5
MII_NOT_SUPPORTED=no
USERCTL=no
DNS1=192.168.0.1
RESOLV_MODS=no
IPV6INIT=no
IPV6TO4INIT=no/etc/sysconfig/network-scripts/ifcfg-ath0
Код: Выделить всё
DEVICE=ath0
MASTER=bond0
SLAVE=yes
ONBOOT=yes
METRIC=35
MII_NOT_SUPPORTED=no
USERCTL=no
RESOLV_MODS=no
WIRELESS_MODE=Managed
WIRELESS_ESSID=Smth
WIRELESS_ENC_KEY=s:smth
WIRELESS_WPA_DRIVER=madwifi
WIRELESS_WPA_REASSOCIATE=no
IPV6INIT=no
IPV6TO4INIT=no
DHCP_CLIENT=dhclient
NEEDHOSTNAME=no
PEERDNS=yes
PEERYP=yes
PEERNTPD=no/etc/sysconfig/network-scripts/ifcfg-eth0
Код: Выделить всё
DEVICE=eth0
BOOTPROTO=static
ONBOOT=yes
MASTER=bond0
SLAVE=yes
USERCTL=no/etc/sysconfig/network-scripts/ifcfg-eth1
Код: Выделить всё
DEVICE=eth1
BOOTPROTO=static
ONBOOT=yes
MASTER=bond0
SLAVE=yes
USERCTL=noПри загрузке рукется(Warning) на то, что не может получить скорость и дуплекс с ath0. Если вытащить провод из eth0 то еще и на скорость и дуплекс eth0 будет ругаться.
Если в работе вытащить кабель из eth0, то ядро выдаст "bad page state in process 'ifdown-eth'". После чего отваливаются все интерфейсы и восстанавливаются только после ребута.
В режиме 0 (rr) теряются 70% пакетов. Все интерфейсы без соединения в bond0 работают нормально...
В догонку. Содержимое /etc/sysconfig/network-scripts/ifdown-eth
Код: Выделить всё
#!/bin/bash
# Network Interface Configuration System
# Copyright (c) 1996-2005 Red Hat, Inc. all rights reserved.
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License, version 2,
# as published by the Free Software Foundation.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
. /etc/init.d/functions
cd /etc/sysconfig/network-scripts
. ./network-functions
[ -f ../network ] && . ../network
CONFIG=${1}
boot=$2
daemon=
[ "foo${boot}" = "fooboot" -o "foo${boot}" = "foodaemon" ] && daemon=1
source_config
if [ -n "${BRIDGE}" -a -x /usr/sbin/brctl ]; then
/sbin/ip link set dev ${DEVICE} down
/usr/sbin/brctl delif ${BRIDGE} ${DEVICE}
# Upon removing a device from a bridge,
# it's necessary to make radvd reload its config
[ -r /var/run/radvd/radvd.pid ] && kill -HUP `cat /var/run/radvd/radvd.pid`
if LC_ALL=C /usr/sbin/brctl show | LC_ALL=C grep -q "^${BRIDGE} .*can't get port info"; then
/usr/sbin/brctl delbr ${BRIDGE}
fi
exit 0
fi
. /etc/sysconfig/network
# Check to make sure the device is actually up
check_device_down ${DEVICE} && [ "$BOOTPROTO" != "dhcp" -a "$BOOTPROTO" != "bootp" ] && [ -n "$VLAN" -a "$VLAN" != "yes" ] && exit 0
if [ "${SLAVE}" != "yes" -o -z "${MASTER}" ]; then
if [ -n "${HWADDR}" -a -z "${MACADDR}" ]; then
FOUNDMACADDR=`get_hwaddr ${REALDEVICE}`
if [ -n "${FOUNDMACADDR}" -a "${FOUNDMACADDR}" != "${HWADDR}" ]; then
NEWCONFIG=`get_config_by_hwaddr ${FOUNDMACADDR}`
if [ -n "${NEWCONFIG}" ]; then
eval $(LANG=C fgrep "DEVICE=" $NEWCONFIG)
else
echo $"Device ${DEVICE} has MAC address ${FOUNDMACADDR}, instead of configured address ${HWADDR}. Ignoring."
exit 1
fi
if [ -n "${NEWCONFIG}" -a "${NEWCONFIG##*/}" != "${CONFIG##*/}" -a "${DEVICE}" = "${REALDEVICE}" ]; then
exec /sbin/ifdown ${NEWCONFIG}
else
echo $"Device ${DEVICE} has MAC address ${FOUNDMACADDR}, instead of configured address ${HWADDR}. Ignoring."
exit 1
fi
fi
fi
fi
if is_bonding_device ${DEVICE}; then
for device in `LANG=C grep -l "^[[:space:]]*MASTER=${DEVICE}" /etc/sysconfig/network-scripts/ifcfg-*`; do
is_ignored_file "$device" && continue
/sbin/ifdown ${device##*/}
done
fi
/etc/sysconfig/network-scripts/ifdown-ipv6 ${CONFIG}
if [[ "${DHCPV6C}" = [Yy1]* ]] && [ -f /var/run/dhcp6c_${DEVICE}.pid ]; then
kill `cat /var/run/dhcp6c_${DEVICE}.pid`;
rm -f /var/run/dhcp6c_${DEVICE}.pid;
fi
# Kill running dhcp client if present
dhcp_client_pids() {
CLIENTS='dhcpcd|pump|dhcpxd|dhclient|zcip|xsupplicant'
[ -n "${daemon}" -o "$MII_NOT_SUPPORTED" = "yes" ] && CLIENTS="${CLIENTS}|wpa_supplicant"
ps xw | egrep "${CLIENTS}" | grep ${DEVICE} | awk '{print $1;}'
}
if [ -n "${daemon}" -a "$MII_NOT_SUPPORTED" != "yes" ]; then
# use ifplugd -k -W to wait for it to be killed
/sbin/ifplugd -k -W -i ${DEVICE}
fi
retcode=0
pids=`dhcp_client_pids`
if [ -n "$pids" ]; then
kill $pids
retcode=$?
waited=0
while ! dhcp_client_pids > /dev/null && [ "$waited" -lt 50 ]; do
usleep 10000
waited=$(($waited+1))
done
fi
# we can't just delete the configured address because that address
# may have been changed in the config file since the device was
# brought up. Flush all addresses associated with this
# instance instead.
if [ -d "/sys/class/net/${REALDEVICE}" ]; then
if [ "${REALDEVICE}" = "${DEVICE}" ]; then
ip addr flush dev ${REALDEVICE} 2>/dev/null
else
ip addr flush dev ${REALDEVICE} label ${DEVICE} 2>/dev/null
fi
if [ "${SLAVE}" = "yes" -a -n "${MASTER}" ]; then
echo "-${DEVICE}" > /sys/class/net/${MASTER}/bonding/slaves 2>/dev/null
fi
# Remove ip addresses from kernel
for ip in `ip addr show | egrep ${DEVICE}\$ | grep inet | awk '{print $2;}'`; do
ip addr del $ip dev ${DEVICE}
done
if [ "${REALDEVICE}" = "${DEVICE}" ]; then
ip link set dev ${DEVICE} down 2>/dev/null
fi
fi
[ "$retcode" = "0" ] && retcode=$?
# wait up to 5 seconds for device to actually come down...
waited=0
while ! check_device_down ${DEVICE} && [ "$waited" -lt 50 ]; do
usleep 10000
waited=$(($waited+1))
done
# don't leave an outdated key sitting around
if [ -z "$IN_HOTPLUG" -a -n "${WIRELESS_ENC_KEY}" -a -x /sbin/iwconfig ]; then
/sbin/iwconfig ${DEVICE} enc 0 >/dev/null 2>&1
fi
if [ "$retcode" = 0 ]; then
/etc/sysconfig/network-scripts/ifdown-post $CONFIG
# do NOT use $? because ifdown should return whether or not
# the interface went down.
fi
if [ -n "$VLAN" -a -x /sbin/vconfig ]; then
# 802.1q VLAN
if echo ${DEVICE} | LANG=C egrep -v '(:)' | LANG=C egrep -q '(eth|bond)[0-9][0-9]*\.[0-9][0-9]?[0-9]?[0-9]?' \
|| echo ${DEVICE} | LANG=C egrep -q 'vlan[0-9][0-9]?[0-9]?[0-9]?'; then
[ -f /proc/net/vlan/${DEVICE} ] && {
/sbin/vconfig rem ${DEVICE}
}
fi
fi
exit $retcode-
Delfer
- Сообщения: 11
- ОС: Debian, Mandriva, WinXP
Re: Резервние интерфейсы с одинм IP для сервера
А bridege сделать не вариант? Или у нас будет зацикливание пакетов?
-
sim1
- Сообщения: 155
- ОС: GNU,BSD
Re: Резервние интерфейсы с одинм IP для сервера
мост в вашем случае не прокатит
назначение моста - тупо транслировать все что есть на одном интерфейсе на другой
Разработка программ для *nix
-
oxd
- Сообщения: 165
Re: Резервние интерфейсы с одинм IP для сервера
Сеть 192.168.0.0 а маска какая? Если все три интерфейса в одно сети, то зачем???
Бридж с STP здесь лучшее решение, имхо.
Для любителей извращений посмотрите в сторону VRRP, он не совсем для этого, но в данном случае поможет.
Ерунду полную говорите. Невнимательно читали спецификацию 802.1d?
Бридж с STP здесь лучшее решение, имхо.
Для любителей извращений посмотрите в сторону VRRP, он не совсем для этого, но в данном случае поможет.
Ерунду полную говорите. Невнимательно читали спецификацию 802.1d?
Товарищ стой! Сожми покрепче маузер!
Не дай предателю мимо пройти!
Он променял консоль на браузер.
Таким не место в сфере IT!
Не дай предателю мимо пройти!
Он променял консоль на браузер.
Таким не место в сфере IT!
-
sim1
- Сообщения: 155
- ОС: GNU,BSD
Re: Резервние интерфейсы с одинм IP для сервера
oxd писал(а): ↑13.07.2009 10:31Сеть 192.168.0.0 а маска какая? Если все три интерфейса в одно сети, то зачем???
Бридж с STP здесь лучшее решение, имхо.
Для любителей извращений посмотрите в сторону VRRP, он не совсем для этого, но в данном случае поможет.
Ерунду полную говорите. Невнимательно читали спецификацию 802.1d?
Невнимательно читали постановку вопроса ? У ТС, как я понял (пусть он меня поправит если я не прав), все три ин-са смотрят в один сегмент, но только eth0 включен в L2 устройство, и нужно сделать гарантированную связь сервака с данным сегментом. Бридж с STP для резервирования каналов применим при использовании в паре с L2 устройствами, поддерживающими STP, для объединения разных сегментов сети. Т.е в случае ТС зачем на серваке поднимать мост с STP на три интерфейса и тупа пихать все три хвоста в одно L2 ? Какое же это резервирования каналов ? L2 устройство "упало" и все каналы накрылись .... Кроме этого, насколько я помню, приоритеты каналов рассчитываются на "стоимости пути", определяемых алгоритмом построения STP, и самому ee изменить нельзя, а у ТС задача приоритета должна решаться на основе пинга ...
Другими словами, на мой взгляд, резервирование каналов с использованием L2 устройств с STP применимо только тогда, когда у вас минимум три таких устройства (аппаратных, или программных - объединяющих интерфейсы на серваке), имеющих м/у собой избыточные связи. Одно упало связь идет через другое . Ну или через два устройства у которых помимо проводного канала, есть радио канал, в этом случае проводной канал не работает - работает радио канал ну и наоборот.
C определением "тупая трансляция" конечно погорячился, но все-таки задача моста транслировать пакеты 2-го уровня OSI с одного сегмента сети в другой, при этом:
- если включен STP, построение графа сети, отслеживание состояние резервных каналов их блокировка, активация и т.д.
- сверяясь с таблицей МАС-ов на интерфейсах.
Конечно же я не знаю всех обстоятельств, которые побудили ТС-а, решать задачу подобным способом, но я бы в подобной ситуации пытался решить задачу с помощью дополнительных устройств L2. Однако, если все-таки нужно решать программно то тогда бы использовал демон devd и на события каждого инт-са LINK_UP/LINK_DOWN повесил бы скрипты обработки.
Разработка программ для *nix
-
oxd
- Сообщения: 165
Re: Резервние интерфейсы с одинм IP для сервера
Вы как раз описали работу хаба (ну или совсем тупого свича), поэтому я и отправил в ман 
STP здесь прекрасно будет работать. Цель заключается в отключении гигабитного интерфейса когда он перестает работать, например, при помощи админских рук уборщицы, опять же не вижу проблемы, он заблокируется СТП. Кстати даже автоматический расчет метрик стоимости подходит к задаче, просто сдесь BPDU будут летать по кругу, один девайс и отправляет и принимает и сам себе root bridge. Это обычная схема для малых офисов и небольших локалок.
Я кстати тоже не совсем понял зачем автору 3 интерфейса в одну сеть и куда воткнуты эти интерфейсы, не удивлюсь если в одну "мыльницу". Если оно упадет конечно все накроется, но ведь есть еще вайфай в той же сети. Может я чего-то не понял, конечно.
Афтар пиши есчо! Схему сети в студию!!!
STP здесь прекрасно будет работать. Цель заключается в отключении гигабитного интерфейса когда он перестает работать, например, при помощи админских рук уборщицы, опять же не вижу проблемы, он заблокируется СТП. Кстати даже автоматический расчет метрик стоимости подходит к задаче, просто сдесь BPDU будут летать по кругу, один девайс и отправляет и принимает и сам себе root bridge. Это обычная схема для малых офисов и небольших локалок.
Я кстати тоже не совсем понял зачем автору 3 интерфейса в одну сеть и куда воткнуты эти интерфейсы, не удивлюсь если в одну "мыльницу". Если оно упадет конечно все накроется, но ведь есть еще вайфай в той же сети. Может я чего-то не понял, конечно.
Афтар пиши есчо! Схему сети в студию!!!
Товарищ стой! Сожми покрепче маузер!
Не дай предателю мимо пройти!
Он променял консоль на браузер.
Таким не место в сфере IT!
Не дай предателю мимо пройти!
Он променял консоль на браузер.
Таким не место в сфере IT!
-
Delfer
- Сообщения: 11
- ОС: Debian, Mandriva, WinXP
Re: Резервние интерфейсы с одинм IP для сервера
Мне очень лестно, что обсуждение ведется на довольно профессиональном уровне. Сказать честно, я сам больше теоретик, нежели практик...
Сеть 192.168.0.0/24 маска 255.255.255.0 (простите за избыточность). Железный шлюз и днс - 192.168.0.1
С вашего разрешения позволю себе немного абстрагировать задачу, но не отходя от изначальной постановки задачи.
Итак, у нас есть некоторое надежное устройство - "не умный" свитч (чтобы не было предложений работать на уровне железа). К нему подключены:
1. Несколько клиентов, которым не требуется высокая скорость, но требуется высокая надежность. IP/MAC адреса не фиксированы.
2. Шлюз 192.168.0.1
3. Wi-Fi ap к которой подключается ath0
4. eth1 нашего сервера
5. Гигабитная "мыльница", к которой подключено соотв.:
\ 1. Несколько клиентов, которым важна скорость, а не надежность. Только при наличии технических проблем они готовы перейти на на более медленный свитч (да, переткнуть кабели). IP/MAC адреса не фиксированы.
\ 2. eth0 нашего сервера
Вопрос все еще рассматривается на уровне программной реализации на сервере. Предложения по замене оборудования не рассматриваются, их я и сам знаю.
- Проблемы с бондингом думаю решаться при переустановки системы.
- Все же я не понял, как настроить приоритеты у моста.
И еще раз, приведу интересующий меня алгоритм,
1. Работать на eth0 до потери связи
2. При разрыве eth0 переключится на eth1
3. При возобновлении работы eth0 вернуться к нему
4. При разрыве и eth0 и eth1 перейти на ath0 и сообщить администратору (не обязательно, это я и сам додумаю).
ИБП вмонтирован в корпус сервера (самоделка). Так что он, даже если вcе провода перерубить и вынести на улицу, должен оставаться на связи :-D
В догонку...
Изначально была немного другая задумка.
Сервер тихо мирно стоит в сервачной на 100 мегабитах eth1. Его отрубают и по дороге он работает через Wi-Fi ath0. Его приносят в админскую и подрубают к гагабитному свитчу eth0.
Применение чуть разное, но алгоритм один.
-
sim1
- Сообщения: 155
- ОС: GNU,BSD
Re: Резервние интерфейсы с одинм IP для сервера
Лень вдаваться в схему вашей сети и возможность применения в ней моста. К тому же лично у меня был негативный опыт попытки поднять мост с помощью brctl + stp на серваке для двух каналов WiFi + Ethernet. Убил как-то два дня и понял что мост Ethernet + WiFi c помощью brctl можно поднять только для весьма ограниченного набора WiFi карточек. В чем проблема была сейчас конкретно не помню, что-то связанное с ARP запросами, размерами Ethernet кадра и какими-то преобразованиями, которые выполняет (или не выполняет) brctl. Может в тек. версии brctl этого не наблюдается. Тем более расставить приоритеты нужным для вас образом скорее всего не получится ...
Советую все-таки использовать демон devd. У меня на одном из серверов с помощью него настроено логирование пропадание LINK-a на интерфейсах. Вот кусок его конфига.
При пропадании(появлении) связи делается запись через syslog.
В вашем случае на action можно повесить какой-нибудь скрипт и обрабатывать в соответствии с вашим алгоритмом.
Советую все-таки использовать демон devd. У меня на одном из серверов с помощью него настроено логирование пропадание LINK-a на интерфейсах. Вот кусок его конфига.
Код: Выделить всё
...
notify 10 { match "type" "LINK_DOWN"; action "logger -s alert: LINK_DOWN on device: $device-name subsystem: $subsystem"; };
notify 10 { match "type" "LINK_UP"; action "logger -s alert: LINK_UP on device: $device-name subsystem: $subsystem"; };
...При пропадании(появлении) связи делается запись через syslog.
В вашем случае на action можно повесить какой-нибудь скрипт и обрабатывать в соответствии с вашим алгоритмом.
Разработка программ для *nix