Теряется ifconfig_msk0_alias0

Простые/общие вопросы по UNIX системам. Спросите здесь, если вы новичок

Модераторы: vadim64, terminus

Правила форума
Убедительная просьба юзать теги [cоde] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
CrazyMihey
проходил мимо
Сообщения: 7
Зарегистрирован: 2016-10-28 20:11:33

Теряется ifconfig_msk0_alias0

Непрочитанное сообщение CrazyMihey » 2016-10-28 20:39:03

Здравствуйте, Уважаемые Форумчане!
В связи с определёнными Обстоятельствами, понадобилось назначить Серваку Два IP-Адреса на Один Сетевой Интерфейс:
  • 1. Динамический, Получается от Провайдера по DHCP.
    2. Статический, Задан для Локалки, известен и не меняется.
Вся Информация, найденная по данному Вопросу сводится к добавлению Алиаса в /etc/rc.conf вида:

Код: Выделить всё

ifconfig_msk0="DHCP"
ifconfig_msk0_alias0="inet 192.168.1.1 netmask 255.255.255.248"
и перезапуску Сети

Код: Выделить всё

/etc/rc.d/netif restart

Код: Выделить всё

root@Server:~# ifconfig
ath0: flags=8802<BROADCAST,SIMPLEX,MULTICAST> metric 0 mtu 2290
        ether 00:34:36:cc:5c:3b
        nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
        media: IEEE 802.11 Wireless Ethernet autoselect (autoselect)
        status: no carrier
msk0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=8010a<TXCSUM,VLAN_MTU,TSO4,LINKSTATE>
        ether 00:38:54:c1:bb:a0
        inet 192.168.1.1 netmask 0xfffffff8 broadcast 192.168.1.7
        inet 23.262.46.102 netmask 0xffffe000 broadcast 23.262.63.255
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
        media: Ethernet autoselect (100baseTX <full-duplex,flowcontrol,rxpause,txpause>)
        status: active
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
        options=600003<RXCSUM,TXCSUM,RXCSUM_IPV6,TXCSUM_IPV6>
        inet6 ::1 prefixlen 128
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x3
        inet 127.0.0.1 netmask 0xff000000
        nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
Но данное Решение «не переживает» передёргивания Сетевого Кабеля (EtherNet) или, как вариант, временного отключения Питания на Сетевом Коммутаторе. То есть после подобных Происшествий ifconfig показывает только Один IPшник, полученный по DHCP, а про Алиас «забывает». Если сделать

Код: Выделить всё

ifconfig msk0 down && ifconfig msk0 up
, то указанный Алиас сохраняется. Также примечательно, что если в /etc/rc.conf написать что-нибудь вроде

Код: Выделить всё

ifconfig_msk0_alias0="ether 00:38:54:c1:bb:a2"
, то после /etc/rc.d/netif restart новый MAC-Адрес присваивается и запоминается при любых Действиях, до Перезагрузки.
В связи с ВышеСказанным, возникает Вопрос: Какие существуют Методы для сохранения ifconfig_msk0_alias0 после временного пропадания Связи или какие Скрипты запускаются автоматически, когда FreeBSD обнаруживает Установление Подключения?
В /var/log/messages появляются Сообщения вида:

Код: Выделить всё

Oct 28 17:44:59 Server kernel: msk0: link state changed to DOWN
Oct 28 17:45:01 Server kernel: msk0: link state changed to UP
Oct 28 17:45:01 Server devd: Executing '/etc/rc.d/dhclient quietstart msk0'
Oct 28 17:45:09 Server dhclient: New IP Address (msk0): 23.262.46.102
Oct 28 17:45:09 Server dhclient: New Subnet Mask (msk0): 255.255.224.0
Oct 28 17:45:09 Server dhclient: New Broadcast Address (msk0): 23.262.63.255
Oct 28 17:45:09 Server dhclient: New Routers (msk0): 23.262.32.1
Но Мне как-то не очень хочется редактировать /etc/rc.d/dhclient (добавлять туда Команду типа ifconfig msk0 alias 192.168.1.1/29), т.к. Это ИдеаЛогически НеПравильно.
Также приходит на Ум Решение проверять Состояние Сети по Cronу и, в случае НеСоответствия запускать всё тот же /etc/rc.d/netif restart, но такое решение выглядит достаточно Топорным, а хочется сделать Изящно и Правильно, да так чтобы лишний раз не дёргать CPU и не отваливать Сеть на 5 Секунд (Время выполнения /etc/rc.d/netif restart)
Заранее Спасибо Всем, кто дочитал до этого места.
Последний раз редактировалось f_andrey 2016-10-28 20:41:22, всего редактировалось 1 раз.
Причина: Автору. пожалуйста, выбирайте соответствующий раздел форума
Всё решается просто :good:, кроме того, над чем застрял в данный Момент :fool:

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
Neus
капитан
Сообщения: 1980
Зарегистрирован: 2008-09-08 21:59:56

Теряется ifconfig_msk0_alias0

Непрочитанное сообщение Neus » 2016-10-28 21:20:23

Oct 28 17:45:01 Server devd: Executing '/etc/rc.d/dhclient quietstart msk0'
devd.conf поправь.
Physics is mathematics with the constraint of reality.
Engineering is physics with the constraint of money.

LOR захватили ситхи.
Добро пожаловать на светлую сторону!

Аватара пользователя
CrazyMihey
проходил мимо
Сообщения: 7
Зарегистрирован: 2016-10-28 20:11:33

Теряется ifconfig_msk0_alias0

Непрочитанное сообщение CrazyMihey » 2016-10-29 14:55:29

devd.conf поправь.
Спасибо, почитал. Вроде всё просто и логично, а вот не получается:
devd.conf трогать постеснялся, вместо этого создал Файл /etc/devd/LocalNetWork.conf следующего содержания:

Код: Выделить всё

notify 0 {
	match "system"		"IFNET";
	match "subsystem"	"(msk0)";
	match "type"		"(LINK_DOWN)";
	media-type		"EtherNet";
	action "/usr/bin/logger Achtung! Now $subsystem is Going Down!";
};

notify 0 {
	match "system"		"IFNET";
	match "subsystem"	"(msk0)";
	match "type"		"(LINK_UP)";
	media-type		"EtherNet";
	action "/usr/bin/logger Achtung! Now $subsystem is Going Up!";
};
Ну так вот (Выполнять "/etc/rc.d/devd restart" не забываю), Первое срабатывает при Выдёргивании «Шнурка», а вместо Второго при Подключении срабатывает только Стандартное "Executing '/etc/rc.d/dhclient quietstart msk0'". Если меняю "notify 0", скажем, на "notify 200", то Моя Команда срабатывает, но в "/var/log/messages" не вижу Стандартного "Executing '/etc/rc.d/dhclient quietstart msk0'". В Документации написано, что Правило с Бо́льшим Приоритетом перекрывает Дефолтные. А как добавить Своё Правило, чтобы не перекрывало Дефолтное – непонятно. Может существует Правило "Продолжить Обработку" – не нашёл? Просто не хотелось бы поломать DHCP, а то Мой SSH отвалится и будет не Good.
Конструкция типа

Код: Выделить всё

	action "/etc/rc.d/dhclient quietstart $subsystem ; ifconfig msk0 alias 192.168.1.1/29";
выглядит костыльно, т.к. (возможно) после Обновления FreeBSD или переезда на Другой Сервак можно будет схватить ещё полную лопату непоняток "Почему?" и "Откуда?". Или Я не просто придираюсь к Мелочам?
Всё решается просто :good:, кроме того, над чем застрял в данный Момент :fool:

Аватара пользователя
Neus
капитан
Сообщения: 1980
Зарегистрирован: 2008-09-08 21:59:56

Теряется ifconfig_msk0_alias0

Непрочитанное сообщение Neus » 2016-10-29 16:30:26

Не костыльно, а не правильно.
Правильно написать в своём конфиге нужные экшены, включая стандартный, а чтобы срабатывало именно твоё правило, естественно приоритет выставить выше дефолтного.
Physics is mathematics with the constraint of reality.
Engineering is physics with the constraint of money.

LOR захватили ситхи.
Добро пожаловать на светлую сторону!

Аватара пользователя
CrazyMihey
проходил мимо
Сообщения: 7
Зарегистрирован: 2016-10-28 20:11:33

Теряется ifconfig_msk0_alias0

Непрочитанное сообщение CrazyMihey » 2016-10-29 17:22:17

Neus писал(а):Не костыльно, а не правильно.
Правильно написать в своём конфиге нужные экшены, включая стандартный, а чтобы срабатывало именно твоё правило, естественно приоритет выставить выше дефолтного.
Конструкцию типа

Код: Выделить всё

   action "/etc/rc.d/dhclient quietstart $subsystem ; ifconfig msk0 alias 192.168.1.1/29";
Я, естественно имел в виду внутри Файла "/etc/devd/LocalNetWork.conf", а не "/etc/devd.conf". Считаю, что гораздо Правильнее добавить НеСуществовавший Файл на Сервак (Чтобы не было всяких "OverWrite"/"Skip"/"Append"?), чем редактировать Готовые Конфиги от Разработчиков Системы. Опасения же касаются только того, что в последующих Версиях (например) Конструкция "/etc/rc.d/dhclient quietstart $subsystem" может как-либо мутировать (Бывает и такое, станет, например "/usr/share/bsdconfig/networking/Run{Oracle,Google,MicroSoft}_DHCP_Client QuietFastStartAndStayResident $subsystem" :ROFL: или типа того), а в Моём Конфиге, который перекрывает Дефолтные Действия, будет вызываться «уже Устаревшая» Конструкция. Поэтому и хотел сделать так, чтобы Действие не перекрывало Дефолтное, а добавляло Необходимый Мне Функционал.
Всё решается просто :good:, кроме того, над чем застрял в данный Момент :fool:

Аватара пользователя
CrazyMihey
проходил мимо
Сообщения: 7
Зарегистрирован: 2016-10-28 20:11:33

Теряется ifconfig_msk0_alias0

Непрочитанное сообщение CrazyMihey » 2016-10-29 21:59:24

На Соседнем Форуме подсказали, IMHO, более Джедайский Путь, который сводится к добавлению одного Failика:
"/etc/dhclient-exit-hooks":

Код: Выделить всё

#!/bin/sh
#
# The Local NetWork Configuration Script.
# CopyLeft(C) by CrazyMihey, All Rights Ignored.
#
LocalAd="msk0"
LocalIP="192.168.1.1"
LocalBt="29"
if [ "${interface}" == "${LocalAd}" ]
 then
  # Include Standart Script Functions, like info and warn.
  . /etc/rc.subr
  . /etc/network.subr
  $IFCONFIG_CMD "${interface}" alias "${LocalIP}/${LocalBt}"
  if $IFCONFIG_CMD "${interface}" | grep --extended-regexp --ignore-case "INet[ ]+${LocalIP}" > /dev/null
   then	# Prints nothing to Log By Default. To register this Event, set rc_info to "Yes" in /etc/rc.conf or use warn instead of info here.
    info "Local IP \"${LocalIP}\" successfully assigned to \"${interface}\" because of \"${reason}\"."
   else
    warn "Can not assign Local IP \"${LocalIP}\" to \"${interface}\" during \"${reason}\"."
  fi
fi
Только вот Сетевуха "e1000phy0: <Marvell 88E3016 10/100 Fast Ethernet PHY> PHY 0 on miibus0" после десятка «ПереТыкиваний» дохнет в "status: no carrier" до самой Холодной Перезагрузки но Это уже совсем другая История…
Узнал много Нового. Всем Спасибо!
Не понятно только, почему подобный Способ не поместили в различные FAQи – везде только рекомендуют "/etc/rc.conf" править на предмет Добавления Алиасов…
Всё решается просто :good:, кроме того, над чем застрял в данный Момент :fool:

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35456
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Теряется ifconfig_msk0_alias0

Непрочитанное сообщение Alex Keda » 2016-11-02 7:05:34

Постоянно используемый альяс, на интерфейсе с DHCP - лично мне такого не надо было никогда.

Наверное, разработчикам тоже ;)
Убей их всех! Бог потом рассортирует...